From c64d98141a05c90612f454ee8bc5878ad08e52eb Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sat, 1 Jun 2019 10:15:58 +0800 Subject: [PATCH 01/92] fix: Show errors in the dialog (#336) --- src/commands/show.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commands/show.ts b/src/commands/show.ts index 6277241f..a0b23f64 100644 --- a/src/commands/show.ts +++ b/src/commands/show.ts @@ -131,7 +131,7 @@ async function showProblemInternal(node: IProblem): Promise<void> { ), ]); } catch (error) { - await promptForOpenOutputChannel("Failed to show the problem. Please open the output channel for details.", DialogType.error); + await promptForOpenOutputChannel(`${error} Please open the output channel for details.`, DialogType.error); } } From e6cd9988b2843d18953d309c8529ca1bb9e5de7a Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sat, 1 Jun 2019 10:32:28 +0800 Subject: [PATCH 02/92] fix: Do not sign out if switch to the same endpoint (#337) --- src/commands/plugin.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commands/plugin.ts b/src/commands/plugin.ts index 3e3b5bf0..481bd6dd 100644 --- a/src/commands/plugin.ts +++ b/src/commands/plugin.ts @@ -26,7 +26,7 @@ export async function switchEndpoint(): Promise<void> { }, ); const choice: IQuickItemEx<string> | undefined = await vscode.window.showQuickPick(picks); - if (!choice) { + if (!choice || choice.value === getLeetCodeEndpoint()) { return; } const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode"); From cdb46d052c253b2f0f5b77dfcbc9dd33a385cf07 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sat, 1 Jun 2019 20:37:52 +0800 Subject: [PATCH 03/92] feat: Support open preview page through Code Lens and context menu (#338) --- package.json | 4 ++++ src/codelens/CustomCodeLensProvider.ts | 5 +++++ src/commands/show.ts | 31 +++++++++++++++++++++++--- src/leetCodeExecutor.ts | 4 ++-- src/utils/problemUtils.ts | 17 ++++++++++++++ 5 files changed, 56 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5413bc2b..7dae6443 100644 --- a/package.json +++ b/package.json @@ -225,6 +225,10 @@ { "command": "leetcode.showSolution", "group": "leetcode@3" + }, + { + "command": "leetcode.previewProblem", + "group": "leetcode@4" } ] }, diff --git a/src/codelens/CustomCodeLensProvider.ts b/src/codelens/CustomCodeLensProvider.ts index 3ee7270d..1290e057 100644 --- a/src/codelens/CustomCodeLensProvider.ts +++ b/src/codelens/CustomCodeLensProvider.ts @@ -32,6 +32,11 @@ export class CustomCodeLensProvider implements vscode.CodeLensProvider { command: "leetcode.showSolution", arguments: [document.uri], }), + new vscode.CodeLens(range, { + title: "Preview", + command: "leetcode.previewProblem", + arguments: [document.uri], + }), ]; } } diff --git a/src/commands/show.ts b/src/commands/show.ts index a0b23f64..f3bd0750 100644 --- a/src/commands/show.ts +++ b/src/commands/show.ts @@ -5,11 +5,13 @@ import * as fse from "fs-extra"; import * as path from "path"; import * as unescapeJS from "unescape-js"; import * as vscode from "vscode"; +import { explorerNodeManager } from "../explorer/explorerNodeManager"; import { LeetCodeNode } from "../explorer/LeetCodeNode"; import { leetCodeChannel } from "../leetCodeChannel"; import { leetCodeExecutor } from "../leetCodeExecutor"; import { leetCodeManager } from "../leetCodeManager"; import { IProblem, IQuickItemEx, languages, ProblemState } from "../shared"; +import { getNodeIdFromFile } from "../utils/problemUtils"; import { DialogOptions, DialogType, openSettingsEditor, promptForOpenOutputChannel, promptForSignIn, promptHintMessage } from "../utils/uiUtils"; import { selectWorkspaceFolder } from "../utils/workspaceUtils"; import * as wsl from "../utils/wslUtils"; @@ -17,8 +19,31 @@ import { leetCodePreviewProvider } from "../webview/leetCodePreviewProvider"; import { leetCodeSolutionProvider } from "../webview/leetCodeSolutionProvider"; import * as list from "./list"; -export async function previewProblem(node: IProblem, isSideMode: boolean = false): Promise<void> { - const descString: string = await leetCodeExecutor.getDescription(node); +export async function previewProblem(input: IProblem | vscode.Uri, isSideMode: boolean = false): Promise<void> { + let node: LeetCodeNode; + if (input instanceof LeetCodeNode) { + node = input; + } else if (input instanceof vscode.Uri) { + const activeFilePath: string = input.fsPath; + const id: string = await getNodeIdFromFile(activeFilePath); + if (!id) { + vscode.window.showErrorMessage(`Failed to resolve the problem id from file: ${activeFilePath}.`); + return; + } + const cachedNode: LeetCodeNode | undefined = explorerNodeManager.getNodeById(id); + if (!cachedNode) { + vscode.window.showErrorMessage(`Failed to resolve the problem with id: ${id}.`); + return; + } + node = cachedNode; + // Move the preview page aside if it's triggered from Code Lens + isSideMode = true; + } else { + vscode.window.showErrorMessage("Invalid input to fetch the preview data."); + return; + } + + const descString: string = await leetCodeExecutor.getDescription(node.id); leetCodePreviewProvider.show(descString, node, isSideMode); } @@ -54,7 +79,7 @@ export async function showSolution(input: LeetCodeNode | vscode.Uri): Promise<vo } else if (input instanceof vscode.Uri) { problemInput = `"${input.fsPath}"`; } else { - vscode.window.showErrorMessage("Invalid input to fetch the solution data"); + vscode.window.showErrorMessage("Invalid input to fetch the solution data."); return; } diff --git a/src/leetCodeExecutor.ts b/src/leetCodeExecutor.ts index ac110190..ad2d0514 100644 --- a/src/leetCodeExecutor.ts +++ b/src/leetCodeExecutor.ts @@ -112,8 +112,8 @@ class LeetCodeExecutor implements Disposable { return solution; } - public async getDescription(problemNode: IProblem): Promise<string> { - return await this.executeCommandWithProgressEx("Fetching problem description...", this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "show", problemNode.id, "-x"]); + public async getDescription(problemNodeId: string): Promise<string> { + return await this.executeCommandWithProgressEx("Fetching problem description...", this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "show", problemNodeId, "-x"]); } public async listSessions(): Promise<string> { diff --git a/src/utils/problemUtils.ts b/src/utils/problemUtils.ts index 10df523b..d2dcc3ed 100644 --- a/src/utils/problemUtils.ts +++ b/src/utils/problemUtils.ts @@ -1,7 +1,9 @@ // Copyright (c) jdneo. All rights reserved. // Licensed under the MIT license. +import * as fse from "fs-extra"; import * as _ from "lodash"; +import * as path from "path"; import { IProblem, langExt } from "../shared"; export function genFileExt(language: string): string { @@ -17,3 +19,18 @@ export function genFileName(node: IProblem, language: string): string { const ext: string = genFileExt(language); return `${node.id}.${slug}.${ext}`; } + +export async function getNodeIdFromFile(fsPath: string): Promise<string> { + const fileContent: string = await fse.readFile(fsPath, "utf8"); + let id: string = ""; + const matchResults: RegExpMatchArray | null = fileContent.match(/@lc.+id=(.+?) /); + if (matchResults && matchResults.length === 2) { + id = matchResults[1]; + } + // Try to get id from file name if getting from comments failed + if (!id) { + id = path.basename(fsPath).split(".")[0]; + } + + return id; +} From 41b3d32cabdfe21af6be437da5e5e555f0f9e553 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Mon, 3 Jun 2019 10:07:03 +0800 Subject: [PATCH 04/92] feat: Refresh the explorer after submitting (#339) --- src/commands/submit.ts | 4 ++++ src/explorer/LeetCodeTreeDataProvider.ts | 13 ++++++++----- src/extension.ts | 4 ++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/commands/submit.ts b/src/commands/submit.ts index f6e2d989..26660029 100644 --- a/src/commands/submit.ts +++ b/src/commands/submit.ts @@ -2,6 +2,7 @@ // Licensed under the MIT license. import * as vscode from "vscode"; +import { leetCodeTreeDataProvider } from "../explorer/LeetCodeTreeDataProvider"; import { leetCodeExecutor } from "../leetCodeExecutor"; import { leetCodeManager } from "../leetCodeManager"; import { DialogType, promptForOpenOutputChannel, promptForSignIn } from "../utils/uiUtils"; @@ -24,5 +25,8 @@ export async function submitSolution(uri?: vscode.Uri): Promise<void> { leetCodeSubmissionProvider.show(result); } catch (error) { await promptForOpenOutputChannel("Failed to submit the solution. Please open the output channel for details.", DialogType.error); + return; } + + leetCodeTreeDataProvider.refresh(); } diff --git a/src/explorer/LeetCodeTreeDataProvider.ts b/src/explorer/LeetCodeTreeDataProvider.ts index a4339614..ac115424 100644 --- a/src/explorer/LeetCodeTreeDataProvider.ts +++ b/src/explorer/LeetCodeTreeDataProvider.ts @@ -11,11 +11,15 @@ import { LeetCodeNode } from "./LeetCodeNode"; export class LeetCodeTreeDataProvider implements vscode.TreeDataProvider<LeetCodeNode> { - private onDidChangeTreeDataEvent: vscode.EventEmitter<any> = new vscode.EventEmitter<any>(); + private context: vscode.ExtensionContext; + + private onDidChangeTreeDataEvent: vscode.EventEmitter<LeetCodeNode | undefined | null> = new vscode.EventEmitter<LeetCodeNode | undefined | null>(); // tslint:disable-next-line:member-ordering public readonly onDidChangeTreeData: vscode.Event<any> = this.onDidChangeTreeDataEvent.event; - constructor(private context: vscode.ExtensionContext) { } + public initialize(context: vscode.ExtensionContext): void { + this.context = context; + } public async refresh(): Promise<void> { await explorerNodeManager.refreshCache(); @@ -26,7 +30,6 @@ export class LeetCodeTreeDataProvider implements vscode.TreeDataProvider<LeetCod if (element.id === "notSignIn") { return { label: element.name, - id: element.id, collapsibleState: vscode.TreeItemCollapsibleState.None, command: { command: "leetcode.signin", @@ -35,11 +38,9 @@ export class LeetCodeTreeDataProvider implements vscode.TreeDataProvider<LeetCod }; } - const idPrefix: number = Date.now(); return { label: element.isProblem ? `[${element.id}] ${element.name}` : element.name, tooltip: this.getSubCategoryTooltip(element), - id: `${idPrefix}.${element.id}`, collapsibleState: element.isProblem ? vscode.TreeItemCollapsibleState.None : vscode.TreeItemCollapsibleState.Collapsed, contextValue: element.isProblem ? "problem" : element.id.toLowerCase(), iconPath: this.parseIconPathFromProblemState(element), @@ -128,3 +129,5 @@ export class LeetCodeTreeDataProvider implements vscode.TreeDataProvider<LeetCod ].join(os.EOL); } } + +export const leetCodeTreeDataProvider: LeetCodeTreeDataProvider = new LeetCodeTreeDataProvider(); diff --git a/src/extension.ts b/src/extension.ts index 978d90ae..a2467c8d 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -12,7 +12,7 @@ import * as submit from "./commands/submit"; import * as test from "./commands/test"; import { explorerNodeManager } from "./explorer/explorerNodeManager"; import { LeetCodeNode } from "./explorer/LeetCodeNode"; -import { LeetCodeTreeDataProvider } from "./explorer/LeetCodeTreeDataProvider"; +import { leetCodeTreeDataProvider } from "./explorer/LeetCodeTreeDataProvider"; import { leetCodeChannel } from "./leetCodeChannel"; import { leetCodeExecutor } from "./leetCodeExecutor"; import { leetCodeManager } from "./leetCodeManager"; @@ -34,7 +34,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<void> leetCodeTreeDataProvider.refresh(); }); - const leetCodeTreeDataProvider: LeetCodeTreeDataProvider = new LeetCodeTreeDataProvider(context); + leetCodeTreeDataProvider.initialize(context); context.subscriptions.push( leetCodeStatusBarController, From 2adaa4351f0b5429ef5303f7e7bc2a6b6c283cd0 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Mon, 3 Jun 2019 14:35:49 +0800 Subject: [PATCH 05/92] feat: Customize the shortcuts in editor (#340) --- package.json | 20 +++++++++- src/codelens/CodeLensController.ts | 2 + src/codelens/CustomCodeLensProvider.ts | 52 +++++++++++++++++++------- src/utils/settingUtils.ts | 4 ++ 4 files changed, 64 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 7dae6443..d8187565 100644 --- a/package.json +++ b/package.json @@ -331,7 +331,25 @@ "type": "boolean", "default": true, "scope": "application", - "description": "Show the submit and test shortcuts in editor or not." + "description": "[Deprecated] Show the submit and test shortcuts in editor or not." + }, + "leetcode.editor.shortcuts": { + "type": "array", + "default": [ + "submit", + "test" + ], + "scope": "application", + "items": { + "type": "string", + "enum": [ + "submit", + "test", + "solution", + "description" + ] + }, + "description": "Customize the shorcuts in editor." }, "leetcode.enableSideMode": { "type": "boolean", diff --git a/src/codelens/CodeLensController.ts b/src/codelens/CodeLensController.ts index a7fa1ef7..9373df27 100644 --- a/src/codelens/CodeLensController.ts +++ b/src/codelens/CodeLensController.ts @@ -15,6 +15,8 @@ class CodeLensController implements Disposable { this.configurationChangeListener = workspace.onDidChangeConfiguration((event: ConfigurationChangeEvent) => { if (event.affectsConfiguration("leetcode.enableShortcuts")) { this.setCodeLensVisibility(); + } else if (event.affectsConfiguration("leetcode.editor.shortcuts")) { + this.internalProvider.refresh(); } }, this); diff --git a/src/codelens/CustomCodeLensProvider.ts b/src/codelens/CustomCodeLensProvider.ts index 1290e057..f201dbd7 100644 --- a/src/codelens/CustomCodeLensProvider.ts +++ b/src/codelens/CustomCodeLensProvider.ts @@ -2,41 +2,67 @@ // Licensed under the MIT license. import * as vscode from "vscode"; +import { getEditorShortcuts } from "../utils/settingUtils"; export class CustomCodeLensProvider implements vscode.CodeLensProvider { - private validFileNamePattern: RegExp = /\d+\..*\.(.+)/; + private onDidChangeCodeLensesEmitter: vscode.EventEmitter<void> = new vscode.EventEmitter<void>(); + + get onDidChangeCodeLenses(): vscode.Event<void> { + return this.onDidChangeCodeLensesEmitter.event; + } + + public refresh(): void { + this.onDidChangeCodeLensesEmitter.fire(); + } public provideCodeLenses(document: vscode.TextDocument): vscode.ProviderResult<vscode.CodeLens[]> { + const shortcuts: string[] = getEditorShortcuts(); + if (!shortcuts) { + return; + } + const fileName: string = document.fileName.trim(); - const matchResult: RegExpMatchArray | null = fileName.match(this.validFileNamePattern); + const matchResult: RegExpMatchArray | null = fileName.match(/\d+\..*\.(.+)/); if (!matchResult) { return undefined; } const range: vscode.Range = new vscode.Range(document.lineCount - 1, 0, document.lineCount - 1, 0); + const codeLens: vscode.CodeLens[] = []; - return [ - new vscode.CodeLens(range, { + if (shortcuts.indexOf("submit") >= 0) { + codeLens.push(new vscode.CodeLens(range, { title: "Submit", command: "leetcode.submitSolution", arguments: [document.uri], - }), - new vscode.CodeLens(range, { + })); + } + + if (shortcuts.indexOf("test") >= 0) { + codeLens.push(new vscode.CodeLens(range, { title: "Test", command: "leetcode.testSolution", arguments: [document.uri], - }), - new vscode.CodeLens(range, { + })); + } + + if (shortcuts.indexOf("solution") >= 0) { + codeLens.push(new vscode.CodeLens(range, { title: "Solution", command: "leetcode.showSolution", arguments: [document.uri], - }), - new vscode.CodeLens(range, { - title: "Preview", + })); + } + + if (shortcuts.indexOf("description") >= 0) { + codeLens.push(new vscode.CodeLens(range, { + title: "Description", command: "leetcode.previewProblem", arguments: [document.uri], - }), - ]; + })); + } + + return codeLens; } } diff --git a/src/utils/settingUtils.ts b/src/utils/settingUtils.ts index c6c643c4..3cc48ea7 100644 --- a/src/utils/settingUtils.ts +++ b/src/utils/settingUtils.ts @@ -10,3 +10,7 @@ export function getWorkspaceConfiguration(): WorkspaceConfiguration { export function shouldHideSolvedProblem(): boolean { return getWorkspaceConfiguration().get<boolean>("hideSolved", false); } + +export function getEditorShortcuts(): string[] { + return getWorkspaceConfiguration().get<string[]>("editor.shortcuts", ["submit", "test"]); +} From 123d95b32dcaf5bd1d8cb30c2b35b43cec4dddaa Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sat, 8 Jun 2019 15:56:16 +0800 Subject: [PATCH 06/92] chore: Bump version to 0.15.0 (#343) --- CHANGELOG.md | 9 +++++++++ README.md | 38 ++++++++++---------------------------- docs/README_zh-CN.md | 38 ++++++++++---------------------------- docs/imgs/shortcuts.png | Bin 0 -> 22573 bytes docs/imgs/solution.png | Bin 112604 -> 0 bytes docs/imgs/submit.png | Bin 19839 -> 0 bytes docs/imgs/test.png | Bin 147940 -> 0 bytes package-lock.json | 38 +++++++++++++++++++------------------- package.json | 4 ++-- 9 files changed, 50 insertions(+), 77 deletions(-) create mode 100644 docs/imgs/shortcuts.png delete mode 100644 docs/imgs/solution.png delete mode 100644 docs/imgs/submit.png delete mode 100644 docs/imgs/test.png diff --git a/CHANGELOG.md b/CHANGELOG.md index ffc9f01e..e8839e7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,15 @@ All notable changes to the "leetcode" extension will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +## [0.15.0] +### Added +- Auto refresh the explorer after submitting [#91](https://github.com/jdneo/vscode-leetcode/issues/91) +- Add a editor shortcut `Description` to show the problem description [#286](https://github.com/jdneo/vscode-leetcode/issues/286) +- Support customizing the shortcuts in editor [#335](https://github.com/jdneo/vscode-leetcode/issues/335) + +### Fixed +[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.0+is%3Aclosed+label%3Abug) + ## [0.14.3] ### Added - Support interpolation for `leetcode.outputFolder` settings [#151](https://github.com/jdneo/vscode-leetcode/issues/151) diff --git a/README.md b/README.md index 64f62c19..5fcf3138 100644 --- a/README.md +++ b/README.md @@ -81,37 +81,18 @@ --- -### Show Top Voted Solution +### Editor Shortcuts <p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/solution.png" alt="Show Top Voted Solution" /> + <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/shortcuts.png" alt="Editor Shortcuts" /> </p> -- Select `Show Top Voted Solution` will display the top voted solution for you. +- The extension supports 4 editor shortcuts (aka Code Lens): + - `Submit`: Submit your answer to LeetCode. + - `Test`: Test your answer with customized test cases. + - `Solution`: Show the top voted solution for the current problem. + - `Description`: Show the problem description page. ---- - -### Submit the Answer -<p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/submit.png" alt="Submit the Answer" /> -</p> - -- You can submit the answer by clicking `Submit` at the bottom of the file. Or you can right click in the editor and select `Submit to LeetCode`. - -> If you want to hide the shortcuts showing in the editor, just simply set the setting `leetcode.enableShortcuts` to false. - ---- - -### Test the Answer -<p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/test.png" alt="Test the Answer" /> -</p> - -- You can test the answer by clicking `Test` at the bottom of the file. Or you can right click in the editor and select `Test in LeetCode`. - -- There are 3 ways to test the answer: - - **Test with the default cases** - - **Write test cases in input box** - - **Test with the written cases in file** + > Note: You can customize the shortcuts using the setting: `leetcode.editor.shortcuts`. By default, only `Submit` and `Test` shortcuts are enabled. --- @@ -142,7 +123,8 @@ | `leetcode.endpoint` | Specify the active endpoint. Supported endpoints are: `leetcode`, `leetcode-cn` | `leetcode` | | `leetcode.outputFolder` | Specify the relative path to save the problem files. Besides using customized path, there are also several reserved words which can be used here: <ul><li>`${tag}`: Categorize the problem according to their tags.<li>`${language}`: Categorize the problem according to their language.</li><li>`${difficulty}`: Categorize the problem according to their difficulty.</li></ul>For example: `problem-${tag}-${difficulty}` | N/A | | `leetcode.enableStatusBar` | Specify whether the LeetCode status bar will be shown or not. | `true` | -| `leetcode.enableShortcuts` | Specify whether the submit and test shortcuts in editor or not. | `true` | +| **(Deprecated)** `leetcode.enableShortcuts` | Specify whether the submit and test shortcuts in editor or not. | `true` | +| `leetcode.editor.shortcuts` | Specify the customized shorcuts in editors | `["submit, test"]` | | `leetcode.enableSideMode` | Specify whether `preview`, `solution` and `submission` tab should be grouped into the second editor column when solving a problem. | `true` | | `leetcode.nodePath` | Specify the `Node.js` executable path. | `node` | diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index 39ae2683..0bd9d54d 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -81,37 +81,18 @@ --- -### 查看高票解答 +### 编辑器快捷方式 <p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/solution.png" alt="高票解答" /> + <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/shortcuts.png" alt="Editor Shortcuts" /> </p> -- 选择 `Show Top Voted Solution` 可查看该题目在讨论区内的高票解答。 +- 插件会在编辑区域内支持四种不同的快捷方式(Code Lens): + - `Submit`: 提交你的答案至 LeetCode; + - `Test`: 用给定的测试用例测试你的答案; + - `Solution`: 显示该问题的高票解答; + - `Description`: 显示该问题的题目描述。 ---- - -### 提交答案 -<p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/submit.png" alt="提交答案" /> -</p> - -- 通过点击文件最下方的 `Submit` 可提交答案。 你也可以在编辑区内右键并选择 `Submit to LeetCode`,将**当前**文件提交。 - -> 如果你不希望在编辑器中显示**测试**和**提交**的快捷方式,可以将配置项 `leetcode.enableShortcuts` 设置为 `false`。 - ---- - -### 测试答案 -<p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/test.png" alt="测试答案" /> -</p> - -- 通过点击文件最下方的 `Test` 可测试答案。你也可以在编辑区内右键并选择 `Test in LeetCode`,对**当前**文件进行测试。 - -- 有下列三种测试集来源: - - **默认测试集**:Test with the default cases - - **在输入框内输入测试集**:Write test cases in input box - - **提供自定义测试集文件**:Test with the written cases in file + > 注意:你可以通过 `leetcode.editor.shortcuts` 配置项来定制需要激活的快捷方式。默认情况下只有 `Submit` 和 `Test` 会被激活。 --- @@ -142,7 +123,8 @@ | `leetcode.endpoint` | 指定使用的终端,可用终端有:`leetcode`, `leetcode-cn` | `leetcode` | | `leetcode.outputFolder` | 指定保存文件时所用的相对文件夹路径。除了用户自定义路径外,也可以使用保留项,包括:<ul><li>`${tag}`: 根据题目的类别进行分类。<li>`${language}`: 根据题目的语言进行分类。</li><li>`${difficulty}`: 根据题目的难度进行分类。</li></ul>例如:`problem-${tag}-${difficulty}` | N/A | | `leetcode.enableStatusBar` | 指定是否在 VS Code 下方显示插件状态栏。 | `true` | -| `leetcode.enableShortcuts` | 指定是否在 VS Code 编辑文件下方显示提交和测试的快捷按钮。 | `true` | +| **(Deprecated)** `leetcode.enableShortcuts` | 指定是否在 VS Code 编辑文件下方显示提交和测试的快捷按钮。 | `true` | +| `leetcode.editor.shortcuts` | 指定在编辑器内所自定义的快捷方式。 | `["submit, test"]` | | `leetcode.enableSideMode` | 指定在解决一道题时,是否将`问题预览`、`高票答案`与`提交结果`窗口集中在编辑器的第二栏。 | `true` | | `leetcode.nodePath` | 指定 `Node.js` 可执行文件的路径。 | `node` | diff --git a/docs/imgs/shortcuts.png b/docs/imgs/shortcuts.png new file mode 100644 index 0000000000000000000000000000000000000000..c949989d5f237ea67d5277ade9a3a13b47610b0b GIT binary patch literal 22573 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 literal 0 HcmV?d00001 diff --git a/docs/imgs/solution.png b/docs/imgs/solution.png deleted file mode 100644 index 526d3f66ac976c4a44f5216840ef77590fb943b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112604 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	g0oMzeFvDfYmUWlomhW}h@=g&_+<)w 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 TR$0`&00000NkvXXu0mjfA6|)I diff --git a/docs/imgs/submit.png b/docs/imgs/submit.png deleted file mode 100644 index 9c81a76000bef412df8bb35fbd14a35e9f6870ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19839 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 Lu6{1-oD!M<3H(+o diff --git a/docs/imgs/test.png b/docs/imgs/test.png deleted file mode 100644 index b90feab802444b07f42dada87389898d63d0a990..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147940 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	t-Toi7~EEu6pT)IjbNLO;HHH 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 diff --git a/package-lock.json b/package-lock.json index 7ea3a73c..f6c87e2d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "vscode-leetcode", - "version": "0.14.3", + "version": "0.15.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -66,13 +66,13 @@ }, "acorn": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", + "resolved": "http://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", "optional": true }, "acorn-globals": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", + "resolved": "http://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", "optional": true, "requires": { @@ -135,7 +135,7 @@ }, "async": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" }, "asynckit": { @@ -258,7 +258,7 @@ }, "cheerio": { "version": "0.20.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.20.0.tgz", + "resolved": "http://registry.npmjs.org/cheerio/-/cheerio-0.20.0.tgz", "integrity": "sha1-XHEPK6uVZTJyhCugHG6mGzVF7DU=", "requires": { "css-select": "~1.2.0", @@ -358,7 +358,7 @@ }, "css-select": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "requires": { "boolbase": "~1.0.0", @@ -715,7 +715,7 @@ }, "htmlparser2": { "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", "requires": { "domelementtype": "1", @@ -727,7 +727,7 @@ "dependencies": { "entities": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/entities/-/entities-1.0.0.tgz", "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=" } } @@ -855,7 +855,7 @@ }, "jsdom": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz", + "resolved": "http://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz", "integrity": "sha1-QLQCdwwr2iNGkJa+6Rq2deOx/G4=", "optional": true, "requires": { @@ -1135,7 +1135,7 @@ "dependencies": { "yargs": { "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", "requires": { "camelcase": "^2.0.1", @@ -1151,7 +1151,7 @@ }, "ncp": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz", "integrity": "sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY=" }, "nice-try": { @@ -1251,7 +1251,7 @@ }, "os-locale": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "requires": { "lcid": "^1.0.0" @@ -1389,7 +1389,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "requires": { "core-util-is": "~1.0.0", @@ -1613,7 +1613,7 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "supports-color": { @@ -1765,7 +1765,7 @@ "dependencies": { "async": { "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "resolved": "http://registry.npmjs.org/async/-/async-0.9.2.tgz", "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" } } @@ -1873,7 +1873,7 @@ }, "winston": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.1.1.tgz", + "resolved": "http://registry.npmjs.org/winston/-/winston-2.1.1.tgz", "integrity": "sha1-PJNJ0ZYgf9G9/51LxD73JRDjoS4=", "requires": { "async": "~1.0.0", @@ -1887,12 +1887,12 @@ "dependencies": { "async": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/async/-/async-1.0.0.tgz", "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" }, "colors": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "resolved": "http://registry.npmjs.org/colors/-/colors-1.0.3.tgz", "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" }, "pkginfo": { @@ -1909,7 +1909,7 @@ }, "wrap-ansi": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "requires": { "string-width": "^1.0.1", diff --git a/package.json b/package.json index d8187565..607dc824 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-leetcode", "displayName": "LeetCode", "description": "Solve LeetCode problems in VS Code", - "version": "0.14.3", + "version": "0.15.0", "author": "Sheng Chen", "publisher": "shengchen", "license": "MIT", @@ -349,7 +349,7 @@ "description" ] }, - "description": "Customize the shorcuts in editor." + "description": "Customize the shorcuts in editors." }, "leetcode.enableSideMode": { "type": "boolean", From 1572c7a34a482326ae22dec87f25edd6840084c3 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Fri, 14 Jun 2019 11:27:59 +0800 Subject: [PATCH 07/92] fix: Cannot show description page (#345) --- src/commands/show.ts | 11 ++++------- src/webview/leetCodePreviewProvider.ts | 16 +++++++++------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/commands/show.ts b/src/commands/show.ts index f3bd0750..7dceffed 100644 --- a/src/commands/show.ts +++ b/src/commands/show.ts @@ -20,17 +20,15 @@ import { leetCodeSolutionProvider } from "../webview/leetCodeSolutionProvider"; import * as list from "./list"; export async function previewProblem(input: IProblem | vscode.Uri, isSideMode: boolean = false): Promise<void> { - let node: LeetCodeNode; - if (input instanceof LeetCodeNode) { - node = input; - } else if (input instanceof vscode.Uri) { + let node: IProblem; + if (input instanceof vscode.Uri) { const activeFilePath: string = input.fsPath; const id: string = await getNodeIdFromFile(activeFilePath); if (!id) { vscode.window.showErrorMessage(`Failed to resolve the problem id from file: ${activeFilePath}.`); return; } - const cachedNode: LeetCodeNode | undefined = explorerNodeManager.getNodeById(id); + const cachedNode: IProblem | undefined = explorerNodeManager.getNodeById(id); if (!cachedNode) { vscode.window.showErrorMessage(`Failed to resolve the problem with id: ${id}.`); return; @@ -39,8 +37,7 @@ export async function previewProblem(input: IProblem | vscode.Uri, isSideMode: b // Move the preview page aside if it's triggered from Code Lens isSideMode = true; } else { - vscode.window.showErrorMessage("Invalid input to fetch the preview data."); - return; + node = input; } const descString: string = await leetCodeExecutor.getDescription(node.id); diff --git a/src/webview/leetCodePreviewProvider.ts b/src/webview/leetCodePreviewProvider.ts index 8d186b29..a019db95 100644 --- a/src/webview/leetCodePreviewProvider.ts +++ b/src/webview/leetCodePreviewProvider.ts @@ -22,9 +22,11 @@ class LeetCodePreviewProvider extends LeetCodeWebview { this.node = node; this.sideMode = isSideMode; this.showWebviewInternal(); - if (this.sideMode) { - this.hideSideBar(); // For better view area - } + // Comment out this operation since it sometimes may cause the webview become empty. + // Waiting for the progress of the VS Code side issue: https://github.com/microsoft/vscode/issues/3742 + // if (this.sideMode) { + // this.hideSideBar(); // For better view area + // } } protected getWebviewOption(): ILeetCodeWebviewOption { @@ -134,10 +136,10 @@ class LeetCodePreviewProvider extends LeetCodeWebview { } } - private async hideSideBar(): Promise<void> { - await commands.executeCommand("workbench.action.focusSideBar"); - await commands.executeCommand("workbench.action.toggleSidebarVisibility"); - } + // private async hideSideBar(): Promise<void> { + // await commands.executeCommand("workbench.action.focusSideBar"); + // await commands.executeCommand("workbench.action.toggleSidebarVisibility"); + // } private parseDescription(descString: string, problem: IProblem): IDescription { const [ From ee972498479cc3031bd5ac1d2c6cb79c3f61a53e Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Mon, 17 Jun 2019 20:31:01 +0800 Subject: [PATCH 08/92] chore: prepare for 0.15.1 (#349) --- CHANGELOG.md | 4 ++++ package-lock.json | 50 +++++++++++++++++++++++------------------------ package.json | 4 ++-- 3 files changed, 31 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e8839e7a..41a9e7a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to the "leetcode" extension will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +## [0.15.1] +### Fixed +[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.1+is%3Aclosed+label%3Abug) + ## [0.15.0] ### Added - Auto refresh the explorer after submitting [#91](https://github.com/jdneo/vscode-leetcode/issues/91) diff --git a/package-lock.json b/package-lock.json index f6c87e2d..0dbe10b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "vscode-leetcode", - "version": "0.15.0", + "version": "0.15.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -66,13 +66,13 @@ }, "acorn": { "version": "2.7.0", - "resolved": "http://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", "optional": true }, "acorn-globals": { "version": "1.0.9", - "resolved": "http://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", "optional": true, "requires": { @@ -135,7 +135,7 @@ }, "async": { "version": "1.5.2", - "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" }, "asynckit": { @@ -258,7 +258,7 @@ }, "cheerio": { "version": "0.20.0", - "resolved": "http://registry.npmjs.org/cheerio/-/cheerio-0.20.0.tgz", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.20.0.tgz", "integrity": "sha1-XHEPK6uVZTJyhCugHG6mGzVF7DU=", "requires": { "css-select": "~1.2.0", @@ -358,7 +358,7 @@ }, "css-select": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "requires": { "boolbase": "~1.0.0", @@ -715,7 +715,7 @@ }, "htmlparser2": { "version": "3.8.3", - "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", "requires": { "domelementtype": "1", @@ -727,7 +727,7 @@ "dependencies": { "entities": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=" } } @@ -855,7 +855,7 @@ }, "jsdom": { "version": "7.2.2", - "resolved": "http://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz", "integrity": "sha1-QLQCdwwr2iNGkJa+6Rq2deOx/G4=", "optional": true, "requires": { @@ -1135,7 +1135,7 @@ "dependencies": { "yargs": { "version": "3.32.0", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", "requires": { "camelcase": "^2.0.1", @@ -1151,7 +1151,7 @@ }, "ncp": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz", "integrity": "sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY=" }, "nice-try": { @@ -1251,7 +1251,7 @@ }, "os-locale": { "version": "1.4.0", - "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "requires": { "lcid": "^1.0.0" @@ -1389,7 +1389,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "requires": { "core-util-is": "~1.0.0", @@ -1613,7 +1613,7 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "supports-color": { @@ -1625,9 +1625,9 @@ } }, "symbol-tree": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", - "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "optional": true }, "tough-cookie": { @@ -1765,7 +1765,7 @@ "dependencies": { "async": { "version": "0.9.2", - "resolved": "http://registry.npmjs.org/async/-/async-0.9.2.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" } } @@ -1786,9 +1786,9 @@ } }, "vsc-leetcode-cli": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.6.tgz", - "integrity": "sha512-BWwwQu77RaKUqroRntGvoNzPRPAeZXnvDO5OGKM4lDPQyZmlb7auvYW0MSJe027WtYRudNOLVZpoirokA3QfcA==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.7.tgz", + "integrity": "sha512-OBTF0XV9drJEdGCOysx/nCmmzgqBOnn6baH9On6ZbTNr9chl3reuC7OfKHNts/DzEW71wStT7Xg2N2WJSMsojw==", "requires": { "ansi-styles": "3.2.1", "cheerio": "0.20.0", @@ -1873,7 +1873,7 @@ }, "winston": { "version": "2.1.1", - "resolved": "http://registry.npmjs.org/winston/-/winston-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.1.1.tgz", "integrity": "sha1-PJNJ0ZYgf9G9/51LxD73JRDjoS4=", "requires": { "async": "~1.0.0", @@ -1887,12 +1887,12 @@ "dependencies": { "async": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/async/-/async-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" }, "colors": { "version": "1.0.3", - "resolved": "http://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" }, "pkginfo": { @@ -1909,7 +1909,7 @@ }, "wrap-ansi": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "requires": { "string-width": "^1.0.1", diff --git a/package.json b/package.json index 607dc824..d0f5360e 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-leetcode", "displayName": "LeetCode", "description": "Solve LeetCode problems in VS Code", - "version": "0.15.0", + "version": "0.15.1", "author": "Sheng Chen", "publisher": "shengchen", "license": "MIT", @@ -394,6 +394,6 @@ "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", "unescape-js": "^1.1.1", - "vsc-leetcode-cli": "2.6.6" + "vsc-leetcode-cli": "2.6.7" } } From 19af64fec1693e88c8b94335cd968892672a12fa Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Thu, 20 Jun 2019 12:58:20 +0800 Subject: [PATCH 09/92] docs: Update documents (#351) --- README.md | 2 +- docs/README_zh-CN.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5fcf3138..8943f671 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,7 @@ | `leetcode.outputFolder` | Specify the relative path to save the problem files. Besides using customized path, there are also several reserved words which can be used here: <ul><li>`${tag}`: Categorize the problem according to their tags.<li>`${language}`: Categorize the problem according to their language.</li><li>`${difficulty}`: Categorize the problem according to their difficulty.</li></ul>For example: `problem-${tag}-${difficulty}` | N/A | | `leetcode.enableStatusBar` | Specify whether the LeetCode status bar will be shown or not. | `true` | | **(Deprecated)** `leetcode.enableShortcuts` | Specify whether the submit and test shortcuts in editor or not. | `true` | -| `leetcode.editor.shortcuts` | Specify the customized shorcuts in editors | `["submit, test"]` | +| `leetcode.editor.shortcuts` | Specify the customized shorcuts in editors. Supported values are: `submit`, `test`, `solution` and `description`. | `["submit, test"]` | | `leetcode.enableSideMode` | Specify whether `preview`, `solution` and `submission` tab should be grouped into the second editor column when solving a problem. | `true` | | `leetcode.nodePath` | Specify the `Node.js` executable path. | `node` | diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index 0bd9d54d..d1a06b16 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -124,7 +124,7 @@ | `leetcode.outputFolder` | 指定保存文件时所用的相对文件夹路径。除了用户自定义路径外,也可以使用保留项,包括:<ul><li>`${tag}`: 根据题目的类别进行分类。<li>`${language}`: 根据题目的语言进行分类。</li><li>`${difficulty}`: 根据题目的难度进行分类。</li></ul>例如:`problem-${tag}-${difficulty}` | N/A | | `leetcode.enableStatusBar` | 指定是否在 VS Code 下方显示插件状态栏。 | `true` | | **(Deprecated)** `leetcode.enableShortcuts` | 指定是否在 VS Code 编辑文件下方显示提交和测试的快捷按钮。 | `true` | -| `leetcode.editor.shortcuts` | 指定在编辑器内所自定义的快捷方式。 | `["submit, test"]` | +| `leetcode.editor.shortcuts` | 指定在编辑器内所自定义的快捷方式。可用的快捷方式有: `submit`, `test`, `solution`, `description`。 | `["submit, test"]` | | `leetcode.enableSideMode` | 指定在解决一道题时,是否将`问题预览`、`高票答案`与`提交结果`窗口集中在编辑器的第二栏。 | `true` | | `leetcode.nodePath` | 指定 `Node.js` 可执行文件的路径。 | `node` | From 1004e1df2573a8665a6060f6bd68cae852cfa80b Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Fri, 28 Jun 2019 13:07:47 +0800 Subject: [PATCH 10/92] feat: Support delete a session (#358) --- README.md | 2 +- docs/README_zh-CN.md | 2 +- package-lock.json | 6 +- package.json | 14 ++-- src/commands/session.ts | 91 +++++++++++++++++++++----- src/extension.ts | 3 +- src/leetCodeExecutor.ts | 8 ++- src/statusbar/LeetCodeStatusBarItem.ts | 2 +- 8 files changed, 91 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index 8943f671..cc0bffea 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/session.png" alt="Manage Session" /> </p> -- To manage your LeetCode sessions, just clicking the `LeetCode: ***` at the bottom of the status bar. You can **switch** between sessions or **create** a new session. +- To manage your LeetCode sessions, just clicking the `LeetCode: ***` at the bottom of the status bar. You can **switch** between sessions or **create**, **delete** a session. ## Settings diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index d1a06b16..0a3e23e5 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -110,7 +110,7 @@ <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/session.png" alt="管理存档" /> </p> -- 点击位于 VS Code 底部状态栏的 `LeetCode: ***` 管理 `LeetCode 存档`。你可以**切换**存档或者**创建**新的存档。 +- 点击位于 VS Code 底部状态栏的 `LeetCode: ***` 管理 `LeetCode 存档`。你可以**切换**存档或者**创建**,**删除**存档。 ## 插件配置项 diff --git a/package-lock.json b/package-lock.json index 0dbe10b8..46afe0b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1786,9 +1786,9 @@ } }, "vsc-leetcode-cli": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.7.tgz", - "integrity": "sha512-OBTF0XV9drJEdGCOysx/nCmmzgqBOnn6baH9On6ZbTNr9chl3reuC7OfKHNts/DzEW71wStT7Xg2N2WJSMsojw==", + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.8.tgz", + "integrity": "sha512-Zo1GBWgr7orJawlTUmXMUCGpPJ8RThoHMh9vABiPJO3n+uhPgLNGkuETIKk7u+I1dD7FHk+G/IxfD5siR49z2A==", "requires": { "ansi-styles": "3.2.1", "cheerio": "0.20.0", diff --git a/package.json b/package.json index d0f5360e..0ba3e9aa 100644 --- a/package.json +++ b/package.json @@ -29,8 +29,7 @@ "onCommand:leetcode.toggleLeetCodeCn", "onCommand:leetcode.signin", "onCommand:leetcode.signout", - "onCommand:leetcode.selectSessions", - "onCommand:leetcode.createSession", + "onCommand:leetcode.manageSessions", "onCommand:leetcode.refreshExplorer", "onCommand:leetcode.showProblem", "onCommand:leetcode.previewProblem", @@ -72,13 +71,8 @@ "category": "LeetCode" }, { - "command": "leetcode.selectSessions", - "title": "Select Session", - "category": "LeetCode" - }, - { - "command": "leetcode.createSession", - "title": "Create New Session", + "command": "leetcode.manageSessions", + "title": "Manage Sessions", "category": "LeetCode" }, { @@ -394,6 +388,6 @@ "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", "unescape-js": "^1.1.1", - "vsc-leetcode-cli": "2.6.7" + "vsc-leetcode-cli": "2.6.8" } } diff --git a/src/commands/session.ts b/src/commands/session.ts index 5cf37724..f86d4cf3 100644 --- a/src/commands/session.ts +++ b/src/commands/session.ts @@ -5,7 +5,7 @@ import * as vscode from "vscode"; import { leetCodeExecutor } from "../leetCodeExecutor"; import { leetCodeManager } from "../leetCodeManager"; import { IQuickItemEx } from "../shared"; -import { DialogType, promptForOpenOutputChannel, promptForSignIn } from "../utils/uiUtils"; +import { DialogOptions, DialogType, promptForOpenOutputChannel, promptForSignIn } from "../utils/uiUtils"; export async function getSessionList(): Promise<ISession[]> { const signInStatus: string | undefined = leetCodeManager.getUser(); @@ -32,17 +32,21 @@ export async function getSessionList(): Promise<ISession[]> { return sessions; } -export async function selectSession(): Promise<void> { - const choice: IQuickItemEx<string> | undefined = await vscode.window.showQuickPick(parseSessionsToPicks()); +export async function manageSessions(): Promise<void> { + const choice: IQuickItemEx<ISession | string> | undefined = await vscode.window.showQuickPick(parseSessionsToPicks(true /* includeOperation */)); if (!choice || choice.description === "Active") { return; } - if (choice.value === ":createNewSession") { - await vscode.commands.executeCommand("leetcode.createSession"); + if (choice.value === ":createSession") { + await createSession(); + return; + } + if (choice.value === ":deleteSession") { + await deleteSession(); return; } try { - await leetCodeExecutor.enableSession(choice.value); + await leetCodeExecutor.enableSession((choice.value as ISession).id); vscode.window.showInformationMessage(`Successfully switched to session '${choice.label}'.`); await vscode.commands.executeCommand("leetcode.refreshExplorer"); } catch (error) { @@ -50,22 +54,20 @@ export async function selectSession(): Promise<void> { } } -async function parseSessionsToPicks(): Promise<Array<IQuickItemEx<string>>> { - return new Promise(async (resolve: (res: Array<IQuickItemEx<string>>) => void): Promise<void> => { +async function parseSessionsToPicks(includeOperations: boolean = false): Promise<Array<IQuickItemEx<ISession | string>>> { + return new Promise(async (resolve: (res: Array<IQuickItemEx<ISession | string>>) => void): Promise<void> => { try { const sessions: ISession[] = await getSessionList(); - const picks: Array<IQuickItemEx<string>> = sessions.map((s: ISession) => Object.assign({}, { + const picks: Array<IQuickItemEx<ISession | string>> = sessions.map((s: ISession) => Object.assign({}, { label: `${s.active ? "$(check) " : ""}${s.name}`, description: s.active ? "Active" : "", detail: `AC Questions: ${s.acQuestions}, AC Submits: ${s.acSubmits}`, - value: s.id, + value: s, })); - picks.push({ - label: "$(plus) Create a new session", - description: "", - detail: "Click this item to create a new session", - value: ":createNewSession", - }); + + if (includeOperations) { + picks.push(...parseSessionManagementOperations()); + } resolve(picks); } catch (error) { return await promptForOpenOutputChannel("Failed to list sessions. Please open the output channel for details.", DialogType.error); @@ -73,7 +75,21 @@ async function parseSessionsToPicks(): Promise<Array<IQuickItemEx<string>>> { }); } -export async function createSession(): Promise<void> { +function parseSessionManagementOperations(): Array<IQuickItemEx<string>> { + return [{ + label: "$(plus) Create a session", + description: "", + detail: "Click this item to create a session", + value: ":createSession", + }, { + label: "$(trashcan) Delete a session", + description: "", + detail: "Click this item to DELETE a session", + value: ":deleteSession", + }]; +} + +async function createSession(): Promise<void> { const session: string | undefined = await vscode.window.showInputBox({ prompt: "Enter the new session name.", validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "Session name must not be empty", @@ -89,6 +105,47 @@ export async function createSession(): Promise<void> { } } +async function deleteSession(): Promise<void> { + const choice: IQuickItemEx<ISession | string> | undefined = await vscode.window.showQuickPick( + parseSessionsToPicks(false /* includeOperation */), + { placeHolder: "Please select the session you want to delete" }, + ); + if (!choice) { + return; + } + + const selectedSession: ISession = choice.value as ISession; + if (selectedSession.active) { + vscode.window.showInformationMessage("Cannot delete an active session."); + return; + } + + const action: vscode.MessageItem | undefined = await vscode.window.showWarningMessage( + `This operation cannot be reverted. Are you sure to delete the session: ${selectedSession.name}?`, + DialogOptions.yes, + DialogOptions.no, + ); + if (action !== DialogOptions.yes) { + return; + } + + const confirm: string | undefined = await vscode.window.showInputBox({ + prompt: "Enter 'yes' to confirm deleting the session", + validateInput: (value: string): string => { + if (value === "yes") { + return ""; + } else { + return "Enter 'yes' to confirm"; + } + }, + }); + + if (confirm === "yes") { + await leetCodeExecutor.deleteSession(selectedSession.id); + vscode.window.showInformationMessage("The session has been successfully deleted."); + } +} + export interface ISession { active: boolean; id: string; diff --git a/src/extension.ts b/src/extension.ts index a2467c8d..4d33d803 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -51,8 +51,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<void> vscode.commands.registerCommand("leetcode.toggleLeetCodeCn", () => plugin.switchEndpoint()), vscode.commands.registerCommand("leetcode.signin", () => leetCodeManager.signIn()), vscode.commands.registerCommand("leetcode.signout", () => leetCodeManager.signOut()), - vscode.commands.registerCommand("leetcode.selectSessions", () => session.selectSession()), - vscode.commands.registerCommand("leetcode.createSession", () => session.createSession()), + vscode.commands.registerCommand("leetcode.manageSessions", () => session.manageSessions()), vscode.commands.registerCommand("leetcode.previewProblem", (node: LeetCodeNode) => show.previewProblem(node)), vscode.commands.registerCommand("leetcode.showProblem", (node: LeetCodeNode) => show.showProblem(node)), vscode.commands.registerCommand("leetcode.searchProblem", () => show.searchProblem()), diff --git a/src/leetCodeExecutor.ts b/src/leetCodeExecutor.ts index ad2d0514..c3ef495c 100644 --- a/src/leetCodeExecutor.ts +++ b/src/leetCodeExecutor.ts @@ -124,8 +124,12 @@ class LeetCodeExecutor implements Disposable { return await this.executeCommandEx(this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "session", "-e", name]); } - public async createSession(name: string): Promise<string> { - return await this.executeCommandEx(this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "session", "-c", name]); + public async createSession(id: string): Promise<string> { + return await this.executeCommandEx(this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "session", "-c", id]); + } + + public async deleteSession(id: string): Promise<string> { + return await this.executeCommandEx(this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "session", "-d", id]); } public async submitSolution(filePath: string): Promise<string> { diff --git a/src/statusbar/LeetCodeStatusBarItem.ts b/src/statusbar/LeetCodeStatusBarItem.ts index 5ca9bde6..35ca7412 100644 --- a/src/statusbar/LeetCodeStatusBarItem.ts +++ b/src/statusbar/LeetCodeStatusBarItem.ts @@ -9,7 +9,7 @@ export class LeetCodeStatusBarItem implements vscode.Disposable { constructor() { this.statusBarItem = vscode.window.createStatusBarItem(); - this.statusBarItem.command = "leetcode.selectSessions"; + this.statusBarItem.command = "leetcode.manageSessions"; } public updateStatusBar(status: UserStatus, user?: string): void { From 4abd6fcce099d1afc87638719c866ad477bce160 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Fri, 28 Jun 2019 13:29:23 +0800 Subject: [PATCH 11/92] fix: Break new line when the description is too long (#359) --- src/webview/leetCodePreviewProvider.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/webview/leetCodePreviewProvider.ts b/src/webview/leetCodePreviewProvider.ts index a019db95..1bd83e69 100644 --- a/src/webview/leetCodePreviewProvider.ts +++ b/src/webview/leetCodePreviewProvider.ts @@ -103,6 +103,9 @@ class LeetCodePreviewProvider extends LeetCodeWebview { <head> ${markdownEngine.getStyles()} ${!this.sideMode ? button.style : ""} + <style> + code { white-space: pre-wrap; } + </style> </head> <body> ${head} From 453c51a3bf62aacb2354e92fdcccd3c49aeb3550 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Thu, 11 Jul 2019 16:23:40 +0800 Subject: [PATCH 12/92] feat: Can specify the workspace folder to save the files (#360) --- README.md | 3 ++- docs/README_zh-CN.md | 3 ++- package.json | 6 +++++ src/commands/show.ts | 4 +++ src/utils/settingUtils.ts | 6 +++++ src/utils/workspaceUtils.ts | 54 +++++++++++++++++++++++++++++-------- 6 files changed, 63 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index cc0bffea..a46fe59c 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ - Directly click on the problem or right click the problem in the `LeetCode Explorer` and select `Preview Problem` to see the problem description. - Select `Show Problem` to directly open the file with the problem description. - > Note: If no folder is opened in VS Code, the extension will save the problem files in **$HOME/.leetcode/**. + > Note:You can specify the path of the workspace folder to store the problem files by updating the setting `leetcode.workspaceFolder`. The default value is:**$HOME/.leetcode/**. > You can specify whether including the problem description in comments or not by updating the setting `leetcode.showCommentDescription`. @@ -121,6 +121,7 @@ | `leetcode.defaultLanguage` | Specify the default language used to solve the problem. Supported languages are: `bash`, `c`, `cpp`, `csharp`, `golang`, `java`, `javascript`, `kotlin`, `mysql`, `php`, `python`,`python3`,`ruby`,`rust`, `scala`,`swift` | `N/A` | | `leetcode.useWsl` | Specify whether to use WSL or not | `false` | | `leetcode.endpoint` | Specify the active endpoint. Supported endpoints are: `leetcode`, `leetcode-cn` | `leetcode` | +| `leetcode.workspaceFolder` | Specify the path of the workspace folder to store the problem files. | `${home}/.leetcode` | | `leetcode.outputFolder` | Specify the relative path to save the problem files. Besides using customized path, there are also several reserved words which can be used here: <ul><li>`${tag}`: Categorize the problem according to their tags.<li>`${language}`: Categorize the problem according to their language.</li><li>`${difficulty}`: Categorize the problem according to their difficulty.</li></ul>For example: `problem-${tag}-${difficulty}` | N/A | | `leetcode.enableStatusBar` | Specify whether the LeetCode status bar will be shown or not. | `true` | | **(Deprecated)** `leetcode.enableShortcuts` | Specify whether the submit and test shortcuts in editor or not. | `true` | diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index 0a3e23e5..6d90edb6 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -73,7 +73,7 @@ - 直接点击题目或者在 `LeetCode Explorer` 中**右键**题目并选择 `Preview Problem` 可查看题目描述 - 选择 `Show Problem` 可直接进行答题。 - > 注意:若当前 VS Code 没有已打开的文件夹,则生成的题目文件会存储于 **$HOME/.leetcode/** 目录下。 + > 注意:你可以通过更新配置项 `leetcode.workspaceFolder` 来指定保存题目文件所用的工作区路径。默认工作区路径为:**$HOME/.leetcode/**。 > 注意:你可以通过更新配置项 `leetcode.showCommentDescription` 来指定是否要在注释中包含题目描述。 @@ -121,6 +121,7 @@ | `leetcode.defaultLanguage` | 指定答题时使用的默认语言,可选语言有:`bash`, `c`, `cpp`, `csharp`, `golang`, `java`, `javascript`, `kotlin`, `mysql`, `php`, `python`,`python3`,`ruby`, `rust`, `scala`,`swift` | `N/A` | | `leetcode.useWsl` | 指定是否启用 WSL | `false` | | `leetcode.endpoint` | 指定使用的终端,可用终端有:`leetcode`, `leetcode-cn` | `leetcode` | +| `leetcode.workspaceFolder` | 指定保存文件的工作区目录 | `${home}/.leetcode` | | `leetcode.outputFolder` | 指定保存文件时所用的相对文件夹路径。除了用户自定义路径外,也可以使用保留项,包括:<ul><li>`${tag}`: 根据题目的类别进行分类。<li>`${language}`: 根据题目的语言进行分类。</li><li>`${difficulty}`: 根据题目的难度进行分类。</li></ul>例如:`problem-${tag}-${difficulty}` | N/A | | `leetcode.enableStatusBar` | 指定是否在 VS Code 下方显示插件状态栏。 | `true` | | **(Deprecated)** `leetcode.enableShortcuts` | 指定是否在 VS Code 编辑文件下方显示提交和测试的快捷按钮。 | `true` | diff --git a/package.json b/package.json index 0ba3e9aa..5f90e490 100644 --- a/package.json +++ b/package.json @@ -310,6 +310,12 @@ ], "description": "Endpoint of the user account." }, + "leetcode.workspaceFolder": { + "type": "string", + "scope": "application", + "description": "The path of the workspace folder to store the problem files.", + "default": "${home}/.leetcode" + }, "leetcode.outputFolder": { "type": "string", "scope": "application", diff --git a/src/commands/show.ts b/src/commands/show.ts index 7dceffed..896516a9 100644 --- a/src/commands/show.ts +++ b/src/commands/show.ts @@ -128,6 +128,10 @@ async function showProblemInternal(node: IProblem): Promise<void> { const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode"); let outDir: string = await selectWorkspaceFolder(); + if (!outDir) { + return; + } + let relativePath: string = (leetCodeConfig.get<string>("outputFolder", "")).trim(); if (relativePath) { relativePath = await resolveRelativePath(relativePath, node, language); diff --git a/src/utils/settingUtils.ts b/src/utils/settingUtils.ts index 3cc48ea7..b7cb5919 100644 --- a/src/utils/settingUtils.ts +++ b/src/utils/settingUtils.ts @@ -1,6 +1,7 @@ // Copyright (c) jdneo. All rights reserved. // Licensed under the MIT license. +import * as os from "os"; import { workspace, WorkspaceConfiguration } from "vscode"; export function getWorkspaceConfiguration(): WorkspaceConfiguration { @@ -11,6 +12,11 @@ export function shouldHideSolvedProblem(): boolean { return getWorkspaceConfiguration().get<boolean>("hideSolved", false); } +export function getWorkspaceFolder(): string { + const rawWorkspaceFolder: string = getWorkspaceConfiguration().get<string>("workspaceFolder", "${home}/.leetcode"); + return rawWorkspaceFolder.replace(/\${home}/i, os.homedir()); +} + export function getEditorShortcuts(): string[] { return getWorkspaceConfiguration().get<string[]>("editor.shortcuts", ["submit", "test"]); } diff --git a/src/utils/workspaceUtils.ts b/src/utils/workspaceUtils.ts index f2f2d16b..df7df0ad 100644 --- a/src/utils/workspaceUtils.ts +++ b/src/utils/workspaceUtils.ts @@ -1,26 +1,47 @@ // Copyright (c) jdneo. All rights reserved. // Licensed under the MIT license. -import * as os from "os"; import * as path from "path"; import * as vscode from "vscode"; +import { getWorkspaceFolder } from "./settingUtils"; import * as wsl from "./wslUtils"; export async function selectWorkspaceFolder(): Promise<string> { - let folder: vscode.WorkspaceFolder | undefined; - if (vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0) { - if (vscode.workspace.workspaceFolders.length > 1) { - folder = await vscode.window.showWorkspaceFolderPick({ - placeHolder: "Select the working directory you wish to use", - }); - } else { - folder = vscode.workspace.workspaceFolders[0]; + const workspaceFolderSetting: string = getWorkspaceFolder(); + const workspaceFolders: vscode.WorkspaceFolder[] = vscode.workspace.workspaceFolders || []; + let needAsk: boolean = true; + for (const folder of workspaceFolders) { + if (isSubFolder(folder.uri.fsPath, workspaceFolderSetting)) { + needAsk = false; } } - const workFolder: string = folder ? folder.uri.fsPath : path.join(os.homedir(), ".leetcode"); + if (needAsk) { + const choice: string | undefined = await vscode.window.showQuickPick( + [ + OpenOption.openInCurrentWindow, + OpenOption.openInNewWindow, + OpenOption.addToWorkspace, + ], + { placeHolder: "Select how you would like to open your workspace folder" }, + ); - return wsl.useWsl() ? wsl.toWslPath(workFolder) : workFolder; + switch (choice) { + case OpenOption.openInCurrentWindow: + await vscode.commands.executeCommand("vscode.openFolder", vscode.Uri.file(workspaceFolderSetting), false); + return ""; + case OpenOption.openInNewWindow: + await vscode.commands.executeCommand("vscode.openFolder", vscode.Uri.file(workspaceFolderSetting), true); + return ""; + case OpenOption.addToWorkspace: + vscode.workspace.updateWorkspaceFolders(workspaceFolders.length, 0, { uri: vscode.Uri.file(workspaceFolderSetting) }); + break; + default: + return ""; + } + } + + return wsl.useWsl() ? wsl.toWslPath(workspaceFolderSetting) : workspaceFolderSetting; } export async function getActiveFilePath(uri?: vscode.Uri): Promise<string | undefined> { @@ -40,3 +61,14 @@ export async function getActiveFilePath(uri?: vscode.Uri): Promise<string | unde } return wsl.useWsl() ? wsl.toWslPath(textEditor.document.uri.fsPath) : textEditor.document.uri.fsPath; } + +function isSubFolder(from: string, to: string): boolean { + const relative: string = path.relative(from, to); + return !!relative && !relative.startsWith("..") && !path.isAbsolute(relative); +} + +enum OpenOption { + openInCurrentWindow = "Open in current window", + openInNewWindow = "Open in new window", + addToWorkspace = "Add to workspace", +} From 1798edd2d1d9b948be9a04f50a748075e6da5338 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Thu, 11 Jul 2019 17:00:49 +0800 Subject: [PATCH 13/92] fix: Failed to resolve the Node executable path when it contains spaces (#363) --- README.md | 2 +- docs/README_zh-CN.md | 2 +- package.json | 2 +- src/leetCodeExecutor.ts | 2 ++ src/utils/workspaceUtils.ts | 5 ++++- 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a46fe59c..ce36142a 100644 --- a/README.md +++ b/README.md @@ -127,7 +127,7 @@ | **(Deprecated)** `leetcode.enableShortcuts` | Specify whether the submit and test shortcuts in editor or not. | `true` | | `leetcode.editor.shortcuts` | Specify the customized shorcuts in editors. Supported values are: `submit`, `test`, `solution` and `description`. | `["submit, test"]` | | `leetcode.enableSideMode` | Specify whether `preview`, `solution` and `submission` tab should be grouped into the second editor column when solving a problem. | `true` | -| `leetcode.nodePath` | Specify the `Node.js` executable path. | `node` | +| `leetcode.nodePath` | Specify the `Node.js` executable path. for example, C:\Program Files\nodejs\node.exe | `node` | ## Want Help? diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index 6d90edb6..be328359 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -127,7 +127,7 @@ | **(Deprecated)** `leetcode.enableShortcuts` | 指定是否在 VS Code 编辑文件下方显示提交和测试的快捷按钮。 | `true` | | `leetcode.editor.shortcuts` | 指定在编辑器内所自定义的快捷方式。可用的快捷方式有: `submit`, `test`, `solution`, `description`。 | `["submit, test"]` | | `leetcode.enableSideMode` | 指定在解决一道题时,是否将`问题预览`、`高票答案`与`提交结果`窗口集中在编辑器的第二栏。 | `true` | -| `leetcode.nodePath` | 指定 `Node.js` 可执行文件的路径。 | `node` | +| `leetcode.nodePath` | 指定 `Node.js` 可执行文件的路径。如:C:\Program Files\nodejs\node.exe | `node` | ## 需要帮助? 在遇到任何问题时,可以先查看一下[疑难解答](https://github.com/jdneo/vscode-leetcode/wiki/%E7%96%91%E9%9A%BE%E8%A7%A3%E7%AD%94)以及[常见问题](https://github.com/jdneo/vscode-leetcode/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98)寻求帮助。 diff --git a/package.json b/package.json index 5f90e490..5e0005b8 100644 --- a/package.json +++ b/package.json @@ -361,7 +361,7 @@ "type": "string", "default": "node", "scope": "application", - "description": "The Node.js executable path." + "description": "The Node.js executable path. for example, C:\\Program Files\\nodejs\\node.exe" } } } diff --git a/src/leetCodeExecutor.ts b/src/leetCodeExecutor.ts index c3ef495c..8bef00fa 100644 --- a/src/leetCodeExecutor.ts +++ b/src/leetCodeExecutor.ts @@ -49,6 +49,8 @@ class LeetCodeExecutor implements Disposable { if (!await fse.pathExists(this.nodeExecutable)) { throw new Error(`The Node.js executable does not exist on path ${this.nodeExecutable}`); } + // Wrap the executable with "" to avoid space issue in the path. + this.nodeExecutable = `"${this.nodeExecutable}"`; if (useWsl()) { this.nodeExecutable = await toWslPath(this.nodeExecutable); } diff --git a/src/utils/workspaceUtils.ts b/src/utils/workspaceUtils.ts index df7df0ad..b27a3ddf 100644 --- a/src/utils/workspaceUtils.ts +++ b/src/utils/workspaceUtils.ts @@ -64,7 +64,10 @@ export async function getActiveFilePath(uri?: vscode.Uri): Promise<string | unde function isSubFolder(from: string, to: string): boolean { const relative: string = path.relative(from, to); - return !!relative && !relative.startsWith("..") && !path.isAbsolute(relative); + if (relative === "") { + return true; + } + return !relative.startsWith("..") && !path.isAbsolute(relative); } enum OpenOption { From a00dac5d07bdb6369cc3dd64b03e3402f5f36a26 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Thu, 11 Jul 2019 20:21:04 +0800 Subject: [PATCH 14/92] chore: Prepare for 0.15.2 (#364) --- CHANGELOG.md | 8 ++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41a9e7a9..c5e16401 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to the "leetcode" extension will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +##[0.15.2] +### Added +- Prompt to open the workspace for LeetCode [#130](https://github.com/jdneo/vscode-leetcode/issues/130) +- Support deleting sessions [#198](https://github.com/jdneo/vscode-leetcode/issues/130) + +### Fixed +[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.2+is%3Aclosed+label%3Abug) + ## [0.15.1] ### Fixed [Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.1+is%3Aclosed+label%3Abug) diff --git a/package-lock.json b/package-lock.json index 46afe0b2..ed6984a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "vscode-leetcode", - "version": "0.15.1", + "version": "0.15.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 5e0005b8..66450123 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-leetcode", "displayName": "LeetCode", "description": "Solve LeetCode problems in VS Code", - "version": "0.15.1", + "version": "0.15.2", "author": "Sheng Chen", "publisher": "shengchen", "license": "MIT", From e1f3206756c1909c36a3832bec8f010e4e18bf8e Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Fri, 12 Jul 2019 15:16:12 +0800 Subject: [PATCH 15/92] feat: Can select folder to save the LeetCode files (#365) --- README.md | 2 +- docs/README_zh-CN.md | 2 +- package.json | 2 +- src/utils/settingUtils.ts | 4 +-- src/utils/uiUtils.ts | 12 +++++++++ src/utils/workspaceUtils.ts | 50 +++++++++++++++++++++++++++++++++++-- 6 files changed, 64 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index ce36142a..95067331 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,7 @@ | `leetcode.defaultLanguage` | Specify the default language used to solve the problem. Supported languages are: `bash`, `c`, `cpp`, `csharp`, `golang`, `java`, `javascript`, `kotlin`, `mysql`, `php`, `python`,`python3`,`ruby`,`rust`, `scala`,`swift` | `N/A` | | `leetcode.useWsl` | Specify whether to use WSL or not | `false` | | `leetcode.endpoint` | Specify the active endpoint. Supported endpoints are: `leetcode`, `leetcode-cn` | `leetcode` | -| `leetcode.workspaceFolder` | Specify the path of the workspace folder to store the problem files. | `${home}/.leetcode` | +| `leetcode.workspaceFolder` | Specify the path of the workspace folder to store the problem files. | `""` | | `leetcode.outputFolder` | Specify the relative path to save the problem files. Besides using customized path, there are also several reserved words which can be used here: <ul><li>`${tag}`: Categorize the problem according to their tags.<li>`${language}`: Categorize the problem according to their language.</li><li>`${difficulty}`: Categorize the problem according to their difficulty.</li></ul>For example: `problem-${tag}-${difficulty}` | N/A | | `leetcode.enableStatusBar` | Specify whether the LeetCode status bar will be shown or not. | `true` | | **(Deprecated)** `leetcode.enableShortcuts` | Specify whether the submit and test shortcuts in editor or not. | `true` | diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index be328359..c23ea861 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -121,7 +121,7 @@ | `leetcode.defaultLanguage` | 指定答题时使用的默认语言,可选语言有:`bash`, `c`, `cpp`, `csharp`, `golang`, `java`, `javascript`, `kotlin`, `mysql`, `php`, `python`,`python3`,`ruby`, `rust`, `scala`,`swift` | `N/A` | | `leetcode.useWsl` | 指定是否启用 WSL | `false` | | `leetcode.endpoint` | 指定使用的终端,可用终端有:`leetcode`, `leetcode-cn` | `leetcode` | -| `leetcode.workspaceFolder` | 指定保存文件的工作区目录 | `${home}/.leetcode` | +| `leetcode.workspaceFolder` | 指定保存文件的工作区目录 | `""` | | `leetcode.outputFolder` | 指定保存文件时所用的相对文件夹路径。除了用户自定义路径外,也可以使用保留项,包括:<ul><li>`${tag}`: 根据题目的类别进行分类。<li>`${language}`: 根据题目的语言进行分类。</li><li>`${difficulty}`: 根据题目的难度进行分类。</li></ul>例如:`problem-${tag}-${difficulty}` | N/A | | `leetcode.enableStatusBar` | 指定是否在 VS Code 下方显示插件状态栏。 | `true` | | **(Deprecated)** `leetcode.enableShortcuts` | 指定是否在 VS Code 编辑文件下方显示提交和测试的快捷按钮。 | `true` | diff --git a/package.json b/package.json index 66450123..bb04635b 100644 --- a/package.json +++ b/package.json @@ -314,7 +314,7 @@ "type": "string", "scope": "application", "description": "The path of the workspace folder to store the problem files.", - "default": "${home}/.leetcode" + "default": "" }, "leetcode.outputFolder": { "type": "string", diff --git a/src/utils/settingUtils.ts b/src/utils/settingUtils.ts index b7cb5919..388f31b8 100644 --- a/src/utils/settingUtils.ts +++ b/src/utils/settingUtils.ts @@ -1,7 +1,6 @@ // Copyright (c) jdneo. All rights reserved. // Licensed under the MIT license. -import * as os from "os"; import { workspace, WorkspaceConfiguration } from "vscode"; export function getWorkspaceConfiguration(): WorkspaceConfiguration { @@ -13,8 +12,7 @@ export function shouldHideSolvedProblem(): boolean { } export function getWorkspaceFolder(): string { - const rawWorkspaceFolder: string = getWorkspaceConfiguration().get<string>("workspaceFolder", "${home}/.leetcode"); - return rawWorkspaceFolder.replace(/\${home}/i, os.homedir()); + return getWorkspaceConfiguration().get<string>("workspaceFolder", ""); } export function getEditorShortcuts(): string[] { diff --git a/src/utils/uiUtils.ts b/src/utils/uiUtils.ts index 1fec63e3..037b2371 100644 --- a/src/utils/uiUtils.ts +++ b/src/utils/uiUtils.ts @@ -92,6 +92,18 @@ export async function showFileSelectDialog(): Promise<vscode.Uri[] | undefined> return await vscode.window.showOpenDialog(options); } +export async function showDirectorySelectDialog(): Promise<vscode.Uri[] | undefined> { + const defaultUri: vscode.Uri | undefined = vscode.workspace.rootPath ? vscode.Uri.file(vscode.workspace.rootPath) : undefined; + const options: vscode.OpenDialogOptions = { + defaultUri, + canSelectFiles: false, + canSelectFolders: true, + canSelectMany: false, + openLabel: "Select", + }; + return await vscode.window.showOpenDialog(options); +} + export async function openUrl(url: string): Promise<void> { vscode.commands.executeCommand("vscode.open", vscode.Uri.parse(url)); } diff --git a/src/utils/workspaceUtils.ts b/src/utils/workspaceUtils.ts index b27a3ddf..b77fc3c7 100644 --- a/src/utils/workspaceUtils.ts +++ b/src/utils/workspaceUtils.ts @@ -1,13 +1,23 @@ // Copyright (c) jdneo. All rights reserved. // Licensed under the MIT license. +import * as os from "os"; import * as path from "path"; import * as vscode from "vscode"; -import { getWorkspaceFolder } from "./settingUtils"; +import { IQuickItemEx } from "../shared"; +import { getWorkspaceConfiguration, getWorkspaceFolder } from "./settingUtils"; +import { showDirectorySelectDialog } from "./uiUtils"; import * as wsl from "./wslUtils"; export async function selectWorkspaceFolder(): Promise<string> { - const workspaceFolderSetting: string = getWorkspaceFolder(); + let workspaceFolderSetting: string = getWorkspaceFolder(); + if (workspaceFolderSetting.trim() === "") { + workspaceFolderSetting = await determineLeetCodeFolder(); + if (workspaceFolderSetting === "") { + // User cancelled + return workspaceFolderSetting; + } + } const workspaceFolders: vscode.WorkspaceFolder[] = vscode.workspace.workspaceFolders || []; let needAsk: boolean = true; for (const folder of workspaceFolders) { @@ -70,6 +80,42 @@ function isSubFolder(from: string, to: string): boolean { return !relative.startsWith("..") && !path.isAbsolute(relative); } +async function determineLeetCodeFolder(): Promise<string> { + let result: string; + const picks: Array<IQuickItemEx<string>> = []; + picks.push( + { + label: `Default location`, + detail: `${path.join(os.homedir(), ".leetcode")}`, + value: `${path.join(os.homedir(), ".leetcode")}`, + }, + { + label: "$(file-directory) Browse...", + value: ":browse", + }, + ); + const choice: IQuickItemEx<string> | undefined = await vscode.window.showQuickPick( + picks, + { placeHolder: "Select where you would like to save your LeetCode files" }, + ); + if (!choice) { + result = ""; + } else if (choice.value === ":browse") { + const directory: vscode.Uri[] | undefined = await showDirectorySelectDialog(); + if (!directory || directory.length < 1) { + result = ""; + } else { + result = directory[0].fsPath; + } + } else { + result = choice.value; + } + + getWorkspaceConfiguration().update("workspaceFolder", result, vscode.ConfigurationTarget.Global); + + return result; +} + enum OpenOption { openInCurrentWindow = "Open in current window", openInNewWindow = "Open in new window", From 9b7847588ed84153af23f0c957acb5ade2b76d5a Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Fri, 12 Jul 2019 15:43:13 +0800 Subject: [PATCH 16/92] chore: Fix the changelog format --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c5e16401..2dd16029 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to the "leetcode" extension will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. -##[0.15.2] +## [0.15.2] ### Added - Prompt to open the workspace for LeetCode [#130](https://github.com/jdneo/vscode-leetcode/issues/130) - Support deleting sessions [#198](https://github.com/jdneo/vscode-leetcode/issues/130) From 07ac6fb6b0a6527a4a0ccea02be3625781b89e96 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2019 14:22:38 +0800 Subject: [PATCH 17/92] chore(deps): bump lodash from 4.17.11 to 4.17.13 (#366) Bumps [lodash](https://github.com/lodash/lodash) from 4.17.11 to 4.17.13. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.11...4.17.13) Signed-off-by: dependabot[bot] <support@github.com> --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index ed6984a3..a01167a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -946,9 +946,9 @@ } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.13.tgz", + "integrity": "sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA==" }, "log-symbols": { "version": "2.2.0", diff --git a/package.json b/package.json index bb04635b..722a0916 100644 --- a/package.json +++ b/package.json @@ -390,7 +390,7 @@ "dependencies": { "fs-extra": "^6.0.1", "highlight.js": "^9.15.6", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", "unescape-js": "^1.1.1", From 6e37a825f4aef1c88d66f4ebdc346f13d49bb74d Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sat, 17 Aug 2019 14:20:33 +0800 Subject: [PATCH 18/92] docs: Update readme page --- README.md | 6 +----- docs/README_zh-CN.md | 6 +----- docs/imgs/sponsor_coding.png | Bin 138165 -> 0 bytes 3 files changed, 2 insertions(+), 10 deletions(-) delete mode 100644 docs/imgs/sponsor_coding.png diff --git a/README.md b/README.md index 95067331..a1d6e64d 100644 --- a/README.md +++ b/README.md @@ -20,11 +20,7 @@ </a> </p> -## Sponsor -[](https://coding.net/?utm_source=leetcode) - -- [English Document](#Requirements) -- [中文文档](https://github.com/jdneo/vscode-leetcode/blob/master/docs/README_zh-CN.md) +- English Document | [中文文档](https://github.com/jdneo/vscode-leetcode/blob/master/docs/README_zh-CN.md) ## Requirements - [VS Code 1.30.1+](https://code.visualstudio.com/) diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index c23ea861..619863bd 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -20,11 +20,7 @@ </a> </p> -## 赞助 -[](https://coding.net/?utm_source=leetcode) - -- [English Document](#Requirements) -- [中文文档](https://github.com/jdneo/vscode-leetcode/blob/master/docs/README_zh-CN.md) +- [English Document](https://github.com/jdneo/vscode-leetcode#requirements) | 中文文档 ## 运行条件 - [VS Code 1.23.0+](https://code.visualstudio.com/) diff --git a/docs/imgs/sponsor_coding.png b/docs/imgs/sponsor_coding.png deleted file mode 100644 index 78c47fc0e224c50fcd6b10ece915e10ae36dc1c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138165 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 From 085b91f8561e3041aeb9643d77a570a44ea63d71 Mon Sep 17 00:00:00 2001 From: PoppinL <poppinlp@gmail.com> Date: Tue, 27 Aug 2019 11:15:48 +0800 Subject: [PATCH 19/92] chore: replace sidebar icon (#400) --- resources/LeetCode.svg | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/resources/LeetCode.svg b/resources/LeetCode.svg index c06fe89d..a3bac1f0 100644 --- a/resources/LeetCode.svg +++ b/resources/LeetCode.svg @@ -1,16 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> -<svg width="36px" height="36px" viewBox="0 0 36 36" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <!-- Generator: Sketch 52.2 (67145) - http://www.bohemiancoding.com/sketch --> - <title>LeetCode_36</title> +<svg width="15px" height="16px" viewBox="0 0 15 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 57 (83077) - https://sketch.com --> + <title>Combined Shape</title> <desc>Created with Sketch.</desc> - <g id="LeetCode_36" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> - <g id="Group-2" transform="translate(3.000000, 1.000000)"> - <rect id="Rectangle" fill="#B4B2B1" x="14.2222222" y="17.4222222" width="15.5555556" height="3.73333333"></rect> - <g id="Group-7" transform="translate(17.310596, 17.025282) rotate(45.000000) translate(-17.310596, -17.025282) translate(7.310596, 3.025282)"> - <polygon id="Rectangle" fill="#000000" points="0 -2.84217094e-14 3.73333333 3.73333333 3.73333333 27.0666667 0 27.0666667"></polygon> - <path d="M14.739248,7.62222222 L11.0059147,11.3555556 L3.73333333,11.3555556 L3.73333333,7.62222222 L14.739248,7.62222222 Z M19.9111111,12.1298653 L19.9111111,27.0666667 L16.1777778,27.0666667 L16.1777778,15.8631986 L19.9111111,12.1298653 Z" id="Combined-Shape" fill="#EDA433"></path> - <rect id="Rectangle" fill="#000000" x="3.73333333" y="23.3333333" width="12.4444444" height="3.73333333"></rect> - </g> + <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="Artboard" transform="translate(-439.000000, -612.000000)" fill="#303133" fill-rule="nonzero"> + <path d="M448.617144,612.16769 C448.808341,612.363282 448.826418,612.663731 448.673533,612.879152 L448.608191,612.955578 L446.15,615.357 L449.894886,619.007259 C450.093972,619.194817 450.124399,619.494266 449.98051,619.715797 L449.918369,619.794848 C449.707367,620.01882 449.354751,620.029333 449.13078,619.818331 L449.13078,619.818331 L445.354,616.136 L440.170212,621.203943 C440.111737,621.261104 440.099007,621.347469 440.132652,621.417331 L440.166592,621.46592 L445.358074,626.829135 C445.415144,626.888093 445.501806,626.90111 445.571922,626.867432 L445.620685,626.833408 L445.623532,626.830592 L449.13805,623.278672 C449.354479,623.05994 449.707246,623.058073 449.925978,623.274502 C450.120407,623.466883 450.143485,623.766988 449.994209,623.984926 L449.930149,624.06243 L446.415631,627.61435 L446.395701,627.634062 C445.914207,628.100138 445.16516,628.119545 444.661422,627.700626 L444.55742,627.604151 L439.365938,622.240936 C438.901478,621.761111 438.880378,621.015175 439.29562,620.511206 L439.391276,620.407102 L447.829256,612.158737 C448.049297,611.94364 448.402047,611.947648 448.617144,612.16769 Z M446.514534,621 L453.485466,621 C453.769635,621 454,621.223858 454,621.5 C454,621.74546 453.817984,621.949608 453.577954,621.991944 L453.485466,622 L446.514534,622 C446.230365,622 446,621.776142 446,621.5 C446,621.25454 446.182016,621.050392 446.422046,621.008056 L446.514534,621 L453.485466,621 Z" id="Combined-Shape"></path> </g> </g> </svg> \ No newline at end of file From b96e7f5feff8352699c918f98d735342d4a4d4ce Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Tue, 27 Aug 2019 12:14:53 +0800 Subject: [PATCH 20/92] fix: Can trigger showTopVotedSolution from keyboard shortcut (#399) --- src/commands/show.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/commands/show.ts b/src/commands/show.ts index 896516a9..1846fe9f 100644 --- a/src/commands/show.ts +++ b/src/commands/show.ts @@ -13,7 +13,7 @@ import { leetCodeManager } from "../leetCodeManager"; import { IProblem, IQuickItemEx, languages, ProblemState } from "../shared"; import { getNodeIdFromFile } from "../utils/problemUtils"; import { DialogOptions, DialogType, openSettingsEditor, promptForOpenOutputChannel, promptForSignIn, promptHintMessage } from "../utils/uiUtils"; -import { selectWorkspaceFolder } from "../utils/workspaceUtils"; +import { getActiveFilePath, selectWorkspaceFolder } from "../utils/workspaceUtils"; import * as wsl from "../utils/wslUtils"; import { leetCodePreviewProvider } from "../webview/leetCodePreviewProvider"; import { leetCodeSolutionProvider } from "../webview/leetCodeSolutionProvider"; @@ -71,11 +71,15 @@ export async function searchProblem(): Promise<void> { export async function showSolution(input: LeetCodeNode | vscode.Uri): Promise<void> { let problemInput: string | undefined; - if (input instanceof LeetCodeNode) { + if (input instanceof LeetCodeNode) { // Triggerred from explorer problemInput = input.id; - } else if (input instanceof vscode.Uri) { + } else if (input instanceof vscode.Uri) { // Triggerred from Code Lens/context menu problemInput = `"${input.fsPath}"`; - } else { + } else if (!input) { // Triggerred from command + problemInput = await getActiveFilePath(); + } + + if (!problemInput) { vscode.window.showErrorMessage("Invalid input to fetch the solution data."); return; } From 24f636d89bb7dea356fda237a164d93769bbd12b Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Tue, 27 Aug 2019 18:44:56 +0800 Subject: [PATCH 21/92] fix: Add CSP in the web view header (#394) --- src/webview/leetCodePreviewProvider.ts | 1 + src/webview/leetCodeSolutionProvider.ts | 1 + src/webview/leetCodeSubmissionProvider.ts | 1 + 3 files changed, 3 insertions(+) diff --git a/src/webview/leetCodePreviewProvider.ts b/src/webview/leetCodePreviewProvider.ts index 1bd83e69..03a12e19 100644 --- a/src/webview/leetCodePreviewProvider.ts +++ b/src/webview/leetCodePreviewProvider.ts @@ -101,6 +101,7 @@ class LeetCodePreviewProvider extends LeetCodeWebview { <!DOCTYPE html> <html> <head> + <meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src https:; script-src vscode-resource: 'unsafe-inline'; style-src vscode-resource: 'unsafe-inline';"/> ${markdownEngine.getStyles()} ${!this.sideMode ? button.style : ""} <style> diff --git a/src/webview/leetCodeSolutionProvider.ts b/src/webview/leetCodeSolutionProvider.ts index 59c548d6..d888b3bd 100644 --- a/src/webview/leetCodeSolutionProvider.ts +++ b/src/webview/leetCodeSolutionProvider.ts @@ -50,6 +50,7 @@ class LeetCodeSolutionProvider extends LeetCodeWebview { <!DOCTYPE html> <html> <head> + <meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src https:; script-src vscode-resource:; style-src vscode-resource:;"/> ${styles} </head> <body class="vscode-body 'scrollBeyondLastLine' 'wordWrap' 'showEditorSelection'" style="tab-size:4"> diff --git a/src/webview/leetCodeSubmissionProvider.ts b/src/webview/leetCodeSubmissionProvider.ts index 689c3a2f..f717a38a 100644 --- a/src/webview/leetCodeSubmissionProvider.ts +++ b/src/webview/leetCodeSubmissionProvider.ts @@ -28,6 +28,7 @@ class LeetCodeSubmissionProvider extends LeetCodeWebview { return `<!DOCTYPE html> <html lang="en"> <head> + <meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src https:; script-src vscode-resource:; style-src vscode-resource:;"/> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> ${markdownEngine.getStyles()} From 6ae22842548389f276fc3b23279056780739dc27 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sun, 1 Sep 2019 18:08:20 +0800 Subject: [PATCH 22/92] feat: Support pick one (#404) --- package.json | 11 +++++++++++ src/commands/show.ts | 6 ++++++ src/extension.ts | 3 ++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 722a0916..fb8ff548 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "onCommand:leetcode.signout", "onCommand:leetcode.manageSessions", "onCommand:leetcode.refreshExplorer", + "onCommand:leetcode.pickOne", "onCommand:leetcode.showProblem", "onCommand:leetcode.previewProblem", "onCommand:leetcode.searchProblem", @@ -84,6 +85,11 @@ "dark": "resources/dark/refresh.svg" } }, + { + "command": "leetcode.pickOne", + "title": "Pick One", + "category": "LeetCode" + }, { "command": "leetcode.showProblem", "title": "Show Problem", @@ -162,6 +168,11 @@ "command": "leetcode.refreshExplorer", "when": "view == leetCodeExplorer", "group": "navigation@3" + }, + { + "command": "leetcode.pickOne", + "when": "view == leetCodeExplorer", + "group": "overflow@0" } ], "view/item/context": [ diff --git a/src/commands/show.ts b/src/commands/show.ts index 1846fe9f..b946c298 100644 --- a/src/commands/show.ts +++ b/src/commands/show.ts @@ -44,6 +44,12 @@ export async function previewProblem(input: IProblem | vscode.Uri, isSideMode: b leetCodePreviewProvider.show(descString, node, isSideMode); } +export async function pickOne(): Promise<void> { + const problems: IProblem[] = await list.listProblems(); + const randomProblem: IProblem = problems[Math.floor(Math.random() * problems.length)]; + await showProblemInternal(randomProblem); +} + export async function showProblem(node?: LeetCodeNode): Promise<void> { if (!node) { return; diff --git a/src/extension.ts b/src/extension.ts index 4d33d803..d1997945 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -54,6 +54,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<void> vscode.commands.registerCommand("leetcode.manageSessions", () => session.manageSessions()), vscode.commands.registerCommand("leetcode.previewProblem", (node: LeetCodeNode) => show.previewProblem(node)), vscode.commands.registerCommand("leetcode.showProblem", (node: LeetCodeNode) => show.showProblem(node)), + vscode.commands.registerCommand("leetcode.pickOne", () => show.pickOne()), vscode.commands.registerCommand("leetcode.searchProblem", () => show.searchProblem()), vscode.commands.registerCommand("leetcode.showSolution", (input: LeetCodeNode | vscode.Uri) => show.showSolution(input)), vscode.commands.registerCommand("leetcode.refreshExplorer", () => leetCodeTreeDataProvider.refresh()), @@ -63,7 +64,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<void> ); await leetCodeExecutor.switchEndpoint(plugin.getLeetCodeEndpoint()); - leetCodeManager.getLoginStatus(); + await leetCodeManager.getLoginStatus(); } catch (error) { leetCodeChannel.appendLine(error.toString()); promptForOpenOutputChannel("Extension initialization failed. Please open output channel for details.", DialogType.error); From 71d9ec9e30f21552358a1c414ac27a98601069b8 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Tue, 3 Sep 2019 12:59:26 +0800 Subject: [PATCH 23/92] feat: Support toggle favorite problem (#405) --- package.json | 42 +++++++++++++++++++++-- resources/dark/dislike.png | Bin 0 -> 700 bytes resources/dark/like.png | Bin 0 -> 472 bytes resources/light/dislike.png | Bin 0 -> 599 bytes resources/light/like.png | Bin 0 -> 418 bytes src/commands/star.ts | 26 ++++++++++++++ src/explorer/LeetCodeTreeDataProvider.ts | 9 ++++- src/extension.ts | 3 ++ src/leetCodeExecutor.ts | 8 +++++ 9 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 resources/dark/dislike.png create mode 100644 resources/dark/like.png create mode 100644 resources/light/dislike.png create mode 100644 resources/light/like.png create mode 100644 src/commands/star.ts diff --git a/package.json b/package.json index fb8ff548..1e6ce79a 100644 --- a/package.json +++ b/package.json @@ -124,6 +124,24 @@ "title": "Submit to LeetCode", "category": "LeetCode" }, + { + "command": "leetcode.addFavorite", + "title": "Add to Favorite List", + "category": "LeetCode", + "icon": { + "light": "resources/light/like.png", + "dark": "resources/dark/like.png" + } + }, + { + "command": "leetcode.removeFavorite", + "title": "Remove from Favorite List", + "category": "LeetCode", + "icon": { + "light": "resources/light/dislike.png", + "dark": "resources/dark/dislike.png" + } + }, { "command": "leetcode.switchDefaultLanguage", "title": "Switch Default Language", @@ -178,18 +196,28 @@ "view/item/context": [ { "command": "leetcode.previewProblem", - "when": "view == leetCodeExplorer && viewItem == problem", + "when": "view == leetCodeExplorer && viewItem =~ /problem*/", "group": "leetcode@1" }, { "command": "leetcode.showProblem", - "when": "view == leetCodeExplorer && viewItem == problem", + "when": "view == leetCodeExplorer && viewItem =~ /problem*/", "group": "leetcode@2" }, { "command": "leetcode.showSolution", - "when": "view == leetCodeExplorer && viewItem == problem", + "when": "view == leetCodeExplorer && viewItem =~ /problem*/", "group": "leetcode@3" + }, + { + "command": "leetcode.addFavorite", + "when": "view == leetCodeExplorer && viewItem == problem", + "group": "inline" + }, + { + "command": "leetcode.removeFavorite", + "when": "view == leetCodeExplorer && viewItem == problem-favorite", + "group": "inline" } ], "commandPalette": [ @@ -204,6 +232,14 @@ { "command": "leetcode.previewProblem", "when": "never" + }, + { + "command": "leetcode.addFavorite", + "when": "never" + }, + { + "command": "leetcode.removeFavorite", + "when": "never" } ], "explorer/context": [ diff --git a/resources/dark/dislike.png b/resources/dark/dislike.png new file mode 100644 index 0000000000000000000000000000000000000000..4a4fe0202483583ef0d5278b9be337aca5ce2a96 GIT binary patch literal 700 zcmV;t0z>_YP)<h;3K|Lk000e1NJLTq001BW001Be1ONa4*>kdg00002VoOIv0RM-N z%)bBt0(D75K~zY`?Uc())KL`2@A#M`dQn)SnbO}76(uy)qA-Hm^jKC<R@*2-TSi3? zCJ`+|5>gDyMG+PQqH{mz=Z_xXP*|icGRs9a4mqN9TFh_!&CAC?%kFRWyZ4^YIp=%M zJ;wZB|8i-OoRn_Hn3Es&6{o^wsgrOSr+Li;bByuK9@nBg=C&3W&G^RUh%v^<QN}Y* ztkYkUYd(%L%vq;88nm@sw4*3$uX6)M8R3GhjRu`+X<!89TLwala8X|Nt@iiAWwwb~ z6lK;n`so<M8hTJ9EfG$j45ynXm+a#glkCmjch}lc)E@IMcB67GpRhJ$LwWblqdfH^ z7(<=vLMql@gYwk}%%JYdLIBTKppx(b!)Rnzfj#qxFFv3drL(ZM>nOH|{fsseL*>k3 z2AMU=shBjNOh*nbWG<H(>Z_cOcoQFNQ+8qQER2xLD9T5t!izVGqP8*n+D(+1w9Hce zuAwLsDDP!MZ#jeBpV}+SKzQbtoND=u;_?n<sIQW%c@P?)ITH~skryb_cDFGeLX&Dl z_ArBTJG;IC?q(vQLAp@lHsm3OB2~sv#}q0p`C23g;g-^g5=%zmd5@z!&_Mn!%Rz)o zq#Y&3PGgLrjyP%`=ABC^gtVk1ddrj2MXHQ3hRu9J<xOP$V!a;V9?JLdDr1}q27T$$ z<Q#arZc&82Wp^0kR1i&hr;e#KIhTqenLSaI-|m)q={z|Hwn_q}XUSJ5ha`bYyR)A- zN~>){iP;cOP=3m`WjtK!C4uq><#9)GN3m`5{+4HMj4^V6X_PLvG&u=qMVX9jFJOF7 iPiHjf4->hc^8Oc6unZX1>IL=y0000<MNUMnLSTYD`a}Z& literal 0 HcmV?d00001 diff --git a/resources/dark/like.png b/resources/dark/like.png new file mode 100644 index 0000000000000000000000000000000000000000..613fccd4a02d9c514bfab713760aaf1c768432e3 GIT binary patch literal 472 zcmV;}0Vn>6P)<h;3K|Lk000e1NJLTq001BW001Be1ONa4*>kdg00002VoOIv0RM-N z%)bBt0g*{WK~zYI?U1of6j2n0hb_oPgLZTq_BpJ;!fZn#jY^3o0+RRw(h{r?B@p!) zEP#%v*~Z=Toy|5D)C+~nMjNmh2qeG7tPTS+II|in|6AR2&-dMPZxH;?-;7E=?b~!Y z^RM=SnR@x>NxjTNKJtw-x@_5fl~Qo4(ng8Z^SeP11U^MCd19@`*k!zj=<v8z*&Vhj z3$~AtEwPLcdpxn~?r^K(bL=4w5(<@QBX&NG#I<_a7CA+TQ+pOaCkVK~dxW2R2oDgQ z^LP}$%@K!8T&%Zm+CH*-apN}f*|d+faT`yq&m%VD3A(6NNo&kXV+`>n7M!5=wIYJg z*O4E`f(~llDk5M4(TTUKh<AkqJIL04Z5yL}NB$@;?z4z6@oPSZ2%EJ$c(dlm$evy( z+e$t~vqp$`kv7<K#EDH_g>xqp&!gz$s~XB^&=4=P6@C15CVsUd7oM%?<8OY8M+$$H zR20H5EBg4`+;~zk5FRO5M}&lk^}=|hur)N$?Xki)d}CldQv4DAPx1pRL|@&g-V}fU O0000<MNUMnLSTYZWYv2B literal 0 HcmV?d00001 diff --git a/resources/light/dislike.png b/resources/light/dislike.png new file mode 100644 index 0000000000000000000000000000000000000000..b514f0f3223cdc878233d86e4427ac161b65ee05 GIT binary patch literal 599 zcmV-d0;v6oP)<h;3K|Lk000e1NJLTq001BW001Be1ONa4*>kdg00002VoOIv0RM-N z%)bBt0uV_=K~zY`?bP3E&2b#Z@yB*JmJAV=8Oz@w#LB@1k>bXWOO&6tB8^KSrCE|o zEsC138)^IjSfaLQWL%ix0<&yu@^*2)JLl}|INQpl&-d!}{(N4~&-?xQ)R+J3pRP)K zwCVNBXAkXFmD{PZ&m&*_((9gGDofexb%-%vpY33WzM`EcmW{Xf2|W&|lUDDj_d+=1 ztPtKgqF!2^L*5A=$090q2oF>j)T*2^B7_l*1>-PVyYRShkljMh7<+bY@ZC4-$JOU} zFYL@0+Ju88gU!g4tREKc=4G!?H>DR_CVa@tVPWQ!05gQ4yzCLyObJlwy0>}RB(zQm zK+3kfSg2pvU)E4vM&Xb!X!Bp~$8}qrQ;WQGs`$voGKk|sc%>%kw@V0(#mCMG!-bP2 z>$DKQ2rtaHKxd-DiOC?c_G9Y25js2<x-E9H6rw^?5n`JA!l1Pzh)B{{XIQvU+(U&+ zMToRJ!hlSI=vIpcKZNE|fsIE@*DCZUU1V<`5U#2y{bb`2)7%pJtp*JSglnb$OQVS9 zF^C08bhTiK*TOUND2KQ#d@>6)It!x9$NALU@`&?Rp+;Bk_69!+;+(LH?DSp2PfK&r zjmEj$kkCF6fUSmvTQ(XHTHFx&W!x6NS}`$zErx{O!c8eDHxe~TJ8Uv2+%X-bv<Tm< loUA?DMXPj9rCb@k{STAa<lj6S7v}%~002ovPDHLkV1oPqB254Q literal 0 HcmV?d00001 diff --git a/resources/light/like.png b/resources/light/like.png new file mode 100644 index 0000000000000000000000000000000000000000..0f7081d2a74f7186174e7495b02d9eb2456ab686 GIT binary patch literal 418 zcmV;T0bTxyP)<h;3K|Lk000e1NJLTq001BW001Be1ONa4*>kdg00002VoOIv0RM-N z%)bBt0b5B#K~zY`?U6lB0#O)64-|xG)Xt8;I;_CL(3oiBPpKw?nz#XNjaG^hh`I&~ zr6cMBH0)uZ5Q#QwGZ09w#Y-Fp7@R?4<u}#6-<&gfZ{UA^b;7JtqE3ew?pP!GwTZIM zJ+E}AbHg&>L3n}+ay<<e09d5avw0-mk2eq&o5YBaV22t)9B_ybRkleGAx4%e;@PbT zQ$duO=<1^E(?*CkdtJwYNp2Aj-3M7gST5YmEbqLL>g%VdA(ot?gvboM*d)n;{TAZd ziFHIQ&>xE<o}Ac1j0F;mBbrXM5Ho=UDTL+39O5dFpp3{nahearhHpHBu-&(oMcAZ$ z;c1$P-QN1xry`AwI2p7$LbRA4iqCoDeiR1J5%PK=#OV-)!Oy+%;R;{4x5D5T-{VGc z)}si7_bUv3=^uA1M#7DvfUvO<h2XeR<k4tfcN9g6qvJ;LBm6Js6PRC@{a13X<NyEw M07*qoM6N<$g1hp%;{X5v literal 0 HcmV?d00001 diff --git a/src/commands/star.ts b/src/commands/star.ts new file mode 100644 index 00000000..baae0b07 --- /dev/null +++ b/src/commands/star.ts @@ -0,0 +1,26 @@ + +// Copyright (c) jdneo. All rights reserved. +// Licensed under the MIT license. + +import { LeetCodeNode } from "../explorer/LeetCodeNode"; +import { leetCodeTreeDataProvider } from "../explorer/LeetCodeTreeDataProvider"; +import { leetCodeExecutor } from "../leetCodeExecutor"; +import { DialogType, promptForOpenOutputChannel } from "../utils/uiUtils"; + +export async function addFavorite(node: LeetCodeNode): Promise<void> { + try { + await leetCodeExecutor.toggleFavorite(node, true); + leetCodeTreeDataProvider.refresh(); + } catch (error) { + await promptForOpenOutputChannel("Failed to add the problem to favorite. Please open the output channel for details.", DialogType.error); + } +} + +export async function removeFavorite(node: LeetCodeNode): Promise<void> { + try { + await leetCodeExecutor.toggleFavorite(node, false); + leetCodeTreeDataProvider.refresh(); + } catch (error) { + await promptForOpenOutputChannel("Failed to remove the problem from favorite. Please open the output channel for details.", DialogType.error); + } +} diff --git a/src/explorer/LeetCodeTreeDataProvider.ts b/src/explorer/LeetCodeTreeDataProvider.ts index ac115424..69445bbb 100644 --- a/src/explorer/LeetCodeTreeDataProvider.ts +++ b/src/explorer/LeetCodeTreeDataProvider.ts @@ -38,13 +38,20 @@ export class LeetCodeTreeDataProvider implements vscode.TreeDataProvider<LeetCod }; } + let contextValue: string; + if (element.isProblem) { + contextValue = element.isFavorite ? "problem-favorite" : "problem"; + } else { + contextValue = element.id.toLowerCase(); + } + return { label: element.isProblem ? `[${element.id}] ${element.name}` : element.name, tooltip: this.getSubCategoryTooltip(element), collapsibleState: element.isProblem ? vscode.TreeItemCollapsibleState.None : vscode.TreeItemCollapsibleState.Collapsed, - contextValue: element.isProblem ? "problem" : element.id.toLowerCase(), iconPath: this.parseIconPathFromProblemState(element), command: element.isProblem ? element.previewCommand : undefined, + contextValue, }; } diff --git a/src/extension.ts b/src/extension.ts index d1997945..9bb3ad41 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -8,6 +8,7 @@ import { switchDefaultLanguage } from "./commands/language"; import * as plugin from "./commands/plugin"; import * as session from "./commands/session"; import * as show from "./commands/show"; +import * as star from "./commands/star"; import * as submit from "./commands/submit"; import * as test from "./commands/test"; import { explorerNodeManager } from "./explorer/explorerNodeManager"; @@ -61,6 +62,8 @@ export async function activate(context: vscode.ExtensionContext): Promise<void> vscode.commands.registerCommand("leetcode.testSolution", (uri?: vscode.Uri) => test.testSolution(uri)), vscode.commands.registerCommand("leetcode.submitSolution", (uri?: vscode.Uri) => submit.submitSolution(uri)), vscode.commands.registerCommand("leetcode.switchDefaultLanguage", () => switchDefaultLanguage()), + vscode.commands.registerCommand("leetcode.addFavorite", (node: LeetCodeNode) => star.addFavorite(node)), + vscode.commands.registerCommand("leetcode.removeFavorite", (node: LeetCodeNode) => star.removeFavorite(node)), ); await leetCodeExecutor.switchEndpoint(plugin.getLeetCodeEndpoint()); diff --git a/src/leetCodeExecutor.ts b/src/leetCodeExecutor.ts index 8bef00fa..04b89013 100644 --- a/src/leetCodeExecutor.ts +++ b/src/leetCodeExecutor.ts @@ -162,6 +162,14 @@ class LeetCodeExecutor implements Disposable { } } + public async toggleFavorite(node: IProblem, addToFavorite: boolean): Promise<void> { + const commandParams: string[] = [await this.getLeetCodeBinaryPath(), "star", node.id]; + if (!addToFavorite) { + commandParams.push("-d"); + } + await this.executeCommandWithProgressEx("Updating the favorite list...", "node", commandParams); + } + public async getCompaniesAndTags(): Promise<{ companies: { [key: string]: string[] }, tags: { [key: string]: string[] } }> { // preprocess the plugin source const companiesTagsPath: string = path.join(await leetCodeExecutor.getLeetCodeRootPath(), "lib", "plugins", "company.js"); From bbf6712790535aec86c6d68f548838c3359757cc Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Tue, 3 Sep 2019 18:22:57 +0800 Subject: [PATCH 24/92] Prepare for 0.15.3 (#408) --- CHANGELOG.md | 11 +++++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2dd16029..07f25a0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to the "leetcode" extension will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +## [0.15.3] +### Added +- Support `Pick One` [#263](https://github.com/jdneo/vscode-leetcode/issues/263) +- Support toggling the favorite problems [#378](https://github.com/jdneo/vscode-leetcode/issues/378) + +### Changed +- Update the activity bar icon [#395](https://github.com/jdneo/vscode-leetcode/issues/263) + +### Fixed +[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.3+is%3Aclosed+label%3Abug) + ## [0.15.2] ### Added - Prompt to open the workspace for LeetCode [#130](https://github.com/jdneo/vscode-leetcode/issues/130) diff --git a/package-lock.json b/package-lock.json index a01167a6..428ff0e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "vscode-leetcode", - "version": "0.15.2", + "version": "0.15.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 1e6ce79a..0d7d25b1 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-leetcode", "displayName": "LeetCode", "description": "Solve LeetCode problems in VS Code", - "version": "0.15.2", + "version": "0.15.3", "author": "Sheng Chen", "publisher": "shengchen", "license": "MIT", From a3528505543bdbf38ac7b85b677af9a7deb2dfcf Mon Sep 17 00:00:00 2001 From: SF-Zhou <sfzhou.scut@gmail.com> Date: Tue, 10 Sep 2019 18:59:33 +0800 Subject: [PATCH 25/92] fix: add rust in default language list (#412) --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 0d7d25b1..7e759e68 100644 --- a/package.json +++ b/package.json @@ -305,6 +305,7 @@ "python", "python3", "ruby", + "rust", "scala", "swift" ], From 2d4266f1d6d5b4af3b3c7f232f58be9b1f20f812 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E5=8D=A1=E7=90=B3?= <hufan.akarin@gmail.com> Date: Tue, 10 Sep 2019 19:12:12 +0800 Subject: [PATCH 26/92] implement leetcode.relativeFilePath (#380) --- package.json | 243 +++++++++++++++++++++++++++++++++++++++- src/commands/show.ts | 101 ++++++++++++----- src/leetCodeExecutor.ts | 8 +- 3 files changed, 317 insertions(+), 35 deletions(-) diff --git a/package.json b/package.json index 7e759e68..0ffde67d 100644 --- a/package.json +++ b/package.json @@ -367,7 +367,248 @@ "leetcode.outputFolder": { "type": "string", "scope": "application", - "description": "The relative path to save the problem files." + "description": "[Deprecated] The output folder to save the problem files." + }, + "leetcode.filePath": { + "type": "object", + "scope": "application", + "description": "The output folder and filename to save the problem files.", + "properties": { + "default": { + "type": "object", + "properties": { + "folder": { + "type": "string", + "examples": [ + "src" + ] + }, + "filename": { + "type": "string", + "examples": [ + "${camelCaseName}.${ext}", + "${PascalCaseName}.${ext}", + "${id}-${kebab-case-name}.${ext}", + "${id}_${snake_case_name}.${ext}" + ] + } + }, + "required": [ + "folder", + "filename" + ] + }, + "bash": { + "type": "object", + "properties": { + "folder": { + "type": "string" + }, + "filename": { + "type": "string" + } + }, + "minProperties": 1 + }, + "c": { + "type": "object", + "properties": { + "folder": { + "type": "string" + }, + "filename": { + "type": "string" + } + }, + "minProperties": 1 + }, + "cpp": { + "type": "object", + "properties": { + "folder": { + "type": "string" + }, + "filename": { + "type": "string" + } + }, + "minProperties": 1 + }, + "csharp": { + "type": "object", + "properties": { + "folder": { + "type": "string" + }, + "filename": { + "type": "string" + } + }, + "minProperties": 1 + }, + "golang": { + "type": "object", + "properties": { + "folder": { + "type": "string" + }, + "filename": { + "type": "string" + } + }, + "minProperties": 1 + }, + "java": { + "type": "object", + "properties": { + "folder": { + "type": "string" + }, + "filename": { + "type": "string" + } + }, + "minProperties": 1 + }, + "javascript": { + "type": "object", + "properties": { + "folder": { + "type": "string" + }, + "filename": { + "type": "string" + } + }, + "minProperties": 1 + }, + "kotlin": { + "type": "object", + "properties": { + "folder": { + "type": "string" + }, + "filename": { + "type": "string" + } + }, + "minProperties": 1 + }, + "mysql": { + "type": "object", + "properties": { + "folder": { + "type": "string" + }, + "filename": { + "type": "string" + } + }, + "minProperties": 1 + }, + "php": { + "type": "object", + "properties": { + "folder": { + "type": "string" + }, + "filename": { + "type": "string" + } + }, + "minProperties": 1 + }, + "python": { + "type": "object", + "properties": { + "folder": { + "type": "string" + }, + "filename": { + "type": "string" + } + }, + "minProperties": 1 + }, + "python3": { + "type": "object", + "properties": { + "folder": { + "type": "string" + }, + "filename": { + "type": "string" + } + }, + "minProperties": 1 + }, + "ruby": { + "type": "object", + "properties": { + "folder": { + "type": "string" + }, + "filename": { + "type": "string" + } + }, + "minProperties": 1 + }, + "rust": { + "type": "object", + "properties": { + "folder": { + "type": "string" + }, + "filename": { + "type": "string" + } + }, + "minProperties": 1 + }, + "scala": { + "type": "object", + "properties": { + "folder": { + "type": "string" + }, + "filename": { + "type": "string" + } + }, + "minProperties": 1 + }, + "swift": { + "type": "object", + "properties": { + "folder": { + "type": "string" + }, + "filename": { + "type": "string" + } + }, + "minProperties": 1 + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "folder": { + "type": "string" + }, + "filename": { + "type": "string" + } + }, + "minProperties": 1 + }, + "default": { + "default": { + "folder": "", + "filename": "${id}.${kebab-case-name}.${ext}" + } + } }, "leetcode.enableStatusBar": { "type": "boolean", diff --git a/src/commands/show.ts b/src/commands/show.ts index b946c298..1906bd8e 100644 --- a/src/commands/show.ts +++ b/src/commands/show.ts @@ -1,7 +1,7 @@ // Copyright (c) jdneo. All rights reserved. // Licensed under the MIT license. -import * as fse from "fs-extra"; +import * as _ from "lodash"; import * as path from "path"; import * as unescapeJS from "unescape-js"; import * as vscode from "vscode"; @@ -11,7 +11,7 @@ import { leetCodeChannel } from "../leetCodeChannel"; import { leetCodeExecutor } from "../leetCodeExecutor"; import { leetCodeManager } from "../leetCodeManager"; import { IProblem, IQuickItemEx, languages, ProblemState } from "../shared"; -import { getNodeIdFromFile } from "../utils/problemUtils"; +import { genFileExt, genFileName, getNodeIdFromFile } from "../utils/problemUtils"; import { DialogOptions, DialogType, openSettingsEditor, promptForOpenOutputChannel, promptForSignIn, promptHintMessage } from "../utils/uiUtils"; import { getActiveFilePath, selectWorkspaceFolder } from "../utils/workspaceUtils"; import * as wsl from "../utils/wslUtils"; @@ -137,27 +137,38 @@ async function showProblemInternal(node: IProblem): Promise<void> { } const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode"); - let outDir: string = await selectWorkspaceFolder(); - if (!outDir) { + const workspaceFolder: string = await selectWorkspaceFolder(); + if (!workspaceFolder) { return; } - let relativePath: string = (leetCodeConfig.get<string>("outputFolder", "")).trim(); - if (relativePath) { - relativePath = await resolveRelativePath(relativePath, node, language); - if (!relativePath) { + const outputFolder: string = leetCodeConfig.get<string>("outputFolder", "").trim(); + + const fileFolder: string = leetCodeConfig + .get<string>(`filePath.${language}.folder`, leetCodeConfig.get<string>(`filePath.default.folder`, outputFolder)) + .trim(); + const fileName: string = leetCodeConfig + .get<string>( + `filePath.${language}.filename`, + leetCodeConfig.get<string>(`filePath.default.filename`, genFileName(node, language)), + ) + .trim(); + + let finalPath: string = path.join(workspaceFolder, fileFolder, fileName); + + if (finalPath) { + finalPath = await resolveRelativePath(finalPath, node, language); + if (!finalPath) { leetCodeChannel.appendLine("Showing problem canceled by user."); return; } } - outDir = path.join(outDir, relativePath); - await fse.ensureDir(outDir); + finalPath = wsl.useWsl() ? await wsl.toWinPath(finalPath) : finalPath; - const originFilePath: string = await leetCodeExecutor.showProblem(node, language, outDir, leetCodeConfig.get<boolean>("showCommentDescription")); - const filePath: string = wsl.useWsl() ? await wsl.toWinPath(originFilePath) : originFilePath; + await leetCodeExecutor.showProblem(node, language, finalPath, leetCodeConfig.get<boolean>("showCommentDescription")); await Promise.all([ - vscode.window.showTextDocument(vscode.Uri.file(filePath), { preview: false, viewColumn: vscode.ViewColumn.One }), + vscode.window.showTextDocument(vscode.Uri.file(finalPath), { preview: false, viewColumn: vscode.ViewColumn.One }), movePreviewAsideIfNeeded(node), promptHintMessage( "hint.commentDescription", @@ -201,26 +212,49 @@ function parseProblemDecorator(state: ProblemState, locked: boolean): string { } async function resolveRelativePath(relativePath: string, node: IProblem, selectedLanguage: string): Promise<string> { + let tag: string = ""; if (/\$\{tag\}/i.test(relativePath)) { - const tag: string | undefined = await resolveTagForProblem(node); - if (!tag) { - return ""; - } - relativePath = relativePath.replace(/\$\{tag\}/ig, tag); + tag = (await resolveTagForProblem(node)) || ""; } - relativePath = relativePath.replace(/\$\{language\}/ig, selectedLanguage); - relativePath = relativePath.replace(/\$\{difficulty\}/ig, node.difficulty.toLocaleLowerCase()); - - // Check if there is any unsupported configuration - const matchResult: RegExpMatchArray | null = relativePath.match(/\$\{(.*?)\}/); - if (matchResult && matchResult.length >= 1) { - const errorMsg: string = `The config '${matchResult[1]}' is not supported.`; - leetCodeChannel.appendLine(errorMsg); - throw new Error(errorMsg); + let company: string = ""; + if (/\$\{company\}/i.test(relativePath)) { + company = (await resolveCompanyForProblem(node)) || ""; } - return relativePath; + return relativePath.replace(/\$\{(.*?)\}/g, (_substring: string, ...args: string[]) => { + const placeholder: string = args[0].toLowerCase().trim(); + switch (placeholder) { + case "id": + return node.id; + case "name": + return node.name; + case "camelcasename": + return _.camelCase(node.name); + case "pascalcasename": + return _.upperFirst(_.camelCase(node.name)); + case "kebabcasename": + case "kebab-case-name": + return _.kebabCase(node.name); + case "snakecasename": + case "snake_case_name": + return _.snakeCase(node.name); + case "ext": + return genFileExt(selectedLanguage); + case "language": + return selectedLanguage; + case "difficulty": + return node.difficulty.toLocaleLowerCase(); + case "tag": + return tag; + case "company": + return company; + default: + const errorMsg: string = `The config '${placeholder}' is not supported.`; + leetCodeChannel.appendLine(errorMsg); + throw new Error(errorMsg); + } + }); } async function resolveTagForProblem(problem: IProblem): Promise<string | undefined> { @@ -236,3 +270,14 @@ async function resolveTagForProblem(problem: IProblem): Promise<string | undefin }, ); } + +async function resolveCompanyForProblem(problem: IProblem): Promise<string | undefined> { + if (problem.companies.length === 1) { + return problem.companies[0]; + } + return await vscode.window.showQuickPick(problem.companies, { + matchOnDetail: true, + placeHolder: "Multiple tags available, please select one", + ignoreFocusOut: true, + }); +} diff --git a/src/leetCodeExecutor.ts b/src/leetCodeExecutor.ts index 04b89013..ce4a84e8 100644 --- a/src/leetCodeExecutor.ts +++ b/src/leetCodeExecutor.ts @@ -8,7 +8,6 @@ import * as requireFromString from "require-from-string"; import { ConfigurationChangeEvent, Disposable, MessageItem, window, workspace, WorkspaceConfiguration } from "vscode"; import { Endpoint, IProblem, supportedPlugins } from "./shared"; import { executeCommand, executeCommandWithProgress } from "./utils/cpUtils"; -import { genFileName } from "./utils/problemUtils"; import { DialogOptions, openUrl } from "./utils/uiUtils"; import * as wsl from "./utils/wslUtils"; import { toWslPath, useWsl } from "./utils/wslUtils"; @@ -96,17 +95,14 @@ class LeetCodeExecutor implements Disposable { ); } - public async showProblem(problemNode: IProblem, language: string, outDir: string, detailed: boolean = false): Promise<string> { - const fileName: string = genFileName(problemNode, language); - const filePath: string = path.join(outDir, fileName); + public async showProblem(problemNode: IProblem, language: string, filePath: string, detailed: boolean = false): Promise<void> { const templateType: string = detailed ? "-cx" : "-c"; if (!await fse.pathExists(filePath)) { + await fse.createFile(filePath); const codeTemplate: string = await this.executeCommandWithProgressEx("Fetching problem data...", this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "show", problemNode.id, templateType, "-l", language]); await fse.writeFile(filePath, codeTemplate); } - - return filePath; } public async showSolution(input: string, language: string): Promise<string> { From 8d8f9ac5db7943927d2c3b6fd90c7fe7c1c45fd9 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Fri, 13 Sep 2019 16:24:14 +0800 Subject: [PATCH 27/92] docs: Update the document for new setting (#413) --- ACKNOWLEDGEMENTS.md | 2 ++ README.md | 5 +++-- docs/README_zh-CN.md | 5 +++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/ACKNOWLEDGEMENTS.md b/ACKNOWLEDGEMENTS.md index bddc5bd5..75be5ed4 100644 --- a/ACKNOWLEDGEMENTS.md +++ b/ACKNOWLEDGEMENTS.md @@ -15,3 +15,5 @@ A big thanks to the following individuals for contributing: - [@xuzaixian](https://github.com/xuzaixian) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=xuzaixian) - [@ZainChen](https://github.com/ZainChen) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=ZainChen) - [@houtianze](https://github.com/houtianze) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=houtianze) +- [@magic-akari](https://github.com/magic-akari) - [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=magic-akari) +- [@SF-Zhou](https://github.com/SF-Zhou) - [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=SF-Zhou) diff --git a/README.md b/README.md index a1d6e64d..6bd352a9 100644 --- a/README.md +++ b/README.md @@ -118,9 +118,10 @@ | `leetcode.useWsl` | Specify whether to use WSL or not | `false` | | `leetcode.endpoint` | Specify the active endpoint. Supported endpoints are: `leetcode`, `leetcode-cn` | `leetcode` | | `leetcode.workspaceFolder` | Specify the path of the workspace folder to store the problem files. | `""` | -| `leetcode.outputFolder` | Specify the relative path to save the problem files. Besides using customized path, there are also several reserved words which can be used here: <ul><li>`${tag}`: Categorize the problem according to their tags.<li>`${language}`: Categorize the problem according to their language.</li><li>`${difficulty}`: Categorize the problem according to their difficulty.</li></ul>For example: `problem-${tag}-${difficulty}` | N/A | +| `leetcode.filePath` | Specify the relative path under the workspace and the file name to save the problem files. More details can be found [here](https://github.com/jdneo/vscode-leetcode/wiki/Customize-the-Relative-Folder-and-the-File-Name-of-the-Problem-File). | | +| **[Deprecated] Use `leetcode.filePath` instead** ~~`leetcode.outputFolder`~~ | ~~Specify the relative path to save the problem files. Besides using customized path, there are also several reserved words which can be used here: <ul><li>`${tag}`: Categorize the problem according to their tags.<li>`${language}`: Categorize the problem according to their language.</li><li>`${difficulty}`: Categorize the problem according to their difficulty.</li></ul>For example: `problem-${tag}-${difficulty}`~~ | ~~N/A~~ | | `leetcode.enableStatusBar` | Specify whether the LeetCode status bar will be shown or not. | `true` | -| **(Deprecated)** `leetcode.enableShortcuts` | Specify whether the submit and test shortcuts in editor or not. | `true` | +| **[Deprecated] Use `leetcode.editor.shortcuts` instead** ~~`leetcode.enableShortcuts`~~ | ~~Specify whether the submit and test shortcuts in editor or not.~~ | ~~`true`~~ | | `leetcode.editor.shortcuts` | Specify the customized shorcuts in editors. Supported values are: `submit`, `test`, `solution` and `description`. | `["submit, test"]` | | `leetcode.enableSideMode` | Specify whether `preview`, `solution` and `submission` tab should be grouped into the second editor column when solving a problem. | `true` | | `leetcode.nodePath` | Specify the `Node.js` executable path. for example, C:\Program Files\nodejs\node.exe | `node` | diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index 619863bd..4052da5f 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -118,9 +118,10 @@ | `leetcode.useWsl` | 指定是否启用 WSL | `false` | | `leetcode.endpoint` | 指定使用的终端,可用终端有:`leetcode`, `leetcode-cn` | `leetcode` | | `leetcode.workspaceFolder` | 指定保存文件的工作区目录 | `""` | -| `leetcode.outputFolder` | 指定保存文件时所用的相对文件夹路径。除了用户自定义路径外,也可以使用保留项,包括:<ul><li>`${tag}`: 根据题目的类别进行分类。<li>`${language}`: 根据题目的语言进行分类。</li><li>`${difficulty}`: 根据题目的难度进行分类。</li></ul>例如:`problem-${tag}-${difficulty}` | N/A | +| `leetcode.filePath` | 指定生成题目文件的相对文件夹路径名和文件名。点击查看[更多详细用法](https://github.com/jdneo/vscode-leetcode/wiki/%E8%87%AA%E5%AE%9A%E4%B9%89%E9%A2%98%E7%9B%AE%E6%96%87%E4%BB%B6%E7%9A%84%E7%9B%B8%E5%AF%B9%E6%96%87%E4%BB%B6%E5%A4%B9%E8%B7%AF%E5%BE%84%E5%92%8C%E6%96%87%E4%BB%B6%E5%90%8D)。 | | +| **[Deprecated] 请使用 `leetcode.filePath`** ~~`leetcode.outputFolder`~~ | ~~指定保存文件时所用的相对文件夹路径。除了用户自定义路径外,也可以使用保留项,包括:<ul><li>`${tag}`: 根据题目的类别进行分类。<li>`${language}`: 根据题目的语言进行分类。</li><li>`${difficulty}`: 根据题目的难度进行分类。</li></ul>例如:`problem-${tag}-${difficulty}`~~ | ~~N/A~~ | | `leetcode.enableStatusBar` | 指定是否在 VS Code 下方显示插件状态栏。 | `true` | -| **(Deprecated)** `leetcode.enableShortcuts` | 指定是否在 VS Code 编辑文件下方显示提交和测试的快捷按钮。 | `true` | +| **[Deprecated] 请使用 `leetcode.editor.shortcuts`** ~~`leetcode.enableShortcuts`~~ | ~~指定是否在 VS Code 编辑文件下方显示提交和测试的快捷按钮。~~ | ~~`true`~~ | | `leetcode.editor.shortcuts` | 指定在编辑器内所自定义的快捷方式。可用的快捷方式有: `submit`, `test`, `solution`, `description`。 | `["submit, test"]` | | `leetcode.enableSideMode` | 指定在解决一道题时,是否将`问题预览`、`高票答案`与`提交结果`窗口集中在编辑器的第二栏。 | `true` | | `leetcode.nodePath` | 指定 `Node.js` 可执行文件的路径。如:C:\Program Files\nodejs\node.exe | `node` | From ff9e36400aa2096dd1cb623341764f5ab2a96b11 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sat, 14 Sep 2019 12:29:38 +0800 Subject: [PATCH 28/92] fix: Cannot show output when the answer is wrong (#416) --- package-lock.json | 36 ++++++++++++++++++------------------ package.json | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 428ff0e2..c0c8e902 100644 --- a/package-lock.json +++ b/package-lock.json @@ -373,9 +373,9 @@ "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" }, "cssom": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz", - "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "optional": true }, "cssstyle": { @@ -518,9 +518,9 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", - "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", + "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", "optional": true, "requires": { "esprima": "^3.1.3", @@ -537,9 +537,9 @@ "optional": true }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "optional": true }, "esutils": { @@ -1273,9 +1273,9 @@ "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "requires": { "p-try": "^2.0.0" } @@ -1486,9 +1486,9 @@ "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=" }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" } @@ -1786,9 +1786,9 @@ } }, "vsc-leetcode-cli": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.8.tgz", - "integrity": "sha512-Zo1GBWgr7orJawlTUmXMUCGpPJ8RThoHMh9vABiPJO3n+uhPgLNGkuETIKk7u+I1dD7FHk+G/IxfD5siR49z2A==", + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.10.tgz", + "integrity": "sha512-eGf0GorHCkheBnqJN5B/RslZcfdcI6wL/v5Z23e4M3IZVOrrasiL9t6alAVXsOmeVubdMDJAaWT8R08lY46YCA==", "requires": { "ansi-styles": "3.2.1", "cheerio": "0.20.0", diff --git a/package.json b/package.json index 0ffde67d..ea25af60 100644 --- a/package.json +++ b/package.json @@ -683,6 +683,6 @@ "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", "unescape-js": "^1.1.1", - "vsc-leetcode-cli": "2.6.8" + "vsc-leetcode-cli": "2.6.10" } } From a6d34bc98994462e7a2c42c85fbc6d072f11d7a5 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sat, 14 Sep 2019 15:16:11 +0800 Subject: [PATCH 29/92] fix: Detect leetcode file by the comments (#417) --- src/codelens/CustomCodeLensProvider.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/codelens/CustomCodeLensProvider.ts b/src/codelens/CustomCodeLensProvider.ts index f201dbd7..52deaf38 100644 --- a/src/codelens/CustomCodeLensProvider.ts +++ b/src/codelens/CustomCodeLensProvider.ts @@ -22,8 +22,8 @@ export class CustomCodeLensProvider implements vscode.CodeLensProvider { return; } - const fileName: string = document.fileName.trim(); - const matchResult: RegExpMatchArray | null = fileName.match(/\d+\..*\.(.+)/); + const content: string = document.getText(); + const matchResult: RegExpMatchArray | null = content.match(/@lc app=.* id=.* lang=.*/); if (!matchResult) { return undefined; } From ef0dd22e67e1231921f9e9a8777ba50f2f472421 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sat, 14 Sep 2019 15:22:41 +0800 Subject: [PATCH 30/92] Prepare for 0.15.4 (#415) --- CHANGELOG.md | 8 ++++++++ README.md | 1 + docs/README_zh-CN.md | 1 + package-lock.json | 2 +- package.json | 2 +- 5 files changed, 12 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 07f25a0f..af503540 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to the "leetcode" extension will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +## [0.15.4] +### Added +- Add a new setting `leetcode.filePath`. Now users can use this setting to dynamicly specify the relative folder name and file name. [#PR380](https://github.com/jdneo/vscode-leetcode/pull/380) + +### Fixed +- Missing language `Rust` in the supported language list. [#PR412](https://github.com/jdneo/vscode-leetcode/pull/412) +- Cannot show output when the answer is wrong. [#414](https://github.com/jdneo/vscode-leetcode/issues/414) + ## [0.15.3] ### Added - Support `Pick One` [#263](https://github.com/jdneo/vscode-leetcode/issues/263) diff --git a/README.md b/README.md index 6bd352a9..2e445de4 100644 --- a/README.md +++ b/README.md @@ -125,6 +125,7 @@ | `leetcode.editor.shortcuts` | Specify the customized shorcuts in editors. Supported values are: `submit`, `test`, `solution` and `description`. | `["submit, test"]` | | `leetcode.enableSideMode` | Specify whether `preview`, `solution` and `submission` tab should be grouped into the second editor column when solving a problem. | `true` | | `leetcode.nodePath` | Specify the `Node.js` executable path. for example, C:\Program Files\nodejs\node.exe | `node` | +| `leetcode.showCommentDescription` | Specify whether to include the problem description in the comments | `false` | ## Want Help? diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index 4052da5f..ed986874 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -125,6 +125,7 @@ | `leetcode.editor.shortcuts` | 指定在编辑器内所自定义的快捷方式。可用的快捷方式有: `submit`, `test`, `solution`, `description`。 | `["submit, test"]` | | `leetcode.enableSideMode` | 指定在解决一道题时,是否将`问题预览`、`高票答案`与`提交结果`窗口集中在编辑器的第二栏。 | `true` | | `leetcode.nodePath` | 指定 `Node.js` 可执行文件的路径。如:C:\Program Files\nodejs\node.exe | `node` | +| `leetcode.showCommentDescription` | 指定是否要在注释中显示题干。 | `false` | ## 需要帮助? 在遇到任何问题时,可以先查看一下[疑难解答](https://github.com/jdneo/vscode-leetcode/wiki/%E7%96%91%E9%9A%BE%E8%A7%A3%E7%AD%94)以及[常见问题](https://github.com/jdneo/vscode-leetcode/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98)寻求帮助。 diff --git a/package-lock.json b/package-lock.json index c0c8e902..cb81a83b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "vscode-leetcode", - "version": "0.15.3", + "version": "0.15.4", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index ea25af60..bedaed77 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-leetcode", "displayName": "LeetCode", "description": "Solve LeetCode problems in VS Code", - "version": "0.15.3", + "version": "0.15.4", "author": "Sheng Chen", "publisher": "shengchen", "license": "MIT", From 237e56fcc998e3ee73987c7fc7da2160c94d8d9d Mon Sep 17 00:00:00 2001 From: PoppinL <poppinlp@gmail.com> Date: Mon, 16 Sep 2019 13:03:26 +0800 Subject: [PATCH 31/92] chore: replace the LeetCode.svg and LeetCode.png (#419) --- ACKNOWLEDGEMENTS.md | 1 + README.md | 32 ++++++++--------- docs/README_zh-CN.md | 32 ++++++++--------- resources/LeetCode.png | Bin 4622 -> 15437 bytes resources/LeetCode.svg | 77 ++++++++++++++++++++++++++++++++++++++--- 5 files changed, 105 insertions(+), 37 deletions(-) diff --git a/ACKNOWLEDGEMENTS.md b/ACKNOWLEDGEMENTS.md index 75be5ed4..49a975e8 100644 --- a/ACKNOWLEDGEMENTS.md +++ b/ACKNOWLEDGEMENTS.md @@ -17,3 +17,4 @@ A big thanks to the following individuals for contributing: - [@houtianze](https://github.com/houtianze) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=houtianze) - [@magic-akari](https://github.com/magic-akari) - [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=magic-akari) - [@SF-Zhou](https://github.com/SF-Zhou) - [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=SF-Zhou) +- [@JIEJIAN21](https://github.com/JIEJIAN21) - thanks for logo and icon design diff --git a/README.md b/README.md index 2e445de4..67fb4df0 100644 --- a/README.md +++ b/README.md @@ -110,22 +110,22 @@ ## Settings -| Setting Name | Description | Default Value | -| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| `leetcode.hideSolved` | Specify to hide the solved problems or not | `false` | -| `leetcode.showLocked` | Specify to show the locked problems or not. Only Premium users could open the locked problems | `false` | -| `leetcode.defaultLanguage` | Specify the default language used to solve the problem. Supported languages are: `bash`, `c`, `cpp`, `csharp`, `golang`, `java`, `javascript`, `kotlin`, `mysql`, `php`, `python`,`python3`,`ruby`,`rust`, `scala`,`swift` | `N/A` | -| `leetcode.useWsl` | Specify whether to use WSL or not | `false` | -| `leetcode.endpoint` | Specify the active endpoint. Supported endpoints are: `leetcode`, `leetcode-cn` | `leetcode` | -| `leetcode.workspaceFolder` | Specify the path of the workspace folder to store the problem files. | `""` | -| `leetcode.filePath` | Specify the relative path under the workspace and the file name to save the problem files. More details can be found [here](https://github.com/jdneo/vscode-leetcode/wiki/Customize-the-Relative-Folder-and-the-File-Name-of-the-Problem-File). | | -| **[Deprecated] Use `leetcode.filePath` instead** ~~`leetcode.outputFolder`~~ | ~~Specify the relative path to save the problem files. Besides using customized path, there are also several reserved words which can be used here: <ul><li>`${tag}`: Categorize the problem according to their tags.<li>`${language}`: Categorize the problem according to their language.</li><li>`${difficulty}`: Categorize the problem according to their difficulty.</li></ul>For example: `problem-${tag}-${difficulty}`~~ | ~~N/A~~ | -| `leetcode.enableStatusBar` | Specify whether the LeetCode status bar will be shown or not. | `true` | -| **[Deprecated] Use `leetcode.editor.shortcuts` instead** ~~`leetcode.enableShortcuts`~~ | ~~Specify whether the submit and test shortcuts in editor or not.~~ | ~~`true`~~ | -| `leetcode.editor.shortcuts` | Specify the customized shorcuts in editors. Supported values are: `submit`, `test`, `solution` and `description`. | `["submit, test"]` | -| `leetcode.enableSideMode` | Specify whether `preview`, `solution` and `submission` tab should be grouped into the second editor column when solving a problem. | `true` | -| `leetcode.nodePath` | Specify the `Node.js` executable path. for example, C:\Program Files\nodejs\node.exe | `node` | -| `leetcode.showCommentDescription` | Specify whether to include the problem description in the comments | `false` | +| Setting Name | Description | Default Value | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | +| `leetcode.hideSolved` | Specify to hide the solved problems or not | `false` | +| `leetcode.showLocked` | Specify to show the locked problems or not. Only Premium users could open the locked problems | `false` | +| `leetcode.defaultLanguage` | Specify the default language used to solve the problem. Supported languages are: `bash`, `c`, `cpp`, `csharp`, `golang`, `java`, `javascript`, `kotlin`, `mysql`, `php`, `python`,`python3`,`ruby`,`rust`, `scala`,`swift` | `N/A` | +| `leetcode.useWsl` | Specify whether to use WSL or not | `false` | +| `leetcode.endpoint` | Specify the active endpoint. Supported endpoints are: `leetcode`, `leetcode-cn` | `leetcode` | +| `leetcode.workspaceFolder` | Specify the path of the workspace folder to store the problem files. | `""` | +| `leetcode.filePath` | Specify the relative path under the workspace and the file name to save the problem files. More details can be found [here](https://github.com/jdneo/vscode-leetcode/wiki/Customize-the-Relative-Folder-and-the-File-Name-of-the-Problem-File). | | +| **[Deprecated] Use `leetcode.filePath` instead** ~~`leetcode.outputFolder`~~ | ~~Specify the relative path to save the problem files. Besides using customized path, there are also several reserved words which can be used here: <ul><li>`${tag}`: Categorize the problem according to their tags.<li>`${language}`: Categorize the problem according to their language.</li><li>`${difficulty}`: Categorize the problem according to their difficulty.</li></ul>For example: `problem-${tag}-${difficulty}`~~ | ~~N/A~~ | +| `leetcode.enableStatusBar` | Specify whether the LeetCode status bar will be shown or not. | `true` | +| **[Deprecated] Use `leetcode.editor.shortcuts` instead** ~~`leetcode.enableShortcuts`~~ | ~~Specify whether the submit and test shortcuts in editor or not.~~ | ~~`true`~~ | +| `leetcode.editor.shortcuts` | Specify the customized shorcuts in editors. Supported values are: `submit`, `test`, `solution` and `description`. | `["submit, test"]` | +| `leetcode.enableSideMode` | Specify whether `preview`, `solution` and `submission` tab should be grouped into the second editor column when solving a problem. | `true` | +| `leetcode.nodePath` | Specify the `Node.js` executable path. for example, C:\Program Files\nodejs\node.exe | `node` | +| `leetcode.showCommentDescription` | Specify whether to include the problem description in the comments | `false` | ## Want Help? diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index ed986874..4c9348a1 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -110,22 +110,22 @@ ## 插件配置项 -| 配置项名称 | 描述 | 默认值 | -| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | -| `leetcode.hideSolved` | 指定是否要隐藏已解决的问题 | `false` | -| `leetcode.showLocked` | 指定是否显示付费题目,只有付费账户才可以打开付费题目 | `false` | -| `leetcode.defaultLanguage` | 指定答题时使用的默认语言,可选语言有:`bash`, `c`, `cpp`, `csharp`, `golang`, `java`, `javascript`, `kotlin`, `mysql`, `php`, `python`,`python3`,`ruby`, `rust`, `scala`,`swift` | `N/A` | -| `leetcode.useWsl` | 指定是否启用 WSL | `false` | -| `leetcode.endpoint` | 指定使用的终端,可用终端有:`leetcode`, `leetcode-cn` | `leetcode` | -| `leetcode.workspaceFolder` | 指定保存文件的工作区目录 | `""` | -| `leetcode.filePath` | 指定生成题目文件的相对文件夹路径名和文件名。点击查看[更多详细用法](https://github.com/jdneo/vscode-leetcode/wiki/%E8%87%AA%E5%AE%9A%E4%B9%89%E9%A2%98%E7%9B%AE%E6%96%87%E4%BB%B6%E7%9A%84%E7%9B%B8%E5%AF%B9%E6%96%87%E4%BB%B6%E5%A4%B9%E8%B7%AF%E5%BE%84%E5%92%8C%E6%96%87%E4%BB%B6%E5%90%8D)。 | | -| **[Deprecated] 请使用 `leetcode.filePath`** ~~`leetcode.outputFolder`~~ | ~~指定保存文件时所用的相对文件夹路径。除了用户自定义路径外,也可以使用保留项,包括:<ul><li>`${tag}`: 根据题目的类别进行分类。<li>`${language}`: 根据题目的语言进行分类。</li><li>`${difficulty}`: 根据题目的难度进行分类。</li></ul>例如:`problem-${tag}-${difficulty}`~~ | ~~N/A~~ | -| `leetcode.enableStatusBar` | 指定是否在 VS Code 下方显示插件状态栏。 | `true` | -| **[Deprecated] 请使用 `leetcode.editor.shortcuts`** ~~`leetcode.enableShortcuts`~~ | ~~指定是否在 VS Code 编辑文件下方显示提交和测试的快捷按钮。~~ | ~~`true`~~ | -| `leetcode.editor.shortcuts` | 指定在编辑器内所自定义的快捷方式。可用的快捷方式有: `submit`, `test`, `solution`, `description`。 | `["submit, test"]` | -| `leetcode.enableSideMode` | 指定在解决一道题时,是否将`问题预览`、`高票答案`与`提交结果`窗口集中在编辑器的第二栏。 | `true` | -| `leetcode.nodePath` | 指定 `Node.js` 可执行文件的路径。如:C:\Program Files\nodejs\node.exe | `node` | -| `leetcode.showCommentDescription` | 指定是否要在注释中显示题干。 | `false` | +| 配置项名称 | 描述 | 默认值 | +| ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | +| `leetcode.hideSolved` | 指定是否要隐藏已解决的问题 | `false` | +| `leetcode.showLocked` | 指定是否显示付费题目,只有付费账户才可以打开付费题目 | `false` | +| `leetcode.defaultLanguage` | 指定答题时使用的默认语言,可选语言有:`bash`, `c`, `cpp`, `csharp`, `golang`, `java`, `javascript`, `kotlin`, `mysql`, `php`, `python`,`python3`,`ruby`, `rust`, `scala`,`swift` | `N/A` | +| `leetcode.useWsl` | 指定是否启用 WSL | `false` | +| `leetcode.endpoint` | 指定使用的终端,可用终端有:`leetcode`, `leetcode-cn` | `leetcode` | +| `leetcode.workspaceFolder` | 指定保存文件的工作区目录 | `""` | +| `leetcode.filePath` | 指定生成题目文件的相对文件夹路径名和文件名。点击查看[更多详细用法](https://github.com/jdneo/vscode-leetcode/wiki/%E8%87%AA%E5%AE%9A%E4%B9%89%E9%A2%98%E7%9B%AE%E6%96%87%E4%BB%B6%E7%9A%84%E7%9B%B8%E5%AF%B9%E6%96%87%E4%BB%B6%E5%A4%B9%E8%B7%AF%E5%BE%84%E5%92%8C%E6%96%87%E4%BB%B6%E5%90%8D)。 | | +| **[Deprecated] 请使用 `leetcode.filePath`** ~~`leetcode.outputFolder`~~ | ~~指定保存文件时所用的相对文件夹路径。除了用户自定义路径外,也可以使用保留项,包括:<ul><li>`${tag}`: 根据题目的类别进行分类。<li>`${language}`: 根据题目的语言进行分类。</li><li>`${difficulty}`: 根据题目的难度进行分类。</li></ul>例如:`problem-${tag}-${difficulty}`~~ | ~~N/A~~ | +| `leetcode.enableStatusBar` | 指定是否在 VS Code 下方显示插件状态栏。 | `true` | +| **[Deprecated] 请使用 `leetcode.editor.shortcuts`** ~~`leetcode.enableShortcuts`~~ | ~~指定是否在 VS Code 编辑文件下方显示提交和测试的快捷按钮。~~ | ~~`true`~~ | +| `leetcode.editor.shortcuts` | 指定在编辑器内所自定义的快捷方式。可用的快捷方式有: `submit`, `test`, `solution`, `description`。 | `["submit, test"]` | +| `leetcode.enableSideMode` | 指定在解决一道题时,是否将`问题预览`、`高票答案`与`提交结果`窗口集中在编辑器的第二栏。 | `true` | +| `leetcode.nodePath` | 指定 `Node.js` 可执行文件的路径。如:C:\Program Files\nodejs\node.exe | `node` | +| `leetcode.showCommentDescription` | 指定是否要在注释中显示题干。 | `false` | ## 需要帮助? 在遇到任何问题时,可以先查看一下[疑难解答](https://github.com/jdneo/vscode-leetcode/wiki/%E7%96%91%E9%9A%BE%E8%A7%A3%E7%AD%94)以及[常见问题](https://github.com/jdneo/vscode-leetcode/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98)寻求帮助。 diff --git a/resources/LeetCode.png b/resources/LeetCode.png index dcf79f2d94990c0c2e0437dd1df3d782f38e878c..d068e69789afa0277908230fc9f89c106f5c5487 100644 GIT binary patch literal 15437 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%0Ao`s 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 D)Sv-e literal 4622 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 Eg4n&jnE(I) diff --git a/resources/LeetCode.svg b/resources/LeetCode.svg index a3bac1f0..b8ea3230 100644 --- a/resources/LeetCode.svg +++ b/resources/LeetCode.svg @@ -1,11 +1,78 @@ <?xml version="1.0" encoding="UTF-8"?> -<svg width="15px" height="16px" viewBox="0 0 15 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <!-- Generator: Sketch 57 (83077) - https://sketch.com --> - <title>Combined Shape</title> +<svg width="77px" height="85px" viewBox="0 0 77 85" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 57.1 (83088) - https://sketch.com --> + <title>Group 2</title> <desc>Created with Sketch.</desc> + <defs> + <linearGradient x1="95.1049295%" y1="78.2798384%" x2="17.3264972%" y2="20.0581496%" id="linearGradient-1"> + <stop stop-color="#FFC850" offset="0%"></stop> + <stop stop-color="#DBAC46" offset="100%"></stop> + </linearGradient> + <linearGradient x1="50.9225376%" y1="47.1028834%" x2="17.3264972%" y2="20.0581496%" id="linearGradient-2"> + <stop stop-color="#EED160" stop-opacity="0" offset="0%"></stop> + <stop stop-color="#B8780A" offset="100%"></stop> + </linearGradient> + <linearGradient x1="95.1049295%" y1="70.3074724%" x2="17.3264972%" y2="28.4990532%" id="linearGradient-3"> + <stop stop-color="#FFC850" offset="0%"></stop> + <stop stop-color="#DBAC46" offset="100%"></stop> + </linearGradient> + <linearGradient x1="50.9225376%" y1="47.9196092%" x2="17.3264972%" y2="28.4990532%" id="linearGradient-4"> + <stop stop-color="#EED160" stop-opacity="0" offset="0%"></stop> + <stop stop-color="#B8780A" offset="100%"></stop> + </linearGradient> + <path d="M48.0907429,1.98230111 L9.7992724,39.9883685 C4.365387,45.3817528 4.27174622,54.1398004 9.58907078,59.6481363 L32.5977376,83.4833308 C33.3515315,84.2642028 34.3902808,84.7052417 35.4756224,84.7052417 L45.1816856,84.7052417 L45.1816856,84.7052417 L46.4248674,83.6239717 L46.4040725,83.6299012 C45.6581036,83.8426086 44.8564165,83.6047866 44.3471146,83.0197005 L21.3057723,56.5498051 C17.9292764,52.6708864 18.045281,46.8634428 21.5739856,43.1224565 L54.5886366,8.12169258 C55.7255138,6.91642245 55.6700705,5.01773684 54.4648003,3.88085958 C54.4422136,3.85955457 54.4192976,3.83860151 54.3960604,3.81800795 L52.1938718,1.86635544 C51.0096245,0.81683628 49.2138334,0.867581507 48.0907429,1.98230111 Z" id="path-5"></path> + <filter x="9.1%" y="0.7%" width="89.5%" height="99.9%" filterUnits="objectBoundingBox" id="filter-6"> + <feGaussianBlur stdDeviation="0.5" in="SourceAlpha" result="shadowBlurInner1"></feGaussianBlur> + <feOffset dx="0" dy="0" in="shadowBlurInner1" result="shadowOffsetInner1"></feOffset> + <feComposite in="shadowOffsetInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"></feComposite> + <feColorMatrix values="0 0 0 0 1 0 0 0 0 0.920410497 0 0 0 0 0.746760671 0 0 0 1 0" type="matrix" in="shadowInnerInner1"></feColorMatrix> + </filter> + <radialGradient cx="88.6763606%" cy="52.7390436%" fx="88.6763606%" fy="52.7390436%" r="81.8107923%" gradientTransform="translate(0.886764,0.527390),scale(1.000000,0.669522),rotate(9.155165),scale(1.000000,1.054640),translate(-0.886764,-0.527390)" id="radialGradient-7"> + <stop stop-color="#FFC850" offset="0%"></stop> + <stop stop-color="#FFC951" offset="88.6795822%"></stop> + <stop stop-color="#FFE688" offset="100%"></stop> + </radialGradient> + <path d="M48.0907429,1.98230111 L9.7992724,39.9883685 C4.365387,45.3817528 4.27174622,54.1398004 9.58907078,59.6481363 L32.5977376,83.4833308 C33.3515315,84.2642028 34.3902808,84.7052417 35.4756224,84.7052417 L45.1816856,84.7052417 L45.1816856,84.7052417 L46.4248674,83.6239717 L46.4040725,83.6299012 C45.6581036,83.8426086 44.8564165,83.6047866 44.3471146,83.0197005 L21.3057723,56.5498051 C17.9292764,52.6708864 18.045281,46.8634428 21.5739856,43.1224565 L54.5886366,8.12169258 C55.7255138,6.91642245 55.6700705,5.01773684 54.4648003,3.88085958 C54.4422136,3.85955457 54.4192976,3.83860151 54.3960604,3.81800795 L52.1938718,1.86635544 C51.0096245,0.81683628 49.2138334,0.867581507 48.0907429,1.98230111 Z" id="path-8"></path> + <filter x="9.1%" y="0.7%" width="89.5%" height="99.9%" filterUnits="objectBoundingBox" id="filter-9"> + <feGaussianBlur stdDeviation="0.5" in="SourceAlpha" result="shadowBlurInner1"></feGaussianBlur> + <feOffset dx="0" dy="0" in="shadowBlurInner1" result="shadowOffsetInner1"></feOffset> + <feComposite in="shadowOffsetInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"></feComposite> + <feColorMatrix values="0 0 0 0 1 0 0 0 0 0.920410497 0 0 0 0 0.746760671 0 0 0 1 0" type="matrix" in="shadowInnerInner1"></feColorMatrix> + </filter> + <linearGradient x1="73.1557209%" y1="65.5860051%" x2="73.1557209%" y2="100%" id="linearGradient-10"> + <stop stop-color="#FFC850" stop-opacity="0" offset="0%"></stop> + <stop stop-color="#FFC951" stop-opacity="0" offset="93.9189189%"></stop> + <stop stop-color="#FFE688" offset="100%"></stop> + </linearGradient> + <path d="M48.0907429,1.98230111 L9.7992724,39.9883685 C4.365387,45.3817528 4.27174622,54.1398004 9.58907078,59.6481363 L32.5977376,83.4833308 C33.3515315,84.2642028 34.3902808,84.7052417 35.4756224,84.7052417 L45.1816856,84.7052417 L45.1816856,84.7052417 L46.4248674,83.6239717 L46.4040725,83.6299012 C45.6581036,83.8426086 44.8564165,83.6047866 44.3471146,83.0197005 L21.3057723,56.5498051 C17.9292764,52.6708864 18.045281,46.8634428 21.5739856,43.1224565 L54.5886366,8.12169258 C55.7255138,6.91642245 55.6700705,5.01773684 54.4648003,3.88085958 C54.4422136,3.85955457 54.4192976,3.83860151 54.3960604,3.81800795 L52.1938718,1.86635544 C51.0096245,0.81683628 49.2138334,0.867581507 48.0907429,1.98230111 Z" id="path-11"></path> + <filter x="9.1%" y="0.7%" width="89.5%" height="99.9%" filterUnits="objectBoundingBox" id="filter-12"> + <feGaussianBlur stdDeviation="0.5" in="SourceAlpha" result="shadowBlurInner1"></feGaussianBlur> + <feOffset dx="0" dy="0" in="shadowBlurInner1" result="shadowOffsetInner1"></feOffset> + <feComposite in="shadowOffsetInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"></feComposite> + <feColorMatrix values="0 0 0 0 1 0 0 0 0 0.920410497 0 0 0 0 0.746760671 0 0 0 1 0" type="matrix" in="shadowInnerInner1"></feColorMatrix> + </filter> + </defs> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> - <g id="Artboard" transform="translate(-439.000000, -612.000000)" fill="#303133" fill-rule="nonzero"> - <path d="M448.617144,612.16769 C448.808341,612.363282 448.826418,612.663731 448.673533,612.879152 L448.608191,612.955578 L446.15,615.357 L449.894886,619.007259 C450.093972,619.194817 450.124399,619.494266 449.98051,619.715797 L449.918369,619.794848 C449.707367,620.01882 449.354751,620.029333 449.13078,619.818331 L449.13078,619.818331 L445.354,616.136 L440.170212,621.203943 C440.111737,621.261104 440.099007,621.347469 440.132652,621.417331 L440.166592,621.46592 L445.358074,626.829135 C445.415144,626.888093 445.501806,626.90111 445.571922,626.867432 L445.620685,626.833408 L445.623532,626.830592 L449.13805,623.278672 C449.354479,623.05994 449.707246,623.058073 449.925978,623.274502 C450.120407,623.466883 450.143485,623.766988 449.994209,623.984926 L449.930149,624.06243 L446.415631,627.61435 L446.395701,627.634062 C445.914207,628.100138 445.16516,628.119545 444.661422,627.700626 L444.55742,627.604151 L439.365938,622.240936 C438.901478,621.761111 438.880378,621.015175 439.29562,620.511206 L439.391276,620.407102 L447.829256,612.158737 C448.049297,611.94364 448.402047,611.947648 448.617144,612.16769 Z M446.514534,621 L453.485466,621 C453.769635,621 454,621.223858 454,621.5 C454,621.74546 453.817984,621.949608 453.577954,621.991944 L453.485466,622 L446.514534,622 C446.230365,622 446,621.776142 446,621.5 C446,621.25454 446.182016,621.050392 446.422046,621.008056 L446.514534,621 L453.485466,621 Z" id="Combined-Shape"></path> + <g id="Artboard" transform="translate(-448.000000, -253.000000)"> + <g id="Group-2" transform="translate(442.410939, 252.558696)"> + <path d="M42.5542463,15.4354491 L69.4589383,41.1447295 C70.2575266,41.9078353 70.2862907,43.1738386 69.5231848,43.9724268 C69.4743282,44.0235551 69.4227943,44.0720561 69.3688001,44.1177254 L67.6165172,45.599841 C66.8956455,46.2095686 65.8465638,46.2321199 65.1001563,45.6539334 L33.5988128,21.2521786 L33.5988128,21.2521786 L42.5542463,15.4354491 Z" id="Path-6" fill="url(#linearGradient-1)" transform="translate(52.332910, 31.040482) rotate(-1.000000) translate(-52.332910, -31.040482) "></path> + <path d="M42.5542463,15.4354491 L69.4589383,41.1447295 C70.2575266,41.9078353 70.2862907,43.1738386 69.5231848,43.9724268 C69.4743282,44.0235551 69.4227943,44.0720561 69.3688001,44.1177254 L67.6165172,45.599841 C66.8956455,46.2095686 65.8465638,46.2321199 65.1001563,45.6539334 L33.5988128,21.2521786 L33.5988128,21.2521786 L42.5542463,15.4354491 Z" id="Path-6" fill="url(#linearGradient-2)" opacity="0.575218564" transform="translate(52.332910, 31.040482) rotate(-1.000000) translate(-52.332910, -31.040482) "></path> + <path d="M45.1816856,57.9834216 L67.9190185,78.0824932 C68.7466031,78.8140515 68.8244479,80.0779865 68.0928897,80.9055711 C68.0845908,80.9149594 68.0762038,80.9242694 68.06773,80.9335001 L65.8223492,83.3793956 C65.130382,84.1331562 63.9810937,84.2430748 63.1587975,83.6341393 L31.589061,60.2557855 L31.589061,60.2557855 L32.7765693,59.1076831 C33.5224653,58.3865387 34.5193782,57.9834216 35.5568801,57.9834216 L45.1816856,57.9834216 L45.1816856,57.9834216 Z" id="Path-6-Copy" fill="url(#linearGradient-3)" transform="translate(50.517493, 71.344332) scale(-1, 1) rotate(-180.000000) translate(-50.517493, -71.344332) "></path> + <path d="M45.1816856,57.9834216 L67.9190185,78.0824932 C68.7466031,78.8140515 68.8244479,80.0779865 68.0928897,80.9055711 C68.0845908,80.9149594 68.0762038,80.9242694 68.06773,80.9335001 L65.8223492,83.3793956 C65.130382,84.1331562 63.9810937,84.2430748 63.1587975,83.6341393 L31.589061,60.2557855 L31.589061,60.2557855 L32.7765693,59.1076831 C33.5224653,58.3865387 34.5193782,57.9834216 35.5568801,57.9834216 L45.1816856,57.9834216 L45.1816856,57.9834216 Z" id="Path-6-Copy" fill="url(#linearGradient-4)" opacity="0.575218564" transform="translate(50.517493, 71.344332) scale(-1, 1) rotate(-180.000000) translate(-50.517493, -71.344332) "></path> + <g id="Path-5"> + <use fill="#FFC850" fill-rule="evenodd" xlink:href="#path-5"></use> + <use fill="black" fill-opacity="1" filter="url(#filter-6)" xlink:href="#path-5"></use> + </g> + <g id="Path-5"> + <use fill="url(#radialGradient-7)" fill-rule="evenodd" xlink:href="#path-8"></use> + <use fill="black" fill-opacity="1" filter="url(#filter-9)" xlink:href="#path-8"></use> + </g> + <g id="Path-5"> + <use fill="url(#linearGradient-10)" fill-rule="evenodd" xlink:href="#path-11"></use> + <use fill="black" fill-opacity="1" filter="url(#filter-12)" xlink:href="#path-11"></use> + </g> + <path d="M57.226842,38.2936568 L78.4984074,60.6713202 C79.2458216,61.4575992 79.2301284,62.6963752 78.4630357,63.463468 L76.2170933,65.7094104 C75.4557792,66.4707245 74.228407,66.4927362 73.4402844,65.7592098 L50.8705573,44.7529721 C50.0620053,44.0004315 50.0165991,42.7349158 50.7691397,41.9263638 C50.7807829,41.913854 50.792586,41.9014939 50.804546,41.8892867 L54.3486501,38.2719185 C55.1216678,37.4829208 56.3879315,37.4699665 57.1769292,38.2429843 C57.1938659,38.2595779 57.2105061,38.2764714 57.226842,38.2936568 Z" id="Path-6" fill="#909399" transform="translate(64.605196, 51.932685) rotate(-45.000000) translate(-64.605196, -51.932685) "></path> + </g> </g> </g> </svg> \ No newline at end of file From d0f23e50840e11fb9e1c7e82acc0e8f9288de824 Mon Sep 17 00:00:00 2001 From: PoppinL <poppinlp@gmail.com> Date: Tue, 17 Sep 2019 12:34:17 +0800 Subject: [PATCH 32/92] chore: revert the icon for activity bar (#423) --- resources/LeetCode.svg | 77 +++--------------------------------------- 1 file changed, 5 insertions(+), 72 deletions(-) diff --git a/resources/LeetCode.svg b/resources/LeetCode.svg index b8ea3230..a3bac1f0 100644 --- a/resources/LeetCode.svg +++ b/resources/LeetCode.svg @@ -1,78 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> -<svg width="77px" height="85px" viewBox="0 0 77 85" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <!-- Generator: Sketch 57.1 (83088) - https://sketch.com --> - <title>Group 2</title> +<svg width="15px" height="16px" viewBox="0 0 15 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 57 (83077) - https://sketch.com --> + <title>Combined Shape</title> <desc>Created with Sketch.</desc> - <defs> - <linearGradient x1="95.1049295%" y1="78.2798384%" x2="17.3264972%" y2="20.0581496%" id="linearGradient-1"> - <stop stop-color="#FFC850" offset="0%"></stop> - <stop stop-color="#DBAC46" offset="100%"></stop> - </linearGradient> - <linearGradient x1="50.9225376%" y1="47.1028834%" x2="17.3264972%" y2="20.0581496%" id="linearGradient-2"> - <stop stop-color="#EED160" stop-opacity="0" offset="0%"></stop> - <stop stop-color="#B8780A" offset="100%"></stop> - </linearGradient> - <linearGradient x1="95.1049295%" y1="70.3074724%" x2="17.3264972%" y2="28.4990532%" id="linearGradient-3"> - <stop stop-color="#FFC850" offset="0%"></stop> - <stop stop-color="#DBAC46" offset="100%"></stop> - </linearGradient> - <linearGradient x1="50.9225376%" y1="47.9196092%" x2="17.3264972%" y2="28.4990532%" id="linearGradient-4"> - <stop stop-color="#EED160" stop-opacity="0" offset="0%"></stop> - <stop stop-color="#B8780A" offset="100%"></stop> - </linearGradient> - <path d="M48.0907429,1.98230111 L9.7992724,39.9883685 C4.365387,45.3817528 4.27174622,54.1398004 9.58907078,59.6481363 L32.5977376,83.4833308 C33.3515315,84.2642028 34.3902808,84.7052417 35.4756224,84.7052417 L45.1816856,84.7052417 L45.1816856,84.7052417 L46.4248674,83.6239717 L46.4040725,83.6299012 C45.6581036,83.8426086 44.8564165,83.6047866 44.3471146,83.0197005 L21.3057723,56.5498051 C17.9292764,52.6708864 18.045281,46.8634428 21.5739856,43.1224565 L54.5886366,8.12169258 C55.7255138,6.91642245 55.6700705,5.01773684 54.4648003,3.88085958 C54.4422136,3.85955457 54.4192976,3.83860151 54.3960604,3.81800795 L52.1938718,1.86635544 C51.0096245,0.81683628 49.2138334,0.867581507 48.0907429,1.98230111 Z" id="path-5"></path> - <filter x="9.1%" y="0.7%" width="89.5%" height="99.9%" filterUnits="objectBoundingBox" id="filter-6"> - <feGaussianBlur stdDeviation="0.5" in="SourceAlpha" result="shadowBlurInner1"></feGaussianBlur> - <feOffset dx="0" dy="0" in="shadowBlurInner1" result="shadowOffsetInner1"></feOffset> - <feComposite in="shadowOffsetInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"></feComposite> - <feColorMatrix values="0 0 0 0 1 0 0 0 0 0.920410497 0 0 0 0 0.746760671 0 0 0 1 0" type="matrix" in="shadowInnerInner1"></feColorMatrix> - </filter> - <radialGradient cx="88.6763606%" cy="52.7390436%" fx="88.6763606%" fy="52.7390436%" r="81.8107923%" gradientTransform="translate(0.886764,0.527390),scale(1.000000,0.669522),rotate(9.155165),scale(1.000000,1.054640),translate(-0.886764,-0.527390)" id="radialGradient-7"> - <stop stop-color="#FFC850" offset="0%"></stop> - <stop stop-color="#FFC951" offset="88.6795822%"></stop> - <stop stop-color="#FFE688" offset="100%"></stop> - </radialGradient> - <path d="M48.0907429,1.98230111 L9.7992724,39.9883685 C4.365387,45.3817528 4.27174622,54.1398004 9.58907078,59.6481363 L32.5977376,83.4833308 C33.3515315,84.2642028 34.3902808,84.7052417 35.4756224,84.7052417 L45.1816856,84.7052417 L45.1816856,84.7052417 L46.4248674,83.6239717 L46.4040725,83.6299012 C45.6581036,83.8426086 44.8564165,83.6047866 44.3471146,83.0197005 L21.3057723,56.5498051 C17.9292764,52.6708864 18.045281,46.8634428 21.5739856,43.1224565 L54.5886366,8.12169258 C55.7255138,6.91642245 55.6700705,5.01773684 54.4648003,3.88085958 C54.4422136,3.85955457 54.4192976,3.83860151 54.3960604,3.81800795 L52.1938718,1.86635544 C51.0096245,0.81683628 49.2138334,0.867581507 48.0907429,1.98230111 Z" id="path-8"></path> - <filter x="9.1%" y="0.7%" width="89.5%" height="99.9%" filterUnits="objectBoundingBox" id="filter-9"> - <feGaussianBlur stdDeviation="0.5" in="SourceAlpha" result="shadowBlurInner1"></feGaussianBlur> - <feOffset dx="0" dy="0" in="shadowBlurInner1" result="shadowOffsetInner1"></feOffset> - <feComposite in="shadowOffsetInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"></feComposite> - <feColorMatrix values="0 0 0 0 1 0 0 0 0 0.920410497 0 0 0 0 0.746760671 0 0 0 1 0" type="matrix" in="shadowInnerInner1"></feColorMatrix> - </filter> - <linearGradient x1="73.1557209%" y1="65.5860051%" x2="73.1557209%" y2="100%" id="linearGradient-10"> - <stop stop-color="#FFC850" stop-opacity="0" offset="0%"></stop> - <stop stop-color="#FFC951" stop-opacity="0" offset="93.9189189%"></stop> - <stop stop-color="#FFE688" offset="100%"></stop> - </linearGradient> - <path d="M48.0907429,1.98230111 L9.7992724,39.9883685 C4.365387,45.3817528 4.27174622,54.1398004 9.58907078,59.6481363 L32.5977376,83.4833308 C33.3515315,84.2642028 34.3902808,84.7052417 35.4756224,84.7052417 L45.1816856,84.7052417 L45.1816856,84.7052417 L46.4248674,83.6239717 L46.4040725,83.6299012 C45.6581036,83.8426086 44.8564165,83.6047866 44.3471146,83.0197005 L21.3057723,56.5498051 C17.9292764,52.6708864 18.045281,46.8634428 21.5739856,43.1224565 L54.5886366,8.12169258 C55.7255138,6.91642245 55.6700705,5.01773684 54.4648003,3.88085958 C54.4422136,3.85955457 54.4192976,3.83860151 54.3960604,3.81800795 L52.1938718,1.86635544 C51.0096245,0.81683628 49.2138334,0.867581507 48.0907429,1.98230111 Z" id="path-11"></path> - <filter x="9.1%" y="0.7%" width="89.5%" height="99.9%" filterUnits="objectBoundingBox" id="filter-12"> - <feGaussianBlur stdDeviation="0.5" in="SourceAlpha" result="shadowBlurInner1"></feGaussianBlur> - <feOffset dx="0" dy="0" in="shadowBlurInner1" result="shadowOffsetInner1"></feOffset> - <feComposite in="shadowOffsetInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"></feComposite> - <feColorMatrix values="0 0 0 0 1 0 0 0 0 0.920410497 0 0 0 0 0.746760671 0 0 0 1 0" type="matrix" in="shadowInnerInner1"></feColorMatrix> - </filter> - </defs> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> - <g id="Artboard" transform="translate(-448.000000, -253.000000)"> - <g id="Group-2" transform="translate(442.410939, 252.558696)"> - <path d="M42.5542463,15.4354491 L69.4589383,41.1447295 C70.2575266,41.9078353 70.2862907,43.1738386 69.5231848,43.9724268 C69.4743282,44.0235551 69.4227943,44.0720561 69.3688001,44.1177254 L67.6165172,45.599841 C66.8956455,46.2095686 65.8465638,46.2321199 65.1001563,45.6539334 L33.5988128,21.2521786 L33.5988128,21.2521786 L42.5542463,15.4354491 Z" id="Path-6" fill="url(#linearGradient-1)" transform="translate(52.332910, 31.040482) rotate(-1.000000) translate(-52.332910, -31.040482) "></path> - <path d="M42.5542463,15.4354491 L69.4589383,41.1447295 C70.2575266,41.9078353 70.2862907,43.1738386 69.5231848,43.9724268 C69.4743282,44.0235551 69.4227943,44.0720561 69.3688001,44.1177254 L67.6165172,45.599841 C66.8956455,46.2095686 65.8465638,46.2321199 65.1001563,45.6539334 L33.5988128,21.2521786 L33.5988128,21.2521786 L42.5542463,15.4354491 Z" id="Path-6" fill="url(#linearGradient-2)" opacity="0.575218564" transform="translate(52.332910, 31.040482) rotate(-1.000000) translate(-52.332910, -31.040482) "></path> - <path d="M45.1816856,57.9834216 L67.9190185,78.0824932 C68.7466031,78.8140515 68.8244479,80.0779865 68.0928897,80.9055711 C68.0845908,80.9149594 68.0762038,80.9242694 68.06773,80.9335001 L65.8223492,83.3793956 C65.130382,84.1331562 63.9810937,84.2430748 63.1587975,83.6341393 L31.589061,60.2557855 L31.589061,60.2557855 L32.7765693,59.1076831 C33.5224653,58.3865387 34.5193782,57.9834216 35.5568801,57.9834216 L45.1816856,57.9834216 L45.1816856,57.9834216 Z" id="Path-6-Copy" fill="url(#linearGradient-3)" transform="translate(50.517493, 71.344332) scale(-1, 1) rotate(-180.000000) translate(-50.517493, -71.344332) "></path> - <path d="M45.1816856,57.9834216 L67.9190185,78.0824932 C68.7466031,78.8140515 68.8244479,80.0779865 68.0928897,80.9055711 C68.0845908,80.9149594 68.0762038,80.9242694 68.06773,80.9335001 L65.8223492,83.3793956 C65.130382,84.1331562 63.9810937,84.2430748 63.1587975,83.6341393 L31.589061,60.2557855 L31.589061,60.2557855 L32.7765693,59.1076831 C33.5224653,58.3865387 34.5193782,57.9834216 35.5568801,57.9834216 L45.1816856,57.9834216 L45.1816856,57.9834216 Z" id="Path-6-Copy" fill="url(#linearGradient-4)" opacity="0.575218564" transform="translate(50.517493, 71.344332) scale(-1, 1) rotate(-180.000000) translate(-50.517493, -71.344332) "></path> - <g id="Path-5"> - <use fill="#FFC850" fill-rule="evenodd" xlink:href="#path-5"></use> - <use fill="black" fill-opacity="1" filter="url(#filter-6)" xlink:href="#path-5"></use> - </g> - <g id="Path-5"> - <use fill="url(#radialGradient-7)" fill-rule="evenodd" xlink:href="#path-8"></use> - <use fill="black" fill-opacity="1" filter="url(#filter-9)" xlink:href="#path-8"></use> - </g> - <g id="Path-5"> - <use fill="url(#linearGradient-10)" fill-rule="evenodd" xlink:href="#path-11"></use> - <use fill="black" fill-opacity="1" filter="url(#filter-12)" xlink:href="#path-11"></use> - </g> - <path d="M57.226842,38.2936568 L78.4984074,60.6713202 C79.2458216,61.4575992 79.2301284,62.6963752 78.4630357,63.463468 L76.2170933,65.7094104 C75.4557792,66.4707245 74.228407,66.4927362 73.4402844,65.7592098 L50.8705573,44.7529721 C50.0620053,44.0004315 50.0165991,42.7349158 50.7691397,41.9263638 C50.7807829,41.913854 50.792586,41.9014939 50.804546,41.8892867 L54.3486501,38.2719185 C55.1216678,37.4829208 56.3879315,37.4699665 57.1769292,38.2429843 C57.1938659,38.2595779 57.2105061,38.2764714 57.226842,38.2936568 Z" id="Path-6" fill="#909399" transform="translate(64.605196, 51.932685) rotate(-45.000000) translate(-64.605196, -51.932685) "></path> - </g> + <g id="Artboard" transform="translate(-439.000000, -612.000000)" fill="#303133" fill-rule="nonzero"> + <path d="M448.617144,612.16769 C448.808341,612.363282 448.826418,612.663731 448.673533,612.879152 L448.608191,612.955578 L446.15,615.357 L449.894886,619.007259 C450.093972,619.194817 450.124399,619.494266 449.98051,619.715797 L449.918369,619.794848 C449.707367,620.01882 449.354751,620.029333 449.13078,619.818331 L449.13078,619.818331 L445.354,616.136 L440.170212,621.203943 C440.111737,621.261104 440.099007,621.347469 440.132652,621.417331 L440.166592,621.46592 L445.358074,626.829135 C445.415144,626.888093 445.501806,626.90111 445.571922,626.867432 L445.620685,626.833408 L445.623532,626.830592 L449.13805,623.278672 C449.354479,623.05994 449.707246,623.058073 449.925978,623.274502 C450.120407,623.466883 450.143485,623.766988 449.994209,623.984926 L449.930149,624.06243 L446.415631,627.61435 L446.395701,627.634062 C445.914207,628.100138 445.16516,628.119545 444.661422,627.700626 L444.55742,627.604151 L439.365938,622.240936 C438.901478,621.761111 438.880378,621.015175 439.29562,620.511206 L439.391276,620.407102 L447.829256,612.158737 C448.049297,611.94364 448.402047,611.947648 448.617144,612.16769 Z M446.514534,621 L453.485466,621 C453.769635,621 454,621.223858 454,621.5 C454,621.74546 453.817984,621.949608 453.577954,621.991944 L453.485466,622 L446.514534,622 C446.230365,622 446,621.776142 446,621.5 C446,621.25454 446.182016,621.050392 446.422046,621.008056 L446.514534,621 L453.485466,621 Z" id="Combined-Shape"></path> </g> </g> </svg> \ No newline at end of file From 5e511329743f261e320ea5ac9d85f5a94668593a Mon Sep 17 00:00:00 2001 From: Zixiang Li <xiaofalzx@gmail.com> Date: Sun, 22 Sep 2019 11:07:26 +0800 Subject: [PATCH 33/92] Add discuss link (#421) --- src/webview/leetCodePreviewProvider.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/webview/leetCodePreviewProvider.ts b/src/webview/leetCodePreviewProvider.ts index 03a12e19..d0378ef8 100644 --- a/src/webview/leetCodePreviewProvider.ts +++ b/src/webview/leetCodePreviewProvider.ts @@ -73,9 +73,9 @@ class LeetCodePreviewProvider extends LeetCodeWebview { const { title, url, category, difficulty, likes, dislikes, body } = this.description; const head: string = markdownEngine.render(`# [${title}](${url})`); const info: string = markdownEngine.render([ - `| Category | Difficulty | Likes | Dislikes |`, - `| :------: | :--------: | :---: | :------: |`, - `| ${category} | ${difficulty} | ${likes} | ${dislikes} |`, + `| Category | Difficulty | Likes | Dislikes | [Discuss](${url.replace("/description/", "/discuss/?currentPage=1&orderBy=most_votes&query=")}) |`, + `| :------: | :--------: | :---: | :------: | :-----: |`, + `| ${category} | ${difficulty} | ${likes} | ${dislikes} | -- |`, ].join("\n")); const tags: string = [ `<details>`, From ef4bcbd78443dbf056c7b3b418f237e63e0ab26e Mon Sep 17 00:00:00 2001 From: Ye Zhihao <vigilans@foxmail.com> Date: Sun, 22 Sep 2019 12:00:24 +0800 Subject: [PATCH 34/92] fix: Bring markdown engine into submission provider (#398) --- src/webview/leetCodeSubmissionProvider.ts | 68 ++++++++++++++++++++--- 1 file changed, 59 insertions(+), 9 deletions(-) diff --git a/src/webview/leetCodeSubmissionProvider.ts b/src/webview/leetCodeSubmissionProvider.ts index f717a38a..f4f18fd4 100644 --- a/src/webview/leetCodeSubmissionProvider.ts +++ b/src/webview/leetCodeSubmissionProvider.ts @@ -9,10 +9,10 @@ import { markdownEngine } from "./markdownEngine"; class LeetCodeSubmissionProvider extends LeetCodeWebview { protected readonly viewType: string = "leetcode.submission"; - private result: string; + private result: IResult; - public show(result: string): void { - this.result = result; + public show(resultString: string): void { + this.result = this.parseResult(resultString); this.showWebviewInternal(); this.showKeybindingsHint(); } @@ -25,18 +25,36 @@ class LeetCodeSubmissionProvider extends LeetCodeWebview { } protected getWebviewContent(): string { - return `<!DOCTYPE html> - <html lang="en"> + const styles: string = markdownEngine.getStyles(); + const title: string = `## ${this.result.messages[0]}`; + const messages: string[] = this.result.messages.slice(1).map((m: string) => `* ${m}`); + const sections: string[] = Object.keys(this.result) + .filter((key: string) => key !== "messages") + .map((key: string) => [ + `### ${key}`, + "```", + this.result[key].join("\n"), + "```", + ].join("\n")); + const body: string = markdownEngine.render([ + title, + ...messages, + ...sections, + ].join("\n")); + return ` + <!DOCTYPE html> + <html> <head> <meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src https:; script-src vscode-resource:; style-src vscode-resource:;"/> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> - ${markdownEngine.getStyles()} + ${styles} </head> - <body> - <pre><code>${this.result.trim()}</code></pre> + <body class="vscode-body 'scrollBeyondLastLine' 'wordWrap' 'showEditorSelection'" style="tab-size:4"> + ${body} </body> - </html>`; + </html> + `; } protected onDidDisposeWebview(): void { @@ -52,6 +70,38 @@ class LeetCodeSubmissionProvider extends LeetCodeWebview { (): Promise<any> => openKeybindingsEditor("leetcode solution"), ); } + + private parseResult(raw: string): IResult { + raw = raw.concat(" √ "); // Append a dummy sentinel to the end of raw string + const regSplit: RegExp = / [√×✔✘vx] ([^]+?)\n(?= [√×✔✘vx] )/g; + const regKeyVal: RegExp = /(.+?): ([^]*)/; + const result: IResult = { messages: [] }; + let entry: RegExpExecArray | null; + do { + entry = regSplit.exec(raw); + if (!entry) { + continue; + } + const kvMatch: RegExpExecArray | null = regKeyVal.exec(entry[1]); + if (kvMatch) { + const [key, value] = kvMatch.slice(1); + if (value) { // Do not show empty string + if (!result[key]) { + result[key] = []; + } + result[key].push(value); + } + } else { + result.messages.push(entry[1]); + } + } while (entry); + return result; + } +} + +interface IResult { + [key: string]: string[]; + messages: string[]; } export const leetCodeSubmissionProvider: LeetCodeSubmissionProvider = new LeetCodeSubmissionProvider(); From b7ededcbc4cceccd1f7b41f9caf21d1ac2cd286c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E5=8D=A1=E7=90=B3?= <hufan.akarin@gmail.com> Date: Fri, 27 Sep 2019 20:04:17 +0800 Subject: [PATCH 35/92] fix: CodeLens position (#426) --- package-lock.json | 18 +++++++++--------- package.json | 2 +- src/codelens/CustomCodeLensProvider.ts | 11 ++++++++++- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index cb81a83b..88602cc1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -316,9 +316,9 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" }, "combined-stream": { "version": "1.0.7", @@ -485,9 +485,9 @@ } }, "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "requires": { "once": "^1.4.0" } @@ -1786,9 +1786,9 @@ } }, "vsc-leetcode-cli": { - "version": "2.6.10", - "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.10.tgz", - "integrity": "sha512-eGf0GorHCkheBnqJN5B/RslZcfdcI6wL/v5Z23e4M3IZVOrrasiL9t6alAVXsOmeVubdMDJAaWT8R08lY46YCA==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.11.tgz", + "integrity": "sha512-W0qFCLMh1vfFk/nbSj0Zc80tm1/kPAbF5gRJdm01XV19+2BE8RRHcwhWVPsOUksE6cK7Rw1KuvzGxS9wDLG2Qw==", "requires": { "ansi-styles": "3.2.1", "cheerio": "0.20.0", diff --git a/package.json b/package.json index bedaed77..45f6e63e 100644 --- a/package.json +++ b/package.json @@ -683,6 +683,6 @@ "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", "unescape-js": "^1.1.1", - "vsc-leetcode-cli": "2.6.10" + "vsc-leetcode-cli": "2.6.11" } } diff --git a/src/codelens/CustomCodeLensProvider.ts b/src/codelens/CustomCodeLensProvider.ts index 52deaf38..4764e999 100644 --- a/src/codelens/CustomCodeLensProvider.ts +++ b/src/codelens/CustomCodeLensProvider.ts @@ -28,7 +28,16 @@ export class CustomCodeLensProvider implements vscode.CodeLensProvider { return undefined; } - const range: vscode.Range = new vscode.Range(document.lineCount - 1, 0, document.lineCount - 1, 0); + let codeLensLine: number = document.lineCount - 1; + for (let i: number = document.lineCount - 1; i >= 0; i--) { + const lineContent: string = document.lineAt(i).text; + if (lineContent.indexOf("@lc code=end") >= 0) { + codeLensLine = i; + break; + } + } + + const range: vscode.Range = new vscode.Range(codeLensLine, 0, codeLensLine, 0); const codeLens: vscode.CodeLens[] = []; if (shortcuts.indexOf("submit") >= 0) { From 31d6f94c2c6a20d479fd5c6368ba9af390417be7 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Fri, 27 Sep 2019 20:11:04 +0800 Subject: [PATCH 36/92] fix: Use default file name when the setting is empty (#433) --- src/commands/show.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commands/show.ts b/src/commands/show.ts index 1906bd8e..3de4f89a 100644 --- a/src/commands/show.ts +++ b/src/commands/show.ts @@ -150,7 +150,7 @@ async function showProblemInternal(node: IProblem): Promise<void> { const fileName: string = leetCodeConfig .get<string>( `filePath.${language}.filename`, - leetCodeConfig.get<string>(`filePath.default.filename`, genFileName(node, language)), + leetCodeConfig.get<string>(`filePath.default.filename`) || genFileName(node, language), ) .trim(); From 8d50a2fab6d1c91e9f622f3ca282362ce5e63402 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sat, 28 Sep 2019 16:13:22 +0800 Subject: [PATCH 37/92] chore: prepare for 0.15.5 (#438) --- CHANGELOG.md | 7 +++++++ package-lock.json | 8 ++++---- package.json | 4 ++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index af503540..7f2f9985 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to the "leetcode" extension will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +## [0.15.5] +### Added +- Add a link to the discussion page [#420](https://github.com/jdneo/vscode-leetcode/issues/420) + +### Fixed +[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.5+is%3Aclosed+label%3Abug) + ## [0.15.4] ### Added - Add a new setting `leetcode.filePath`. Now users can use this setting to dynamicly specify the relative folder name and file name. [#PR380](https://github.com/jdneo/vscode-leetcode/pull/380) diff --git a/package-lock.json b/package-lock.json index 88602cc1..47f8dab5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "vscode-leetcode", - "version": "0.15.4", + "version": "0.15.5", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1786,9 +1786,9 @@ } }, "vsc-leetcode-cli": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.11.tgz", - "integrity": "sha512-W0qFCLMh1vfFk/nbSj0Zc80tm1/kPAbF5gRJdm01XV19+2BE8RRHcwhWVPsOUksE6cK7Rw1KuvzGxS9wDLG2Qw==", + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.13.tgz", + "integrity": "sha512-otwxXXBDPGJX2IkIbTTsXdwA9yYMxdFWqmPwtSwXfNrN1oAturxfXS61T/1vUkcwAPMMpoFtXdGr99pnSVyYtw==", "requires": { "ansi-styles": "3.2.1", "cheerio": "0.20.0", diff --git a/package.json b/package.json index 45f6e63e..bbedd4ab 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-leetcode", "displayName": "LeetCode", "description": "Solve LeetCode problems in VS Code", - "version": "0.15.4", + "version": "0.15.5", "author": "Sheng Chen", "publisher": "shengchen", "license": "MIT", @@ -683,6 +683,6 @@ "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", "unescape-js": "^1.1.1", - "vsc-leetcode-cli": "2.6.11" + "vsc-leetcode-cli": "2.6.13" } } From 01f5a2854087d08271961ea4aa7f12c108a5818c Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Wed, 2 Oct 2019 12:26:56 +0800 Subject: [PATCH 38/92] refactor: Stop using the 'vscode.workspace.rootPath' API (#443) --- src/commands/test.ts | 2 +- src/utils/uiUtils.ts | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/commands/test.ts b/src/commands/test.ts index 262f7339..d070c9aa 100644 --- a/src/commands/test.ts +++ b/src/commands/test.ts @@ -65,7 +65,7 @@ export async function testSolution(uri?: vscode.Uri): Promise<void> { } break; case ":file": - const testFile: vscode.Uri[] | undefined = await showFileSelectDialog(); + const testFile: vscode.Uri[] | undefined = await showFileSelectDialog(filePath); if (testFile && testFile.length) { const input: string = (await fse.readFile(testFile[0].fsPath, "utf-8")).trim(); if (input) { diff --git a/src/utils/uiUtils.ts b/src/utils/uiUtils.ts index 037b2371..53275fa0 100644 --- a/src/utils/uiUtils.ts +++ b/src/utils/uiUtils.ts @@ -80,8 +80,8 @@ export async function openKeybindingsEditor(query?: string): Promise<void> { await vscode.commands.executeCommand("workbench.action.openGlobalKeybindings", query); } -export async function showFileSelectDialog(): Promise<vscode.Uri[] | undefined> { - const defaultUri: vscode.Uri | undefined = vscode.workspace.rootPath ? vscode.Uri.file(vscode.workspace.rootPath) : undefined; +export async function showFileSelectDialog(fsPath?: string): Promise<vscode.Uri[] | undefined> { + const defaultUri: vscode.Uri | undefined = getBelongingWorkspaceFolderUri(fsPath); const options: vscode.OpenDialogOptions = { defaultUri, canSelectFiles: true, @@ -92,8 +92,19 @@ export async function showFileSelectDialog(): Promise<vscode.Uri[] | undefined> return await vscode.window.showOpenDialog(options); } -export async function showDirectorySelectDialog(): Promise<vscode.Uri[] | undefined> { - const defaultUri: vscode.Uri | undefined = vscode.workspace.rootPath ? vscode.Uri.file(vscode.workspace.rootPath) : undefined; +function getBelongingWorkspaceFolderUri(fsPath: string | undefined): vscode.Uri | undefined { + let defaultUri: vscode.Uri | undefined; + if (fsPath) { + const workspaceFolder: vscode.WorkspaceFolder | undefined = vscode.workspace.getWorkspaceFolder(vscode.Uri.file(fsPath)); + if (workspaceFolder) { + defaultUri = workspaceFolder.uri; + } + } + return defaultUri; +} + +export async function showDirectorySelectDialog(fsPath?: string): Promise<vscode.Uri[] | undefined> { + const defaultUri: vscode.Uri | undefined = getBelongingWorkspaceFolderUri(fsPath); const options: vscode.OpenDialogOptions = { defaultUri, canSelectFiles: false, From ffdccec272bdef9cdbf69ba3ea70cf39b3c0ab29 Mon Sep 17 00:00:00 2001 From: Bill Guo <iFun@users.noreply.github.com> Date: Wed, 2 Oct 2019 01:34:48 -0400 Subject: [PATCH 39/92] feat: added solution link (#441) --- ACKNOWLEDGEMENTS.md | 4 +++- src/webview/leetCodePreviewProvider.ts | 27 ++++++++++++++++++++++---- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/ACKNOWLEDGEMENTS.md b/ACKNOWLEDGEMENTS.md index 49a975e8..4bc00ba3 100644 --- a/ACKNOWLEDGEMENTS.md +++ b/ACKNOWLEDGEMENTS.md @@ -2,6 +2,7 @@ A big thanks to the following individuals for contributing: +- [@JIEJIAN21](https://github.com/JIEJIAN21) - thanks for logo and icon design - [@TsFreddie](https://github.com/TsFreddie) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=TsFreddie) - [@ntt2k](https://github.com/ntt2k) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=ntt2k) - [@purocean](https://github.com/purocean) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=purocean) @@ -17,4 +18,5 @@ A big thanks to the following individuals for contributing: - [@houtianze](https://github.com/houtianze) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=houtianze) - [@magic-akari](https://github.com/magic-akari) - [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=magic-akari) - [@SF-Zhou](https://github.com/SF-Zhou) - [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=SF-Zhou) -- [@JIEJIAN21](https://github.com/JIEJIAN21) - thanks for logo and icon design +- [@fuafa](https://github.com/fuafa) - [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=fuafa) +- [@iFun](https://github.com/iFun) - [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=iFun) diff --git a/src/webview/leetCodePreviewProvider.ts b/src/webview/leetCodePreviewProvider.ts index d0378ef8..fba17728 100644 --- a/src/webview/leetCodePreviewProvider.ts +++ b/src/webview/leetCodePreviewProvider.ts @@ -2,7 +2,8 @@ // Licensed under the MIT license. import { commands, ViewColumn } from "vscode"; -import { IProblem } from "../shared"; +import { getLeetCodeEndpoint } from "../commands/plugin"; +import { Endpoint, IProblem } from "../shared"; import { ILeetCodeWebviewOption, LeetCodeWebview } from "./LeetCodeWebview"; import { markdownEngine } from "./markdownEngine"; @@ -73,9 +74,9 @@ class LeetCodePreviewProvider extends LeetCodeWebview { const { title, url, category, difficulty, likes, dislikes, body } = this.description; const head: string = markdownEngine.render(`# [${title}](${url})`); const info: string = markdownEngine.render([ - `| Category | Difficulty | Likes | Dislikes | [Discuss](${url.replace("/description/", "/discuss/?currentPage=1&orderBy=most_votes&query=")}) |`, - `| :------: | :--------: | :---: | :------: | :-----: |`, - `| ${category} | ${difficulty} | ${likes} | ${dislikes} | -- |`, + `| Category | Difficulty | Likes | Dislikes |`, + `| :------: | :--------: | :---: | :------: |`, + `| ${category} | ${difficulty} | ${likes} | ${dislikes} |`, ].join("\n")); const tags: string = [ `<details>`, @@ -97,6 +98,7 @@ class LeetCodePreviewProvider extends LeetCodeWebview { ), `</details>`, ].join("\n"); + const links: string = markdownEngine.render(`[Discussion](${this.getDiscussionLink(url)}) | [Solution](${this.getSolutionLink(url)})`); return ` <!DOCTYPE html> <html> @@ -114,6 +116,8 @@ class LeetCodePreviewProvider extends LeetCodeWebview { ${tags} ${companies} ${body} + <hr /> + ${links} ${!this.sideMode ? button.element : ""} <script> const vscode = acquireVsCodeApi(); @@ -172,6 +176,21 @@ class LeetCodePreviewProvider extends LeetCodeWebview { body: body.join("\n").replace(/<pre>[\r\n]*([^]+?)[\r\n]*<\/pre>/g, "<pre><code>$1</code></pre>"), }; } + + private getDiscussionLink(url: string): string { + const endPoint: string = getLeetCodeEndpoint(); + if (endPoint === Endpoint.LeetCodeCN) { + return url.replace("/description/", "/comments/"); + } else if (endPoint === Endpoint.LeetCode) { + return url.replace("/description/", "/discuss/?currentPage=1&orderBy=most_votes&query="); + } + + return "https://leetcode.com"; + } + + private getSolutionLink(url: string): string { + return url.replace("/description/", "/solution/"); + } } interface IDescription { From e59e2913987bf0e08cd20e4a028dd916733d3ba7 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Mon, 7 Oct 2019 19:49:17 +0800 Subject: [PATCH 40/92] chore: Prepare for 0.15.6 (#453) --- CHANGELOG.md | 7 +++++++ package-lock.json | 8 ++++---- package.json | 4 ++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f2f9985..e251b450 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to the "leetcode" extension will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +## [0.15.6] +### Added +- Add a link to the solution page [#424](https://github.com/jdneo/vscode-leetcode/issues/424) + +### Fixed +[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.6+is%3Aclosed+label%3Abug) + ## [0.15.5] ### Added - Add a link to the discussion page [#420](https://github.com/jdneo/vscode-leetcode/issues/420) diff --git a/package-lock.json b/package-lock.json index 47f8dab5..fdf4e4bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "vscode-leetcode", - "version": "0.15.5", + "version": "0.15.6", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1786,9 +1786,9 @@ } }, "vsc-leetcode-cli": { - "version": "2.6.13", - "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.13.tgz", - "integrity": "sha512-otwxXXBDPGJX2IkIbTTsXdwA9yYMxdFWqmPwtSwXfNrN1oAturxfXS61T/1vUkcwAPMMpoFtXdGr99pnSVyYtw==", + "version": "2.6.15", + "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.15.tgz", + "integrity": "sha512-nIZi2xkJyKz5yFJwxbJLZBfYf07sdO/LY0dEZ8dgr2tiiOkPAOjk1wB+P20eUOf2U8185g9YxpREbwg3G6bDrw==", "requires": { "ansi-styles": "3.2.1", "cheerio": "0.20.0", diff --git a/package.json b/package.json index bbedd4ab..8df43748 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-leetcode", "displayName": "LeetCode", "description": "Solve LeetCode problems in VS Code", - "version": "0.15.5", + "version": "0.15.6", "author": "Sheng Chen", "publisher": "shengchen", "license": "MIT", @@ -683,6 +683,6 @@ "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", "unescape-js": "^1.1.1", - "vsc-leetcode-cli": "2.6.13" + "vsc-leetcode-cli": "2.6.15" } } From b08b79ba6fdceced86d86ba049758e7b151361a0 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Wed, 9 Oct 2019 20:44:54 +0800 Subject: [PATCH 41/92] chore: Prepare for 0.15.7 (#458) --- CHANGELOG.md | 4 ++++ package-lock.json | 8 ++++---- package.json | 4 ++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e251b450..0f764830 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to the "leetcode" extension will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +## [0.15.7] +### Fixed +[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.7+is%3Aclosed+label%3Abug) + ## [0.15.6] ### Added - Add a link to the solution page [#424](https://github.com/jdneo/vscode-leetcode/issues/424) diff --git a/package-lock.json b/package-lock.json index fdf4e4bd..90ee4809 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "vscode-leetcode", - "version": "0.15.6", + "version": "0.15.7", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1786,9 +1786,9 @@ } }, "vsc-leetcode-cli": { - "version": "2.6.15", - "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.15.tgz", - "integrity": "sha512-nIZi2xkJyKz5yFJwxbJLZBfYf07sdO/LY0dEZ8dgr2tiiOkPAOjk1wB+P20eUOf2U8185g9YxpREbwg3G6bDrw==", + "version": "2.6.16", + "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.16.tgz", + "integrity": "sha512-RvSrKJMgh08OYZDcJJDOkjMLtoWGbc5f1Kx8PQYwyiLdnJjOGG0wVc4gPyQAJCT1Xgd31wv04xIZmBSXbcvMEg==", "requires": { "ansi-styles": "3.2.1", "cheerio": "0.20.0", diff --git a/package.json b/package.json index 8df43748..91bc6e59 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-leetcode", "displayName": "LeetCode", "description": "Solve LeetCode problems in VS Code", - "version": "0.15.6", + "version": "0.15.7", "author": "Sheng Chen", "publisher": "shengchen", "license": "MIT", @@ -683,6 +683,6 @@ "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", "unescape-js": "^1.1.1", - "vsc-leetcode-cli": "2.6.15" + "vsc-leetcode-cli": "2.6.16" } } From eb77cd97f295c465a9e8b0f23355d9e3e16172bb Mon Sep 17 00:00:00 2001 From: Gerry Gao <hologerry@gmail.com> Date: Fri, 11 Oct 2019 09:35:45 +0800 Subject: [PATCH 42/92] ui: replace icons in extension with vscode icons (#461) --- resources/dark/endpoint.svg | 9 +++------ resources/dark/refresh.svg | 10 ++++------ resources/dark/search.svg | 9 +++------ resources/dark/signin.svg | 10 +++------- resources/light/endpoint.svg | 9 +++------ resources/light/refresh.svg | 10 ++++------ resources/light/search.svg | 9 +++------ resources/light/signin.svg | 10 +++------- 8 files changed, 26 insertions(+), 50 deletions(-) diff --git a/resources/dark/endpoint.svg b/resources/dark/endpoint.svg index c9b4d058..1ff60a53 100644 --- a/resources/dark/endpoint.svg +++ b/resources/dark/endpoint.svg @@ -1,6 +1,3 @@ -<?xml version="1.0"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 426.667 426.667" style="enable-background:new 0 0 426.667 426.667;" xml:space="preserve" width="512px" height="512px" class=""><g><g> - <g> - <path d="M213.333,0C95.467,0,0,95.467,0,213.333s95.467,213.333,213.333,213.333S426.667,331.2,426.667,213.333S331.2,0,213.333,0 z M192,382.507c-84.16-10.453-149.333-82.133-149.333-169.173c0-13.12,1.6-25.92,4.48-38.187l102.187,102.187v21.333 c0,23.573,19.093,42.667,42.667,42.667V382.507z M339.093,328.427c-5.44-17.28-21.44-29.76-40.427-29.76h-21.333v-64 c0-11.733-9.6-21.333-21.333-21.333H128v-42.667h42.667c11.733,0,21.333-9.6,21.333-21.333v-42.667h42.667 c23.573,0,42.667-19.093,42.667-42.667v-8.853C339.84,80.427,384,141.653,384,213.333 C384,257.707,366.933,298.027,339.093,328.427z" data-original="#000000" class="active-path" data-old_color="#c8c8c8" fill="#c8c8c8"/> - </g> -</g></g> </svg> +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M8.5 1C9.78557 1 11.0423 1.38123 12.1112 2.09546C13.1801 2.80969 14.0132 3.82483 14.5052 5.01257C14.8972 5.95898 15.0586 6.98108 14.9811 7.99524C14.8962 9.10645 14.5267 10.1801 13.9046 11.1112C13.1903 12.1802 12.1752 13.0133 10.9874 13.5052C9.79973 13.9972 8.4928 14.126 7.23192 13.8751C5.97104 13.6243 4.81285 13.0052 3.90381 12.0962C2.99476 11.1871 2.3757 10.0289 2.12489 8.76807C1.8741 7.5072 2.00282 6.20032 2.49478 5.01257C2.98675 3.82483 3.81987 2.80969 4.88879 2.09546C5.95772 1.38123 7.21443 1 8.5 1ZM13.394 5C12.7527 3.75281 11.6613 2.79626 10.3412 2.32373C10.7845 3.16357 11.106 4.0647 11.294 5H13.394ZM13.9765 7.99524C13.9918 7.83081 13.9997 7.66553 14 7.5C13.999 6.99255 13.9273 6.48767 13.787 6H11.445C11.477 6.33105 11.5 6.66406 11.5 7C11.4997 7.12598 11.4971 7.25195 11.4921 7.37769C11.4917 7.38623 11.4914 7.39417 11.4911 7.40271C11.4834 7.58289 11.4709 7.76331 11.4536 7.94263C11.4192 8.29749 11.366 8.65039 11.294 9H13.787C13.8815 8.67139 13.9449 8.33496 13.9765 7.99524ZM10.4408 7.99524C10.4428 7.97815 10.4447 7.96106 10.4466 7.94397C10.4808 7.63074 10.4987 7.31567 10.5 7C10.4933 6.66553 10.4679 6.33167 10.424 6H6.576C6.53207 6.33167 6.5067 6.66553 6.5 7C6.50274 7.67334 6.5809 8.34412 6.733 9H10.267C10.3439 8.66833 10.4019 8.33289 10.4408 7.99524ZM10.249 5C10.1607 4.60352 10.0465 4.21399 9.90597 3.83447C9.67117 3.2019 9.36551 2.59644 8.994 2.03003C8.83 2.01599 8.666 2 8.5 2C8.39551 2 8.29182 2.00635 8.18843 2.01453C8.12755 2.01929 8.06677 2.02478 8.00599 2.03003L8 2.03918C7.40887 2.94299 6.98573 3.9458 6.75101 5H10.249ZM5.70601 5C5.89779 4.0647 6.22313 3.16174 6.672 2.31897C5.34599 2.78979 4.24946 3.74866 3.606 5H5.70601ZM3.213 6C3.07269 6.48767 3.00101 6.99255 3 7.5C3.00101 8.00745 3.07269 8.51233 3.213 9H5.70601C5.57043 8.34192 5.50142 7.67188 5.5 7C5.5 6.66406 5.52301 6.33105 5.55501 6H3.213ZM5.96701 10H3.60701C3.98501 10.7384 4.52472 11.382 5.18594 11.8829C5.84715 12.3838 6.61285 12.729 7.42601 12.8931C6.78598 12.0142 6.2932 11.0371 5.96701 10ZM8.5 12.644C9.13943 11.8531 9.63927 10.959 9.97799 10H7.022C7.36075 10.959 7.86058 11.8531 8.5 12.644ZM11.033 10C10.7068 11.0371 10.214 12.0142 9.574 12.8931C10.3872 12.729 11.1528 12.3838 11.8141 11.8829C12.4753 11.382 13.015 10.7384 13.393 10H11.033Z" fill="#C5C5C5"/> +</svg> diff --git a/resources/dark/refresh.svg b/resources/dark/refresh.svg index fbc960f4..0442b2af 100644 --- a/resources/dark/refresh.svg +++ b/resources/dark/refresh.svg @@ -1,6 +1,4 @@ -<?xml version="1.0"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 341.333 341.333" style="enable-background:new 0 0 341.333 341.333;" xml:space="preserve" width="512px" height="512px"><g><g> - <g> - <path d="M341.227,149.333V0l-50.133,50.133C260.267,19.2,217.707,0,170.56,0C76.267,0,0.107,76.373,0.107,170.667 s76.16,170.667,170.453,170.667c79.467,0,146.027-54.4,164.907-128h-44.373c-17.6,49.707-64.747,85.333-120.533,85.333 c-70.72,0-128-57.28-128-128s57.28-128,128-128c35.307,0,66.987,14.72,90.133,37.867l-68.8,68.8H341.227z" data-original="#000000" class="active-path" data-old_color="#c8c8c8" fill="#c8c8c8"/> - </g> -</g></g> </svg> +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M5.56253 2.5158C3.46348 3.45013 2 5.55417 2 8.00002C2 11.3137 4.68629 14 8 14C11.3137 14 14 11.3137 14 8.00002C14 5.32522 12.2497 3.05922 9.83199 2.28485L9.52968 3.23835C11.5429 3.88457 13 5.77213 13 8.00002C13 10.7614 10.7614 13 8 13C5.23858 13 3 10.7614 3 8.00002C3 6.31107 3.83742 4.8177 5.11969 3.91248L5.56253 2.5158Z" fill="#C5C5C5"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M5 3H2V2H5.5L6 2.5V6H5V3Z" fill="#C5C5C5"/> +</svg> diff --git a/resources/dark/search.svg b/resources/dark/search.svg index 6cd41c04..e329b2d7 100644 --- a/resources/dark/search.svg +++ b/resources/dark/search.svg @@ -1,6 +1,3 @@ -<?xml version="1.0"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" width="512px" height="512px" viewBox="0 0 446.25 446.25" style="enable-background:new 0 0 446.25 446.25;" xml:space="preserve" class=""><g><g> - <g id="search"> - <path d="M318.75,280.5h-20.4l-7.649-7.65c25.5-28.05,40.8-66.3,40.8-107.1C331.5,73.95,257.55,0,165.75,0S0,73.95,0,165.75 S73.95,331.5,165.75,331.5c40.8,0,79.05-15.3,107.1-40.8l7.65,7.649v20.4L408,446.25L446.25,408L318.75,280.5z M165.75,280.5 C102,280.5,51,229.5,51,165.75S102,51,165.75,51S280.5,102,280.5,165.75S229.5,280.5,165.75,280.5z" data-original="#000000" class="active-path" data-old_color="#c8c8c8" fill="#c8c8c8"/> - </g> -</g></g> </svg> +<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M15.25 1.02546e-06C13.6605 -0.000791296 12.1046 0.457574 10.7694 1.32007C9.43422 2.18256 8.37657 3.4124 7.72375 4.8617C7.07094 6.31099 6.85077 7.91801 7.0896 9.4895C7.32843 11.061 8.01604 12.5301 9.06995 13.72L1 22.88L2.12 23.88L10.17 14.76C11.2055 15.5693 12.4192 16.1196 13.7103 16.365C15.0014 16.6104 16.3325 16.5437 17.5927 16.1707C18.8528 15.7976 20.0055 15.1288 20.955 14.2201C21.9044 13.3114 22.623 12.1891 23.0509 10.9465C23.4789 9.70396 23.6038 8.37703 23.4153 7.07642C23.2267 5.77581 22.7302 4.53915 21.967 3.46924C21.2039 2.39933 20.1962 1.52711 19.0278 0.925416C17.8595 0.323719 16.5642 0.00991516 15.25 0.0100108V1.02546e-06ZM15.25 15C13.915 15 12.6099 14.6041 11.4999 13.8624C10.3898 13.1207 9.52469 12.0665 9.01379 10.8331C8.5029 9.59973 8.36919 8.24248 8.62964 6.93311C8.89009 5.62373 9.53305 4.42106 10.4771 3.47705C11.4211 2.53305 12.6237 1.89009 13.9331 1.62964C15.2425 1.36919 16.5997 1.5029 17.8331 2.01379C19.0665 2.52469 20.1207 3.38985 20.8624 4.49988C21.6041 5.60991 22 6.91498 22 8.25C22 10.0402 21.2888 11.7571 20.0229 13.023C18.7571 14.2888 17.0402 15 15.25 15V15Z" fill="#C5C5C5"/> +</svg> diff --git a/resources/dark/signin.svg b/resources/dark/signin.svg index 4c115bc6..2b96bb18 100644 --- a/resources/dark/signin.svg +++ b/resources/dark/signin.svg @@ -1,7 +1,3 @@ -<?xml version="1.0"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" width="512px" height="512px" viewBox="0 0 438.542 438.542" style="enable-background:new 0 0 438.542 438.542;" xml:space="preserve" class=""><g><g> - <g> - <path d="M414.41,60.676c-16.084-16.083-35.446-24.125-58.102-24.125h-91.357c-2.478,0-4.429,0.614-5.853,1.855 c-1.431,1.237-2.382,3.093-2.854,5.568c-0.479,2.474-0.76,4.709-0.853,6.707c-0.096,1.997-0.051,4.521,0.144,7.565 c0.186,3.046,0.281,4.949,0.281,5.713c0.571,1.524,0.767,2.81,0.571,3.855c-0.191,1.043,0.476,1.903,1.998,2.568 c1.52,0.666,2.279,1.191,2.279,1.569c0,0.378,1.096,0.662,3.285,0.855c2.19,0.192,3.289,0.284,3.289,0.284h3.713h3.142h82.228 c12.56,0,23.312,4.471,32.258,13.422c8.952,8.945,13.422,19.696,13.422,32.261V319.77c0,12.563-4.47,23.312-13.422,32.258 c-8.945,8.948-19.698,13.421-32.258,13.421h-91.357c-2.478,0-4.436,0.62-5.853,1.855c-1.43,1.242-2.382,3.094-2.857,5.564 c-0.476,2.478-0.763,4.716-0.855,6.714c-0.092,1.995-0.051,4.518,0.144,7.563c0.195,3.046,0.288,4.948,0.288,5.708 c0,2.478,0.896,4.613,2.707,6.427c1.81,1.807,3.949,2.71,6.427,2.71h91.357c22.648,0,42.018-8.042,58.095-24.133 c16.084-16.077,24.126-35.446,24.126-58.095V118.769C438.533,96.118,430.491,76.754,414.41,60.676z" data-original="#000000" class="active-path" data-old_color="#c8c8c8" fill="#c8c8c8"/> - <path d="M338.047,219.27c0-4.948-1.813-9.233-5.427-12.85L177.302,51.101c-3.616-3.612-7.895-5.424-12.847-5.424 c-4.952,0-9.233,1.812-12.85,5.424c-3.615,3.617-5.424,7.904-5.424,12.85v82.226H18.274c-4.952,0-9.235,1.812-12.851,5.424 C1.807,155.219,0,159.503,0,164.452v109.635c0,4.949,1.807,9.233,5.424,12.848c3.619,3.61,7.902,5.427,12.851,5.427h127.906 v82.225c0,4.945,1.809,9.233,5.424,12.847c3.621,3.617,7.902,5.428,12.85,5.428c4.949,0,9.231-1.811,12.847-5.428l155.318-155.312 C336.234,228.501,338.047,224.216,338.047,219.27z" data-original="#000000" class="active-path" data-old_color="#c8c8c8" fill="#c8c8c8"/> - </g> -</g></g> </svg> +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M11.02 3.77L11.03 3.76L12.02 4.75V2.5L11.52 2H2.52001L2.01001 2.5V2.99301L2 3.00003V13.29L2.36 13.75L7.36 15.47L8 15V14H11.52L12.02 13.5V11.25L11.02 12.25V13H8V4.71003L7.67 4.25003L4.03619 3H7.01001H11.02V3.77ZM7 14.28L3 12.94V3.72003L7 5.06003V14.28ZM10.09 7.53005H15.06V8.53005H10.13L11.72 10.1301L11.01 10.8301L8.53998 8.37005V7.66005L11.03 5.18005L11.73 5.88005L10.09 7.53005Z" fill="#C5C5C5"/> +</svg> diff --git a/resources/light/endpoint.svg b/resources/light/endpoint.svg index 949fcd3e..91ad34f8 100644 --- a/resources/light/endpoint.svg +++ b/resources/light/endpoint.svg @@ -1,6 +1,3 @@ -<?xml version="1.0"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 426.667 426.667" style="enable-background:new 0 0 426.667 426.667;" xml:space="preserve" width="512px" height="512px" class=""><g><g> - <g> - <path d="M213.333,0C95.467,0,0,95.467,0,213.333s95.467,213.333,213.333,213.333S426.667,331.2,426.667,213.333S331.2,0,213.333,0 z M192,382.507c-84.16-10.453-149.333-82.133-149.333-169.173c0-13.12,1.6-25.92,4.48-38.187l102.187,102.187v21.333 c0,23.573,19.093,42.667,42.667,42.667V382.507z M339.093,328.427c-5.44-17.28-21.44-29.76-40.427-29.76h-21.333v-64 c0-11.733-9.6-21.333-21.333-21.333H128v-42.667h42.667c11.733,0,21.333-9.6,21.333-21.333v-42.667h42.667 c23.573,0,42.667-19.093,42.667-42.667v-8.853C339.84,80.427,384,141.653,384,213.333 C384,257.707,366.933,298.027,339.093,328.427z" data-original="#000000" class="active-path" fill="#000000"/> - </g> -</g></g> </svg> +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M8.5 1C9.78557 1 11.0423 1.38123 12.1112 2.09546C13.1801 2.80969 14.0132 3.82483 14.5052 5.01257C14.8972 5.95898 15.0586 6.98108 14.9811 7.99524C14.8962 9.10645 14.5267 10.1801 13.9046 11.1112C13.1903 12.1802 12.1752 13.0133 10.9874 13.5052C9.79973 13.9972 8.4928 14.126 7.23192 13.8751C5.97104 13.6243 4.81285 13.0052 3.90381 12.0962C2.99476 11.1871 2.3757 10.0289 2.12489 8.76807C1.8741 7.5072 2.00282 6.20032 2.49478 5.01257C2.98675 3.82483 3.81987 2.80969 4.88879 2.09546C5.95772 1.38123 7.21443 1 8.5 1ZM13.394 5C12.7527 3.75281 11.6613 2.79626 10.3412 2.32373C10.7845 3.16357 11.106 4.0647 11.294 5H13.394ZM13.9765 7.99524C13.9918 7.83081 13.9997 7.66553 14 7.5C13.999 6.99255 13.9273 6.48767 13.787 6H11.445C11.477 6.33105 11.5 6.66406 11.5 7C11.4997 7.12598 11.4971 7.25195 11.4921 7.37769C11.4917 7.38623 11.4914 7.39417 11.4911 7.40271C11.4834 7.58289 11.4709 7.76331 11.4536 7.94263C11.4192 8.29749 11.366 8.65039 11.294 9H13.787C13.8815 8.67139 13.9449 8.33496 13.9765 7.99524ZM10.4408 7.99524C10.4428 7.97815 10.4447 7.96106 10.4466 7.94397C10.4808 7.63074 10.4987 7.31567 10.5 7C10.4933 6.66553 10.4679 6.33167 10.424 6H6.576C6.53207 6.33167 6.5067 6.66553 6.5 7C6.50274 7.67334 6.5809 8.34412 6.733 9H10.267C10.3439 8.66833 10.4019 8.33289 10.4408 7.99524ZM10.249 5C10.1607 4.60352 10.0465 4.21399 9.90597 3.83447C9.67117 3.2019 9.36551 2.59644 8.994 2.03003C8.83 2.01599 8.666 2 8.5 2C8.39551 2 8.29182 2.00635 8.18843 2.01453C8.12755 2.01929 8.06677 2.02478 8.00599 2.03003L8 2.03918C7.40887 2.94299 6.98573 3.9458 6.75101 5H10.249ZM5.70601 5C5.89779 4.0647 6.22313 3.16174 6.672 2.31897C5.34599 2.78979 4.24946 3.74866 3.606 5H5.70601ZM3.213 6C3.07269 6.48767 3.00101 6.99255 3 7.5C3.00101 8.00745 3.07269 8.51233 3.213 9H5.70601C5.57043 8.34192 5.50142 7.67188 5.5 7C5.5 6.66406 5.52301 6.33105 5.55501 6H3.213ZM5.96701 10H3.60701C3.98501 10.7384 4.52472 11.382 5.18594 11.8829C5.84715 12.3838 6.61285 12.729 7.42601 12.8931C6.78598 12.0142 6.2932 11.0371 5.96701 10ZM8.5 12.644C9.13943 11.8531 9.63927 10.959 9.97799 10H7.022C7.36075 10.959 7.86058 11.8531 8.5 12.644ZM11.033 10C10.7068 11.0371 10.214 12.0142 9.574 12.8931C10.3872 12.729 11.1528 12.3838 11.8141 11.8829C12.4753 11.382 13.015 10.7384 13.393 10H11.033Z" fill="#424242"/> +</svg> diff --git a/resources/light/refresh.svg b/resources/light/refresh.svg index e1969cd4..8ade09df 100644 --- a/resources/light/refresh.svg +++ b/resources/light/refresh.svg @@ -1,6 +1,4 @@ -<?xml version="1.0"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 341.333 341.333" style="enable-background:new 0 0 341.333 341.333;" xml:space="preserve" width="512px" height="512px" class=""><g><g> - <g> - <path d="M341.227,149.333V0l-50.133,50.133C260.267,19.2,217.707,0,170.56,0C76.267,0,0.107,76.373,0.107,170.667 s76.16,170.667,170.453,170.667c79.467,0,146.027-54.4,164.907-128h-44.373c-17.6,49.707-64.747,85.333-120.533,85.333 c-70.72,0-128-57.28-128-128s57.28-128,128-128c35.307,0,66.987,14.72,90.133,37.867l-68.8,68.8H341.227z" data-original="#000000" class="active-path" data-old_color="#C8C8C8" fill="#000000"/> - </g> -</g></g> </svg> +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M5.56253 2.5158C3.46348 3.45013 2 5.55417 2 8.00002C2 11.3137 4.68629 14 8 14C11.3137 14 14 11.3137 14 8.00002C14 5.32522 12.2497 3.05922 9.83199 2.28485L9.52968 3.23835C11.5429 3.88457 13 5.77213 13 8.00002C13 10.7614 10.7614 13 8 13C5.23858 13 3 10.7614 3 8.00002C3 6.31107 3.83742 4.8177 5.11969 3.91248L5.56253 2.5158Z" fill="#424242"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M5 3H2V2H5.5L6 2.5V6H5V3Z" fill="#424242"/> +</svg> diff --git a/resources/light/search.svg b/resources/light/search.svg index 48ffa86d..fa629e10 100644 --- a/resources/light/search.svg +++ b/resources/light/search.svg @@ -1,6 +1,3 @@ -<?xml version="1.0"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" width="512px" height="512px" viewBox="0 0 446.25 446.25" style="enable-background:new 0 0 446.25 446.25;" xml:space="preserve" class=""><g><g> - <g id="search"> - <path d="M318.75,280.5h-20.4l-7.649-7.65c25.5-28.05,40.8-66.3,40.8-107.1C331.5,73.95,257.55,0,165.75,0S0,73.95,0,165.75 S73.95,331.5,165.75,331.5c40.8,0,79.05-15.3,107.1-40.8l7.65,7.649v20.4L408,446.25L446.25,408L318.75,280.5z M165.75,280.5 C102,280.5,51,229.5,51,165.75S102,51,165.75,51S280.5,102,280.5,165.75S229.5,280.5,165.75,280.5z" data-original="#000000" class="active-path" fill="#000000"/> - </g> -</g></g> </svg> +<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M15.25 1.02546e-06C13.6605 -0.000791296 12.1046 0.457574 10.7694 1.32007C9.43422 2.18256 8.37657 3.4124 7.72375 4.8617C7.07094 6.31099 6.85077 7.91801 7.0896 9.4895C7.32843 11.061 8.01604 12.5301 9.06995 13.72L1 22.88L2.12 23.88L10.17 14.76C11.2055 15.5693 12.4192 16.1196 13.7103 16.365C15.0014 16.6104 16.3325 16.5437 17.5927 16.1707C18.8528 15.7976 20.0055 15.1288 20.955 14.2201C21.9044 13.3114 22.623 12.1891 23.0509 10.9465C23.4789 9.70396 23.6038 8.37703 23.4153 7.07642C23.2267 5.77581 22.7302 4.53915 21.967 3.46924C21.2039 2.39933 20.1962 1.52711 19.0278 0.925416C17.8595 0.323719 16.5642 0.00991516 15.25 0.0100108V1.02546e-06ZM15.25 15C13.915 15 12.6099 14.6041 11.4999 13.8624C10.3898 13.1207 9.52469 12.0665 9.01379 10.8331C8.5029 9.59973 8.36919 8.24248 8.62964 6.93311C8.89009 5.62373 9.53305 4.42106 10.4771 3.47705C11.4211 2.53305 12.6237 1.89009 13.9331 1.62964C15.2425 1.36919 16.5997 1.5029 17.8331 2.01379C19.0665 2.52469 20.1207 3.38985 20.8624 4.49988C21.6041 5.60991 22 6.91498 22 8.25C22 10.0402 21.2888 11.7571 20.0229 13.023C18.7571 14.2888 17.0402 15 15.25 15V15Z" fill="#424242"/> +</svg> diff --git a/resources/light/signin.svg b/resources/light/signin.svg index ab5fe2df..c7033f31 100644 --- a/resources/light/signin.svg +++ b/resources/light/signin.svg @@ -1,7 +1,3 @@ -<?xml version="1.0"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" width="512px" height="512px" viewBox="0 0 438.542 438.542" style="enable-background:new 0 0 438.542 438.542;" xml:space="preserve"><g><g> - <g> - <path d="M414.41,60.676c-16.084-16.083-35.446-24.125-58.102-24.125h-91.357c-2.478,0-4.429,0.614-5.853,1.855 c-1.431,1.237-2.382,3.093-2.854,5.568c-0.479,2.474-0.76,4.709-0.853,6.707c-0.096,1.997-0.051,4.521,0.144,7.565 c0.186,3.046,0.281,4.949,0.281,5.713c0.571,1.524,0.767,2.81,0.571,3.855c-0.191,1.043,0.476,1.903,1.998,2.568 c1.52,0.666,2.279,1.191,2.279,1.569c0,0.378,1.096,0.662,3.285,0.855c2.19,0.192,3.289,0.284,3.289,0.284h3.713h3.142h82.228 c12.56,0,23.312,4.471,32.258,13.422c8.952,8.945,13.422,19.696,13.422,32.261V319.77c0,12.563-4.47,23.312-13.422,32.258 c-8.945,8.948-19.698,13.421-32.258,13.421h-91.357c-2.478,0-4.436,0.62-5.853,1.855c-1.43,1.242-2.382,3.094-2.857,5.564 c-0.476,2.478-0.763,4.716-0.855,6.714c-0.092,1.995-0.051,4.518,0.144,7.563c0.195,3.046,0.288,4.948,0.288,5.708 c0,2.478,0.896,4.613,2.707,6.427c1.81,1.807,3.949,2.71,6.427,2.71h91.357c22.648,0,42.018-8.042,58.095-24.133 c16.084-16.077,24.126-35.446,24.126-58.095V118.769C438.533,96.118,430.491,76.754,414.41,60.676z" data-original="#000000" class="active-path" fill="#000000"/> - <path d="M338.047,219.27c0-4.948-1.813-9.233-5.427-12.85L177.302,51.101c-3.616-3.612-7.895-5.424-12.847-5.424 c-4.952,0-9.233,1.812-12.85,5.424c-3.615,3.617-5.424,7.904-5.424,12.85v82.226H18.274c-4.952,0-9.235,1.812-12.851,5.424 C1.807,155.219,0,159.503,0,164.452v109.635c0,4.949,1.807,9.233,5.424,12.848c3.619,3.61,7.902,5.427,12.851,5.427h127.906 v82.225c0,4.945,1.809,9.233,5.424,12.847c3.621,3.617,7.902,5.428,12.85,5.428c4.949,0,9.231-1.811,12.847-5.428l155.318-155.312 C336.234,228.501,338.047,224.216,338.047,219.27z" data-original="#000000" class="active-path" fill="#000000"/> - </g> -</g></g> </svg> +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M11.02 3.77L11.03 3.76L12.02 4.75V2.5L11.52 2H2.52001L2.01001 2.5V2.99301L2 3.00003V13.29L2.36 13.75L7.36 15.47L8 15V14H11.52L12.02 13.5V11.25L11.02 12.25V13H8V4.71003L7.67 4.25003L4.03619 3H7.01001H11.02V3.77ZM7 14.28L3 12.94V3.72003L7 5.06003V14.28ZM10.09 7.53005H15.06V8.53005H10.13L11.72 10.1301L11.01 10.8301L8.53998 8.37005V7.66005L11.03 5.18005L11.73 5.88005L10.09 7.53005Z" fill="#424242"/> +</svg> From 4979a0fbc3d1f5f1cd2c8caa20d3baa191f5aec4 Mon Sep 17 00:00:00 2001 From: yihong <zouzou0208@gmail.com> Date: Thu, 5 Dec 2019 10:16:13 +0800 Subject: [PATCH 43/92] feat: add leetcode.signinByCookie but simple change (#487) --- README.md | 3 ++- docs/README_zh-CN.md | 3 ++- package.json | 8 +++++++- src/extension.ts | 1 + src/leetCodeManager.ts | 26 +++++++++++++++----------- 5 files changed, 27 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 67fb4df0..740f9913 100644 --- a/README.md +++ b/README.md @@ -40,8 +40,9 @@ - Simply click `Sign in to LeetCode` in the `LeetCode Explorer` will let you **sign in** with your LeetCode account. -- You can also use the following command to sign in/out: +- You can also use the following command to sign in/sign in (by cookie)/out: - **LeetCode: Sign in** + - **LeetCode: Sign in (by cookie)** - **LeetCode: Sign out** --- diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index 4c9348a1..f7570685 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -40,8 +40,9 @@ - 点击 `LeetCode Explorer` 中的 `Sign in to LeetCode` 即可登入。 -- 你也可以使用下来命令登入或登出: +- 你也可以使用下来命令登入或利用cookie登入或登出: - **LeetCode: Sign in** + - **LeetCode: Sign in (by cookie)** - **LeetCode: Sign out** --- diff --git a/package.json b/package.json index 91bc6e59..149059de 100644 --- a/package.json +++ b/package.json @@ -38,11 +38,17 @@ "onCommand:leetcode.testSolution", "onCommand:leetcode.submitSolution", "onCommand:leetcode.switchDefaultLanguage", + "onCommand:leetcode.signinByCookie", "onView:leetCodeExplorer" ], "main": "./out/src/extension", "contributes": { "commands": [ + { + "command": "leetcode.signinByCookie", + "title": "Sign In by Cookie", + "category": "LeetCode" + }, { "command": "leetcode.deleteCache", "title": "Delete Cache", @@ -683,6 +689,6 @@ "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", "unescape-js": "^1.1.1", - "vsc-leetcode-cli": "2.6.16" + "vsc-leetcode-cli": "2.6.17" } } diff --git a/src/extension.ts b/src/extension.ts index 9bb3ad41..45de4a70 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -51,6 +51,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<void> vscode.commands.registerCommand("leetcode.deleteCache", () => cache.deleteCache()), vscode.commands.registerCommand("leetcode.toggleLeetCodeCn", () => plugin.switchEndpoint()), vscode.commands.registerCommand("leetcode.signin", () => leetCodeManager.signIn()), + vscode.commands.registerCommand("leetcode.signinByCookie", () => leetCodeManager.signIn(true)), vscode.commands.registerCommand("leetcode.signout", () => leetCodeManager.signOut()), vscode.commands.registerCommand("leetcode.manageSessions", () => session.manageSessions()), vscode.commands.registerCommand("leetcode.previewProblem", (node: LeetCodeNode) => show.previewProblem(node)), diff --git a/src/leetCodeManager.ts b/src/leetCodeManager.ts index 96e3c0b0..0b70080e 100644 --- a/src/leetCodeManager.ts +++ b/src/leetCodeManager.ts @@ -34,7 +34,11 @@ class LeetCodeManager extends EventEmitter { } } - public async signIn(): Promise<void> { + public async signIn(isByCookie: boolean = false): Promise<void> { + const loginArg: string = "-l"; + const cookieArg: string = "-c"; + const commandArg: string = isByCookie ? cookieArg : loginArg; + const inMessage: string = isByCookie ? "sign in by cookie" : "sign in"; try { const userName: string | undefined = await new Promise(async (resolve: (res: string | undefined) => void, reject: (e: Error) => void): Promise<void> => { let result: string = ""; @@ -42,8 +46,8 @@ class LeetCodeManager extends EventEmitter { const leetCodeBinaryPath: string = await leetCodeExecutor.getLeetCodeBinaryPath(); const childProc: cp.ChildProcess = wsl.useWsl() - ? cp.spawn("wsl", [leetCodeExecutor.node, leetCodeBinaryPath, "user", "-l"], { shell: true }) - : cp.spawn(leetCodeExecutor.node, [leetCodeBinaryPath, "user", "-l"], { + ? cp.spawn("wsl", [leetCodeExecutor.node, leetCodeBinaryPath, "user", commandArg], { shell: true }) + : cp.spawn(leetCodeExecutor.node, [leetCodeBinaryPath, "user", commandArg], { shell: true, env: createEnvOption(), }); @@ -67,9 +71,9 @@ class LeetCodeManager extends EventEmitter { } childProc.stdin.write(`${name}\n`); const pwd: string | undefined = await vscode.window.showInputBox({ - prompt: "Enter password.", + prompt: isByCookie ? "Enter cookie" : "Enter password.", password: true, - validateInput: (s: string): string | undefined => s ? undefined : "Password must not be empty", + validateInput: (s: string): string | undefined => s ? undefined : isByCookie ? "Cookie must not be empty" : "Password must not be empty", }); if (!pwd) { childProc.kill(); @@ -78,22 +82,22 @@ class LeetCodeManager extends EventEmitter { childProc.stdin.write(`${pwd}\n`); childProc.stdin.end(); childProc.on("close", () => { - const match: RegExpMatchArray | null = result.match(/(?:.*) Successfully login as (.*)/i); - if (match && match[1]) { - resolve(match[1]); + const match: RegExpMatchArray | null = result.match(/(?:.*) Successfully (login|cookie login) as (.*)/i); + if (match && match[2]) { + resolve(match[2]); } else { - reject(new Error("Failed to sign in.")); + reject(new Error(`Failed to ${inMessage}.`)); } }); }); if (userName) { - vscode.window.showInformationMessage("Successfully signed in."); + vscode.window.showInformationMessage(`Successfully ${inMessage}.`); this.currentUser = userName; this.userStatus = UserStatus.SignedIn; this.emit("statusChanged"); } } catch (error) { - promptForOpenOutputChannel("Failed to sign in. Please open the output channel for details", DialogType.error); + promptForOpenOutputChannel(`Failed to ${inMessage}. Please open the output channel for details`, DialogType.error); } } From cec17d68647e3e18bcfe7ccd5ef58547ab15186c Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sun, 8 Dec 2019 14:26:51 +0800 Subject: [PATCH 44/92] Prepare for next release (#488) --- ACKNOWLEDGEMENTS.md | 2 ++ CHANGELOG.md | 7 +++++++ README.md | 11 +++++++++++ docs/README_zh-CN.md | 11 +++++++++++ package-lock.json | 43 ++++++++++++++++++++++++++++++------------- package.json | 4 ++-- 6 files changed, 63 insertions(+), 15 deletions(-) diff --git a/ACKNOWLEDGEMENTS.md b/ACKNOWLEDGEMENTS.md index 4bc00ba3..8f9ea9ce 100644 --- a/ACKNOWLEDGEMENTS.md +++ b/ACKNOWLEDGEMENTS.md @@ -20,3 +20,5 @@ A big thanks to the following individuals for contributing: - [@SF-Zhou](https://github.com/SF-Zhou) - [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=SF-Zhou) - [@fuafa](https://github.com/fuafa) - [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=fuafa) - [@iFun](https://github.com/iFun) - [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=iFun) +- [@hologerry](https://github.com/hologerry) - [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=hologerry) +- [@yihong0618](https://github.com/yihong0618) - [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=yihong0618) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f764830..78bab546 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to the "leetcode" extension will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +## [0.15.8] +### Added +- Add a new command `Sign In by Cookie` to workaround the issue that [users cannot login to LeetCode](https://github.com/jdneo/vscode-leetcode/issues/478). Please check the [workaround steps](https://github.com/jdneo/vscode-leetcode/tree/master#%EF%B8%8F-attention-%EF%B8%8F--workaround-to-login-to-leetcode-endpoint) for more details! + +### Changed +- Update the explorer icons to be align with the VS Code design [#460](https://github.com/jdneo/vscode-leetcode/issues/460) + ## [0.15.7] ### Fixed [Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.7+is%3Aclosed+label%3Abug) diff --git a/README.md b/README.md index 740f9913..b8aac1e3 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,17 @@ - English Document | [中文文档](https://github.com/jdneo/vscode-leetcode/blob/master/docs/README_zh-CN.md) +## ❗️ Attention ❗️- Workaround to login to LeetCode endpoint +> Note: If you are using `leetcode-cn.com`, you can just ignore this section. + +Recently we observed that [the extension cannot login to leetcode.com endpoint anymore](https://github.com/jdneo/vscode-leetcode/issues/478). The root cause of this issue is that leetcode.com changed its login mechanism and so far there is no ideal way to fix that issue. + +Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround which can somehow mitigate this by using the cookie to login. Here are the steps about what you should do if you want to login to `leetcode.com` endpoint using cookie: +1. Logout from the extension +2. Make sure current active endpoint is `leetcode.com` (Not leetcode-cn.com) +3. Copy the cookie as mentioned [here](https://github.com/jdneo/vscode-leetcode/issues/478#issuecomment-560395305) +4. Trigger the command `Sign In by Cookie` to login through the copied cookie. + ## Requirements - [VS Code 1.30.1+](https://code.visualstudio.com/) - [Node.js 8+](https://nodejs.org) diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index f7570685..81c98fe7 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -22,6 +22,17 @@ - [English Document](https://github.com/jdneo/vscode-leetcode#requirements) | 中文文档 +## ❗️ 注意 ❗️- 无法登录 LeetCode 节点的临时解决办法 +> 注意:如果使用的是 `leetcode-cn.com` 账户,可以跳过此段落。 + +近期我们发现插件出现了[无法登录 leetcode.com 节点的问题](https://github.com/jdneo/vscode-leetcode/issues/478)。原因是因为近期 leetcode.com 改变了登录机制,目前我们暂时没有找到解决该问题的完美解决方案。 + +感谢 [@yihong0618](https://github.com/yihong0618) 提供了一个通过 cookie 登录的临时解决办法。你可以参考如下步骤实现通过 cookie 登录 `leetcode.com`: +1. 登出账户 +2. 确保当前激活的节点为 `leetcode.com` (而非 leetcode-cn.com) +3. 按照这里的方法,[从浏览器中拷贝 cookie](https://github.com/jdneo/vscode-leetcode/issues/478#issuecomment-560395305) +4. 使用命令 `Sign In by Cookie` 登录。 + ## 运行条件 - [VS Code 1.23.0+](https://code.visualstudio.com/) - [Node.js 8+](https://nodejs.org) diff --git a/package-lock.json b/package-lock.json index 90ee4809..09316a21 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "vscode-leetcode", - "version": "0.15.7", + "version": "0.15.8", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -753,13 +753,24 @@ } }, "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "dev": true, "requires": { - "agent-base": "^4.1.0", + "agent-base": "^4.3.0", "debug": "^3.1.0" + }, + "dependencies": { + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + } } }, "i": { @@ -1208,17 +1219,17 @@ } }, "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "optional": true, "requires": { "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", + "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "word-wrap": "~1.2.3" } }, "ora": { @@ -1786,9 +1797,9 @@ } }, "vsc-leetcode-cli": { - "version": "2.6.16", - "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.16.tgz", - "integrity": "sha512-RvSrKJMgh08OYZDcJJDOkjMLtoWGbc5f1Kx8PQYwyiLdnJjOGG0wVc4gPyQAJCT1Xgd31wv04xIZmBSXbcvMEg==", + "version": "2.6.18", + "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.18.tgz", + "integrity": "sha512-46aJPFQfESBO0Jxa1NKaoyLjYqGi0pRhpNfS/q0ernhhWLKaeSsbeP9zMRkbOp3yFt5zkz0jNFWpZDJZLFl3lg==", "requires": { "ansi-styles": "3.2.1", "cheerio": "0.20.0", @@ -1902,6 +1913,12 @@ } } }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "optional": true + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", diff --git a/package.json b/package.json index 149059de..af0f71f0 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-leetcode", "displayName": "LeetCode", "description": "Solve LeetCode problems in VS Code", - "version": "0.15.7", + "version": "0.15.8", "author": "Sheng Chen", "publisher": "shengchen", "license": "MIT", @@ -689,6 +689,6 @@ "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", "unescape-js": "^1.1.1", - "vsc-leetcode-cli": "2.6.17" + "vsc-leetcode-cli": "2.6.18" } } From 9767d72327b7c1129086773cb6ff1af5ebb11434 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sun, 8 Dec 2019 14:57:00 +0800 Subject: [PATCH 45/92] chore: bump cli version to 2.6.19 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 09316a21..029e6498 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1797,9 +1797,9 @@ } }, "vsc-leetcode-cli": { - "version": "2.6.18", - "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.18.tgz", - "integrity": "sha512-46aJPFQfESBO0Jxa1NKaoyLjYqGi0pRhpNfS/q0ernhhWLKaeSsbeP9zMRkbOp3yFt5zkz0jNFWpZDJZLFl3lg==", + "version": "2.6.19", + "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.19.tgz", + "integrity": "sha512-xvfdNe98N/mPR7VLCg1z0J5pn6QBVfI9kPqxFt6tZEIQNMeHrPlG6L5JA0LDJNVSCDWOyDsT77w3spA533XFPg==", "requires": { "ansi-styles": "3.2.1", "cheerio": "0.20.0", diff --git a/package.json b/package.json index af0f71f0..23ab4685 100644 --- a/package.json +++ b/package.json @@ -689,6 +689,6 @@ "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", "unescape-js": "^1.1.1", - "vsc-leetcode-cli": "2.6.18" + "vsc-leetcode-cli": "2.6.19" } } From c20a2d5db7730344b7d7f0155c8461c501cdd287 Mon Sep 17 00:00:00 2001 From: yihong <zouzou0208@gmail.com> Date: Sun, 12 Jan 2020 14:13:10 +0800 Subject: [PATCH 46/92] add thrid party login -- GitHub and LinkedIn (#496) --- README.md | 4 +-- docs/README_zh-CN.md | 2 -- package.json | 8 +---- src/extension.ts | 1 - src/leetCodeManager.ts | 72 +++++++++++++++++++++++++++++++++--------- src/shared.ts | 7 ++++ 6 files changed, 66 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index b8aac1e3..1d8d21f3 100644 --- a/README.md +++ b/README.md @@ -51,11 +51,9 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh - Simply click `Sign in to LeetCode` in the `LeetCode Explorer` will let you **sign in** with your LeetCode account. -- You can also use the following command to sign in/sign in (by cookie)/out: +- You can also use the following command to sign in/out: - **LeetCode: Sign in** - - **LeetCode: Sign in (by cookie)** - **LeetCode: Sign out** - --- ### Switch Endpoint diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index 81c98fe7..23faf30c 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -53,9 +53,7 @@ - 你也可以使用下来命令登入或利用cookie登入或登出: - **LeetCode: Sign in** - - **LeetCode: Sign in (by cookie)** - **LeetCode: Sign out** - --- ### 切换 LeetCode 版本 diff --git a/package.json b/package.json index 23ab4685..743b2803 100644 --- a/package.json +++ b/package.json @@ -38,17 +38,11 @@ "onCommand:leetcode.testSolution", "onCommand:leetcode.submitSolution", "onCommand:leetcode.switchDefaultLanguage", - "onCommand:leetcode.signinByCookie", "onView:leetCodeExplorer" ], "main": "./out/src/extension", "contributes": { "commands": [ - { - "command": "leetcode.signinByCookie", - "title": "Sign In by Cookie", - "category": "LeetCode" - }, { "command": "leetcode.deleteCache", "title": "Delete Cache", @@ -689,6 +683,6 @@ "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", "unescape-js": "^1.1.1", - "vsc-leetcode-cli": "2.6.19" + "vsc-leetcode-cli": "2.6.20" } } diff --git a/src/extension.ts b/src/extension.ts index 45de4a70..9bb3ad41 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -51,7 +51,6 @@ export async function activate(context: vscode.ExtensionContext): Promise<void> vscode.commands.registerCommand("leetcode.deleteCache", () => cache.deleteCache()), vscode.commands.registerCommand("leetcode.toggleLeetCodeCn", () => plugin.switchEndpoint()), vscode.commands.registerCommand("leetcode.signin", () => leetCodeManager.signIn()), - vscode.commands.registerCommand("leetcode.signinByCookie", () => leetCodeManager.signIn(true)), vscode.commands.registerCommand("leetcode.signout", () => leetCodeManager.signOut()), vscode.commands.registerCommand("leetcode.manageSessions", () => session.manageSessions()), vscode.commands.registerCommand("leetcode.previewProblem", (node: LeetCodeNode) => show.previewProblem(node)), diff --git a/src/leetCodeManager.ts b/src/leetCodeManager.ts index 0b70080e..25439048 100644 --- a/src/leetCodeManager.ts +++ b/src/leetCodeManager.ts @@ -6,7 +6,7 @@ import { EventEmitter } from "events"; import * as vscode from "vscode"; import { leetCodeChannel } from "./leetCodeChannel"; import { leetCodeExecutor } from "./leetCodeExecutor"; -import { UserStatus } from "./shared"; +import { IQuickItemEx, loginArgsMapping, UserStatus } from "./shared"; import { createEnvOption } from "./utils/cpUtils"; import { DialogType, promptForOpenOutputChannel } from "./utils/uiUtils"; import * as wsl from "./utils/wslUtils"; @@ -34,14 +34,43 @@ class LeetCodeManager extends EventEmitter { } } - public async signIn(isByCookie: boolean = false): Promise<void> { - const loginArg: string = "-l"; - const cookieArg: string = "-c"; - const commandArg: string = isByCookie ? cookieArg : loginArg; + public async signIn(): Promise<void> { + const picks: Array<IQuickItemEx<string>> = []; + picks.push( + { + label: "LeetCode Account", + detail: "Use LeetCode account to login", + value: "LeetCode", + }, + { + label: "LeetCode Cookie", + detail: "Use LeetCode cookie copied from browser to login", + value: "Cookie", + }, + { + label: "Third-Party: GitHub", + detail: "Use GitHub account to login", + value: "GitHub", + }, + { + label: "Third-Party: LinkedIn", + detail: "Use LinkedIn account to login", + value: "LinkedIn", + }, + ); + const choice: IQuickItemEx<string> | undefined = await vscode.window.showQuickPick(picks); + if (!choice) { + return; + } + const loginMethod: string = choice.value; + const commandArg: string | undefined = loginArgsMapping.get(loginMethod); + if (!commandArg) { + throw new Error(`The login method "${loginMethod}" is not supported.`); + } + const isByCookie: boolean = loginMethod === "Cookie"; const inMessage: string = isByCookie ? "sign in by cookie" : "sign in"; try { const userName: string | undefined = await new Promise(async (resolve: (res: string | undefined) => void, reject: (e: Error) => void): Promise<void> => { - let result: string = ""; const leetCodeBinaryPath: string = await leetCodeExecutor.getLeetCodeBinaryPath(); @@ -52,10 +81,27 @@ class LeetCodeManager extends EventEmitter { env: createEnvOption(), }); - childProc.stdout.on("data", (data: string | Buffer) => { + childProc.stdout.on("data", async (data: string | Buffer) => { data = data.toString(); - result = result.concat(data); leetCodeChannel.append(data); + if (data.includes("twoFactorCode")) { + const twoFactor: string | undefined = await vscode.window.showInputBox({ + prompt: "Enter two-factor code.", + validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "The input must not be empty", + }); + if (!twoFactor) { + childProc.kill(); + return resolve(undefined); + } + childProc.stdin.write(`${twoFactor}\n`); + childProc.stdin.end(); + } else { + const match: RegExpMatchArray | null = data.match(/(?:.*)Successfully .*login as (.*)/i); + if (match && match[1]) { + childProc.stdin.end(); + return resolve(match[1]); + } + } }); childProc.stderr.on("data", (data: string | Buffer) => leetCodeChannel.append(data.toString())); @@ -80,13 +126,9 @@ class LeetCodeManager extends EventEmitter { return resolve(undefined); } childProc.stdin.write(`${pwd}\n`); - childProc.stdin.end(); - childProc.on("close", () => { - const match: RegExpMatchArray | null = result.match(/(?:.*) Successfully (login|cookie login) as (.*)/i); - if (match && match[2]) { - resolve(match[2]); - } else { - reject(new Error(`Failed to ${inMessage}.`)); + childProc.on("close", (code: number) => { + if (code !== 0) { + reject(new Error("Failed to login.")); } }); }); diff --git a/src/shared.ts b/src/shared.ts index 78518454..5f1039e4 100644 --- a/src/shared.ts +++ b/src/shared.ts @@ -12,6 +12,13 @@ export enum UserStatus { SignedOut = 2, } +export const loginArgsMapping: Map<string, string> = new Map([ + ["LeetCode", "-l"], + ["Cookie", "-c"], + ["GitHub", "-g"], + ["LinkedIn", "-i"], +]); + export const languages: string[] = [ "bash", "c", From 9017eda6f6ee2476e0da9318b0485bb7f34f39b0 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sun, 12 Jan 2020 17:15:00 +0800 Subject: [PATCH 47/92] Refine the result parsing logic (#501) --- package-lock.json | 18 +++++++++--------- package.json | 2 +- src/leetCodeManager.ts | 33 +++++++++++++++++---------------- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 029e6498..4c5bf850 100644 --- a/package-lock.json +++ b/package-lock.json @@ -518,9 +518,9 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", - "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.1.tgz", + "integrity": "sha512-Q8t2YZ+0e0pc7NRVj3B4tSQ9rim1oi4Fh46k2xhJ2qOiEwhQfdjyEQddWdj7ZFaKmU+5104vn1qrcjEPWq+bgQ==", "optional": true, "requires": { "esprima": "^3.1.3", @@ -1284,9 +1284,9 @@ "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" }, "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "requires": { "p-try": "^2.0.0" } @@ -1797,9 +1797,9 @@ } }, "vsc-leetcode-cli": { - "version": "2.6.19", - "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.19.tgz", - "integrity": "sha512-xvfdNe98N/mPR7VLCg1z0J5pn6QBVfI9kPqxFt6tZEIQNMeHrPlG6L5JA0LDJNVSCDWOyDsT77w3spA533XFPg==", + "version": "2.6.22", + "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.22.tgz", + "integrity": "sha512-/mKAQtwabtzZfbQlJO9k9qotx7qgtDFZnZ6TkO3NrfUyne2jTXLzDBN+/66fcXUyX5fpxKYBx81icChGRnT7CQ==", "requires": { "ansi-styles": "3.2.1", "cheerio": "0.20.0", diff --git a/package.json b/package.json index 743b2803..315f86eb 100644 --- a/package.json +++ b/package.json @@ -683,6 +683,6 @@ "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", "unescape-js": "^1.1.1", - "vsc-leetcode-cli": "2.6.20" + "vsc-leetcode-cli": "2.6.22" } } diff --git a/src/leetCodeManager.ts b/src/leetCodeManager.ts index 25439048..27a17103 100644 --- a/src/leetCodeManager.ts +++ b/src/leetCodeManager.ts @@ -14,6 +14,8 @@ import * as wsl from "./utils/wslUtils"; class LeetCodeManager extends EventEmitter { private currentUser: string | undefined; private userStatus: UserStatus; + private readonly successRegex: RegExp = /(?:.*)Successfully .*login as (.*)/i; + private readonly failRegex: RegExp = /.*\[ERROR\].*/i; constructor() { super(); @@ -42,11 +44,6 @@ class LeetCodeManager extends EventEmitter { detail: "Use LeetCode account to login", value: "LeetCode", }, - { - label: "LeetCode Cookie", - detail: "Use LeetCode cookie copied from browser to login", - value: "Cookie", - }, { label: "Third-Party: GitHub", detail: "Use GitHub account to login", @@ -57,6 +54,11 @@ class LeetCodeManager extends EventEmitter { detail: "Use LinkedIn account to login", value: "LinkedIn", }, + { + label: "LeetCode Cookie", + detail: "Use LeetCode cookie copied from browser to login", + value: "Cookie", + }, ); const choice: IQuickItemEx<string> | undefined = await vscode.window.showQuickPick(picks); if (!choice) { @@ -87,6 +89,7 @@ class LeetCodeManager extends EventEmitter { if (data.includes("twoFactorCode")) { const twoFactor: string | undefined = await vscode.window.showInputBox({ prompt: "Enter two-factor code.", + ignoreFocusOut: true, validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "The input must not be empty", }); if (!twoFactor) { @@ -94,13 +97,14 @@ class LeetCodeManager extends EventEmitter { return resolve(undefined); } childProc.stdin.write(`${twoFactor}\n`); + } + const successMatch: RegExpMatchArray | null = data.match(this.successRegex); + if (successMatch && successMatch[1]) { childProc.stdin.end(); - } else { - const match: RegExpMatchArray | null = data.match(/(?:.*)Successfully .*login as (.*)/i); - if (match && match[1]) { - childProc.stdin.end(); - return resolve(match[1]); - } + return resolve(successMatch[1]); + } else if (data.match(this.failRegex)) { + childProc.stdin.end(); + return reject(new Error("Faile to login")); } }); @@ -109,6 +113,7 @@ class LeetCodeManager extends EventEmitter { childProc.on("error", reject); const name: string | undefined = await vscode.window.showInputBox({ prompt: "Enter username or E-mail.", + ignoreFocusOut: true, validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "The input must not be empty", }); if (!name) { @@ -119,6 +124,7 @@ class LeetCodeManager extends EventEmitter { const pwd: string | undefined = await vscode.window.showInputBox({ prompt: isByCookie ? "Enter cookie" : "Enter password.", password: true, + ignoreFocusOut: true, validateInput: (s: string): string | undefined => s ? undefined : isByCookie ? "Cookie must not be empty" : "Password must not be empty", }); if (!pwd) { @@ -126,11 +132,6 @@ class LeetCodeManager extends EventEmitter { return resolve(undefined); } childProc.stdin.write(`${pwd}\n`); - childProc.on("close", (code: number) => { - if (code !== 0) { - reject(new Error("Failed to login.")); - } - }); }); if (userName) { vscode.window.showInformationMessage(`Successfully ${inMessage}.`); From 6efb683df281479622b9efb426d183f0a843efa6 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sun, 12 Jan 2020 19:22:56 +0800 Subject: [PATCH 48/92] Prepare for 0.16.0 (#502) --- CHANGELOG.md | 4 ++++ README.md | 8 +++----- docs/README_zh-CN.md | 9 ++++----- package-lock.json | 2 +- package.json | 2 +- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 78bab546..6a57ff0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to the "leetcode" extension will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +## [0.16.0] +### Added +- Support GitHub login and LinkedIn login [PR#496](https://github.com/jdneo/vscode-leetcode/pull/496) + ## [0.15.8] ### Added - Add a new command `Sign In by Cookie` to workaround the issue that [users cannot login to LeetCode](https://github.com/jdneo/vscode-leetcode/issues/478). Please check the [workaround steps](https://github.com/jdneo/vscode-leetcode/tree/master#%EF%B8%8F-attention-%EF%B8%8F--workaround-to-login-to-leetcode-endpoint) for more details! diff --git a/README.md b/README.md index 1d8d21f3..454a2d46 100644 --- a/README.md +++ b/README.md @@ -27,11 +27,9 @@ Recently we observed that [the extension cannot login to leetcode.com endpoint anymore](https://github.com/jdneo/vscode-leetcode/issues/478). The root cause of this issue is that leetcode.com changed its login mechanism and so far there is no ideal way to fix that issue. -Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround which can somehow mitigate this by using the cookie to login. Here are the steps about what you should do if you want to login to `leetcode.com` endpoint using cookie: -1. Logout from the extension -2. Make sure current active endpoint is `leetcode.com` (Not leetcode-cn.com) -3. Copy the cookie as mentioned [here](https://github.com/jdneo/vscode-leetcode/issues/478#issuecomment-560395305) -4. Trigger the command `Sign In by Cookie` to login through the copied cookie. +Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround which can somehow mitigate this. Now you can simply click the `Sign In` button and then select `Third Party` login or `Cookie` login. + +> Note: If you want to use third-party login(**Recommended**), please make sure your account has been connected to the thrid-party. If you want to use `Cookie` login, click [here](https://github.com/jdneo/vscode-leetcode/issues/478#issuecomment-564757098) to see the steps. ## Requirements - [VS Code 1.30.1+](https://code.visualstudio.com/) diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index 23faf30c..d6b3b8f4 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -27,11 +27,10 @@ 近期我们发现插件出现了[无法登录 leetcode.com 节点的问题](https://github.com/jdneo/vscode-leetcode/issues/478)。原因是因为近期 leetcode.com 改变了登录机制,目前我们暂时没有找到解决该问题的完美解决方案。 -感谢 [@yihong0618](https://github.com/yihong0618) 提供了一个通过 cookie 登录的临时解决办法。你可以参考如下步骤实现通过 cookie 登录 `leetcode.com`: -1. 登出账户 -2. 确保当前激活的节点为 `leetcode.com` (而非 leetcode-cn.com) -3. 按照这里的方法,[从浏览器中拷贝 cookie](https://github.com/jdneo/vscode-leetcode/issues/478#issuecomment-560395305) -4. 使用命令 `Sign In by Cookie` 登录。 +感谢 [@yihong0618](https://github.com/yihong0618) 提供了一个临时解决办法。现在你可以直接点击登录按钮并选择第三方登录或者 `Cookie` 登录。 + + +> 注意:如果你希望使用第三方登录(**推荐**),请确保你的账户已经与第三方账户连接。如果你希望通过 `Cookie` 登录,请点击[该连接](https://github.com/jdneo/vscode-leetcode/issues/478#issuecomment-564757098)查看登录步骤。 ## 运行条件 - [VS Code 1.23.0+](https://code.visualstudio.com/) diff --git a/package-lock.json b/package-lock.json index 4c5bf850..1c03578e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "vscode-leetcode", - "version": "0.15.8", + "version": "0.16.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 315f86eb..ea64b44d 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-leetcode", "displayName": "LeetCode", "description": "Solve LeetCode problems in VS Code", - "version": "0.15.8", + "version": "0.16.0", "author": "Sheng Chen", "publisher": "shengchen", "license": "MIT", From 1c4a39ef0db9febeb3320c8f7a701e50374c10a2 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Thu, 13 Feb 2020 15:45:17 +0800 Subject: [PATCH 49/92] Add more information for login (#508) --- src/leetCodeManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/leetCodeManager.ts b/src/leetCodeManager.ts index 27a17103..44be87a9 100644 --- a/src/leetCodeManager.ts +++ b/src/leetCodeManager.ts @@ -41,7 +41,7 @@ class LeetCodeManager extends EventEmitter { picks.push( { label: "LeetCode Account", - detail: "Use LeetCode account to login", + detail: "Use LeetCode account to login (US endpoint is not supported)", value: "LeetCode", }, { From 1a129db5c569be16b184f5e045679cb1037ad374 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Fri, 14 Feb 2020 09:56:48 +0800 Subject: [PATCH 50/92] feat: Can open the problem file directly (#511) --- src/utils/workspaceUtils.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/utils/workspaceUtils.ts b/src/utils/workspaceUtils.ts index b77fc3c7..c129f8db 100644 --- a/src/utils/workspaceUtils.ts +++ b/src/utils/workspaceUtils.ts @@ -29,14 +29,17 @@ export async function selectWorkspaceFolder(): Promise<string> { if (needAsk) { const choice: string | undefined = await vscode.window.showQuickPick( [ + OpenOption.justOpenFile, OpenOption.openInCurrentWindow, OpenOption.openInNewWindow, OpenOption.addToWorkspace, ], - { placeHolder: "Select how you would like to open your workspace folder" }, + { placeHolder: "The LeetCode workspace folder is not opened in VS Code, would you like to open it?" }, ); switch (choice) { + case OpenOption.justOpenFile: + return workspaceFolderSetting; case OpenOption.openInCurrentWindow: await vscode.commands.executeCommand("vscode.openFolder", vscode.Uri.file(workspaceFolderSetting), false); return ""; @@ -117,6 +120,7 @@ async function determineLeetCodeFolder(): Promise<string> { } enum OpenOption { + justOpenFile = "Just open the problem file", openInCurrentWindow = "Open in current window", openInNewWindow = "Open in new window", addToWorkspace = "Add to workspace", From d7e4c10d39c5480145f19fb8f3cd4408562e5070 Mon Sep 17 00:00:00 2001 From: LinkeyLeo <LinkeyLeo@outlook.com> Date: Sat, 22 Feb 2020 12:28:02 +0800 Subject: [PATCH 51/92] bugfix: Correctly parse the WSL path to Windows path (#510) --- src/leetCodeExecutor.ts | 17 ++++------------- src/utils/wslUtils.ts | 5 ++++- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/leetCodeExecutor.ts b/src/leetCodeExecutor.ts index ce4a84e8..271ca9a4 100644 --- a/src/leetCodeExecutor.ts +++ b/src/leetCodeExecutor.ts @@ -14,13 +14,11 @@ import { toWslPath, useWsl } from "./utils/wslUtils"; class LeetCodeExecutor implements Disposable { private leetCodeRootPath: string; - private leetCodeRootPathInWsl: string; private nodeExecutable: string; private configurationChangeListener: Disposable; constructor() { this.leetCodeRootPath = path.join(__dirname, "..", "..", "node_modules", "vsc-leetcode-cli"); - this.leetCodeRootPathInWsl = ""; this.nodeExecutable = this.getNodePath(); this.configurationChangeListener = workspace.onDidChangeConfiguration((event: ConfigurationChangeEvent) => { if (event.affectsConfiguration("leetcode.nodePath")) { @@ -29,18 +27,11 @@ class LeetCodeExecutor implements Disposable { }, this); } - public async getLeetCodeRootPath(): Promise<string> { // not wrapped by "" + public async getLeetCodeBinaryPath(): Promise<string> { if (wsl.useWsl()) { - if (!this.leetCodeRootPathInWsl) { - this.leetCodeRootPathInWsl = `${await wsl.toWslPath(this.leetCodeRootPath)}`; - } - return `${this.leetCodeRootPathInWsl}`; + return `${await wsl.toWslPath(`"${path.join(this.leetCodeRootPath, "bin", "leetcode")}"`)}`; } - return `${this.leetCodeRootPath}`; - } - - public async getLeetCodeBinaryPath(): Promise<string> { // wrapped by "" - return `"${path.join(await this.getLeetCodeRootPath(), "bin", "leetcode")}"`; + return `"${path.join(this.leetCodeRootPath, "bin", "leetcode")}"`; } public async meetRequirements(): Promise<boolean> { @@ -168,7 +159,7 @@ class LeetCodeExecutor implements Disposable { public async getCompaniesAndTags(): Promise<{ companies: { [key: string]: string[] }, tags: { [key: string]: string[] } }> { // preprocess the plugin source - const companiesTagsPath: string = path.join(await leetCodeExecutor.getLeetCodeRootPath(), "lib", "plugins", "company.js"); + const companiesTagsPath: string = path.join(this.leetCodeRootPath, "lib", "plugins", "company.js"); const companiesTagsSrc: string = (await fse.readFile(companiesTagsPath, "utf8")).replace( "module.exports = plugin", "module.exports = { COMPONIES, TAGS }", diff --git a/src/utils/wslUtils.ts b/src/utils/wslUtils.ts index d496b038..16d83cde 100644 --- a/src/utils/wslUtils.ts +++ b/src/utils/wslUtils.ts @@ -15,5 +15,8 @@ export async function toWslPath(path: string): Promise<string> { } export async function toWinPath(path: string): Promise<string> { - return (await executeCommand("wsl", ["wslpath", "-w", `"${path}"`])).trim(); + if (path.startsWith("\\mnt\\")) { + return (await executeCommand("wsl", ["wslpath", "-w", `"${path.replace(/\\/g, "/").substr(0, 6)}"`])).trim() + path.substr(7); + } + return (await executeCommand("wsl", ["wslpath", "-w", "/"])).trim() + path; } From 63589211e9a9aadd99134c407961c81225d98ec2 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sat, 22 Feb 2020 12:50:30 +0800 Subject: [PATCH 52/92] chore: Reference the VS Code icons (#517) --- package-lock.json | 221 ++--------------------------------- package.json | 28 ++--- resources/dark/endpoint.svg | 3 - resources/dark/refresh.svg | 4 - resources/dark/search.svg | 3 - resources/dark/signin.svg | 3 - resources/light/endpoint.svg | 3 - resources/light/refresh.svg | 4 - resources/light/search.svg | 3 - resources/light/signin.svg | 3 - 10 files changed, 15 insertions(+), 260 deletions(-) delete mode 100644 resources/dark/endpoint.svg delete mode 100644 resources/dark/refresh.svg delete mode 100644 resources/dark/search.svg delete mode 100644 resources/dark/signin.svg delete mode 100644 resources/light/endpoint.svg delete mode 100644 resources/light/refresh.svg delete mode 100644 resources/light/search.svg delete mode 100644 resources/light/signin.svg diff --git a/package-lock.json b/package-lock.json index 1c03578e..db2741ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,6 +58,12 @@ "integrity": "sha512-5vE9WoOOC9/DoD3Zj53UISpM+5tSvh8k0mL4fe2zFI6vO715/W4IQ3EdVUrWVMrFi1/NZhyMvm2iKsDFkEGddQ==", "dev": true }, + "@types/vscode": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.42.0.tgz", + "integrity": "sha512-ds6TceMsh77Fs0Mq0Vap6Y72JbGWB8Bay4DrnJlf5d9ui2RSe1wis13oQm+XhguOeH1HUfLGzaDAoupTUtgabw==", + "dev": true + }, "abab": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", @@ -79,15 +85,6 @@ "acorn": "^2.1.0" } }, - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, "ajv": { "version": "6.9.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", @@ -218,18 +215,6 @@ "concat-map": "0.0.1" } }, - "browser-stdout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", @@ -400,15 +385,6 @@ "assert-plus": "^1.0.0" } }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", @@ -497,21 +473,6 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" }, - "es6-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", - "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==", - "dev": true - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "^4.0.3" - } - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -669,12 +630,6 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" }, - "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", - "dev": true - }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -732,16 +687,6 @@ } } }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "dev": true, - "requires": { - "agent-base": "4", - "debug": "3.1.0" - } - }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -752,27 +697,6 @@ "sshpk": "^1.7.0" } }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "dev": true, - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "dependencies": { - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - } - } - }, "i": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", @@ -1050,84 +974,11 @@ "minimist": "0.0.8" } }, - "mocha": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", - "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", - "dev": true, - "requires": { - "browser-stdout": "1.3.0", - "commander": "2.11.0", - "debug": "3.1.0", - "diff": "3.3.1", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.3", - "he": "1.1.1", - "mkdirp": "0.5.1", - "supports-color": "4.4.0" - }, - "dependencies": { - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "diff": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "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" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "requires": { - "has-flag": "^2.0.0" - } - } - } - }, "moment": { "version": "2.24.0", "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", @@ -1384,12 +1235,6 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, - "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", - "dev": true - }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -1467,12 +1312,6 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, "resolve": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", @@ -1556,17 +1395,8 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true }, "sprintf-js": { "version": "1.0.3", @@ -1751,16 +1581,6 @@ "punycode": "^2.1.0" } }, - "url-parse": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.6.tgz", - "integrity": "sha512-/B8AD9iQ01seoXmXf9z/MjLZQIdOoYl/+gvsQF6+mpnxaTfG9P7srYaiqaDMyKkR36XMXfhqSHss5MyFAO8lew==", - "dev": true, - "requires": { - "querystringify": "^2.0.0", - "requires-port": "^1.0.0" - } - }, "utile": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/utile/-/utile-0.3.0.tgz", @@ -1816,31 +1636,6 @@ "yargs": "12.0.4" } }, - "vscode": { - "version": "1.1.33", - "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.33.tgz", - "integrity": "sha512-sXedp2oF6y4ZvqrrFiZpeMzaCLSWV+PpYkIxjG/iYquNZ9KrLL2LujltGxPLvzn49xu2sZkyC+avVNFgcJD1Iw==", - "dev": true, - "requires": { - "glob": "^7.1.2", - "mocha": "^4.0.1", - "request": "^2.88.0", - "semver": "^5.4.1", - "source-map-support": "^0.5.0", - "url-parse": "^1.4.4", - "vscode-test": "^0.1.4" - } - }, - "vscode-test": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.1.5.tgz", - "integrity": "sha512-s+lbF1Dtasc0yXVB9iQTexBe2JK6HJAUJe3fWezHKIjq+xRw5ZwCMEMBaonFIPy7s95qg2HPTRDR5W4h4kbxGw==", - "dev": true, - "requires": { - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1" - } - }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", diff --git a/package.json b/package.json index ea64b44d..9ec411af 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "license": "MIT", "icon": "resources/LeetCode.png", "engines": { - "vscode": "^1.30.1" + "vscode": "^1.42.0" }, "repository": { "type": "git", @@ -52,19 +52,13 @@ "command": "leetcode.toggleLeetCodeCn", "title": "Switch Endpoint", "category": "LeetCode", - "icon": { - "light": "resources/light/endpoint.svg", - "dark": "resources/dark/endpoint.svg" - } + "icon": "$(globe)" }, { "command": "leetcode.signin", "title": "Sign In", "category": "LeetCode", - "icon": { - "light": "resources/light/signin.svg", - "dark": "resources/dark/signin.svg" - } + "icon": "$(sign-in)" }, { "command": "leetcode.signout", @@ -80,10 +74,7 @@ "command": "leetcode.refreshExplorer", "title": "Refresh", "category": "LeetCode", - "icon": { - "light": "resources/light/refresh.svg", - "dark": "resources/dark/refresh.svg" - } + "icon": "$(refresh)" }, { "command": "leetcode.pickOne", @@ -104,10 +95,7 @@ "command": "leetcode.searchProblem", "title": "Search Problem", "category": "LeetCode", - "icon": { - "light": "resources/light/search.svg", - "dark": "resources/dark/search.svg" - } + "icon": "$(search)" }, { "command": "leetcode.showSolution", @@ -660,8 +648,6 @@ "vscode:prepublish": "npm run compile", "compile": "tsc -p ./", "watch": "tsc -watch -p ./", - "postinstall": "node ./node_modules/vscode/bin/install", - "test": "npm run compile && node ./node_modules/vscode/bin/test", "lint": "tslint --project tsconfig.json -e src/*.d.ts -t verbose" }, "devDependencies": { @@ -671,10 +657,10 @@ "@types/markdown-it": "0.0.7", "@types/mocha": "^2.2.42", "@types/node": "^7.0.43", + "@types/vscode": "1.42.0", "@types/require-from-string": "^1.2.0", "tslint": "^5.9.1", - "typescript": "^2.6.1", - "vscode": "^1.1.33" + "typescript": "^2.6.1" }, "dependencies": { "fs-extra": "^6.0.1", diff --git a/resources/dark/endpoint.svg b/resources/dark/endpoint.svg deleted file mode 100644 index 1ff60a53..00000000 --- a/resources/dark/endpoint.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M8.5 1C9.78557 1 11.0423 1.38123 12.1112 2.09546C13.1801 2.80969 14.0132 3.82483 14.5052 5.01257C14.8972 5.95898 15.0586 6.98108 14.9811 7.99524C14.8962 9.10645 14.5267 10.1801 13.9046 11.1112C13.1903 12.1802 12.1752 13.0133 10.9874 13.5052C9.79973 13.9972 8.4928 14.126 7.23192 13.8751C5.97104 13.6243 4.81285 13.0052 3.90381 12.0962C2.99476 11.1871 2.3757 10.0289 2.12489 8.76807C1.8741 7.5072 2.00282 6.20032 2.49478 5.01257C2.98675 3.82483 3.81987 2.80969 4.88879 2.09546C5.95772 1.38123 7.21443 1 8.5 1ZM13.394 5C12.7527 3.75281 11.6613 2.79626 10.3412 2.32373C10.7845 3.16357 11.106 4.0647 11.294 5H13.394ZM13.9765 7.99524C13.9918 7.83081 13.9997 7.66553 14 7.5C13.999 6.99255 13.9273 6.48767 13.787 6H11.445C11.477 6.33105 11.5 6.66406 11.5 7C11.4997 7.12598 11.4971 7.25195 11.4921 7.37769C11.4917 7.38623 11.4914 7.39417 11.4911 7.40271C11.4834 7.58289 11.4709 7.76331 11.4536 7.94263C11.4192 8.29749 11.366 8.65039 11.294 9H13.787C13.8815 8.67139 13.9449 8.33496 13.9765 7.99524ZM10.4408 7.99524C10.4428 7.97815 10.4447 7.96106 10.4466 7.94397C10.4808 7.63074 10.4987 7.31567 10.5 7C10.4933 6.66553 10.4679 6.33167 10.424 6H6.576C6.53207 6.33167 6.5067 6.66553 6.5 7C6.50274 7.67334 6.5809 8.34412 6.733 9H10.267C10.3439 8.66833 10.4019 8.33289 10.4408 7.99524ZM10.249 5C10.1607 4.60352 10.0465 4.21399 9.90597 3.83447C9.67117 3.2019 9.36551 2.59644 8.994 2.03003C8.83 2.01599 8.666 2 8.5 2C8.39551 2 8.29182 2.00635 8.18843 2.01453C8.12755 2.01929 8.06677 2.02478 8.00599 2.03003L8 2.03918C7.40887 2.94299 6.98573 3.9458 6.75101 5H10.249ZM5.70601 5C5.89779 4.0647 6.22313 3.16174 6.672 2.31897C5.34599 2.78979 4.24946 3.74866 3.606 5H5.70601ZM3.213 6C3.07269 6.48767 3.00101 6.99255 3 7.5C3.00101 8.00745 3.07269 8.51233 3.213 9H5.70601C5.57043 8.34192 5.50142 7.67188 5.5 7C5.5 6.66406 5.52301 6.33105 5.55501 6H3.213ZM5.96701 10H3.60701C3.98501 10.7384 4.52472 11.382 5.18594 11.8829C5.84715 12.3838 6.61285 12.729 7.42601 12.8931C6.78598 12.0142 6.2932 11.0371 5.96701 10ZM8.5 12.644C9.13943 11.8531 9.63927 10.959 9.97799 10H7.022C7.36075 10.959 7.86058 11.8531 8.5 12.644ZM11.033 10C10.7068 11.0371 10.214 12.0142 9.574 12.8931C10.3872 12.729 11.1528 12.3838 11.8141 11.8829C12.4753 11.382 13.015 10.7384 13.393 10H11.033Z" fill="#C5C5C5"/> -</svg> diff --git a/resources/dark/refresh.svg b/resources/dark/refresh.svg deleted file mode 100644 index 0442b2af..00000000 --- a/resources/dark/refresh.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M5.56253 2.5158C3.46348 3.45013 2 5.55417 2 8.00002C2 11.3137 4.68629 14 8 14C11.3137 14 14 11.3137 14 8.00002C14 5.32522 12.2497 3.05922 9.83199 2.28485L9.52968 3.23835C11.5429 3.88457 13 5.77213 13 8.00002C13 10.7614 10.7614 13 8 13C5.23858 13 3 10.7614 3 8.00002C3 6.31107 3.83742 4.8177 5.11969 3.91248L5.56253 2.5158Z" fill="#C5C5C5"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M5 3H2V2H5.5L6 2.5V6H5V3Z" fill="#C5C5C5"/> -</svg> diff --git a/resources/dark/search.svg b/resources/dark/search.svg deleted file mode 100644 index e329b2d7..00000000 --- a/resources/dark/search.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M15.25 1.02546e-06C13.6605 -0.000791296 12.1046 0.457574 10.7694 1.32007C9.43422 2.18256 8.37657 3.4124 7.72375 4.8617C7.07094 6.31099 6.85077 7.91801 7.0896 9.4895C7.32843 11.061 8.01604 12.5301 9.06995 13.72L1 22.88L2.12 23.88L10.17 14.76C11.2055 15.5693 12.4192 16.1196 13.7103 16.365C15.0014 16.6104 16.3325 16.5437 17.5927 16.1707C18.8528 15.7976 20.0055 15.1288 20.955 14.2201C21.9044 13.3114 22.623 12.1891 23.0509 10.9465C23.4789 9.70396 23.6038 8.37703 23.4153 7.07642C23.2267 5.77581 22.7302 4.53915 21.967 3.46924C21.2039 2.39933 20.1962 1.52711 19.0278 0.925416C17.8595 0.323719 16.5642 0.00991516 15.25 0.0100108V1.02546e-06ZM15.25 15C13.915 15 12.6099 14.6041 11.4999 13.8624C10.3898 13.1207 9.52469 12.0665 9.01379 10.8331C8.5029 9.59973 8.36919 8.24248 8.62964 6.93311C8.89009 5.62373 9.53305 4.42106 10.4771 3.47705C11.4211 2.53305 12.6237 1.89009 13.9331 1.62964C15.2425 1.36919 16.5997 1.5029 17.8331 2.01379C19.0665 2.52469 20.1207 3.38985 20.8624 4.49988C21.6041 5.60991 22 6.91498 22 8.25C22 10.0402 21.2888 11.7571 20.0229 13.023C18.7571 14.2888 17.0402 15 15.25 15V15Z" fill="#C5C5C5"/> -</svg> diff --git a/resources/dark/signin.svg b/resources/dark/signin.svg deleted file mode 100644 index 2b96bb18..00000000 --- a/resources/dark/signin.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M11.02 3.77L11.03 3.76L12.02 4.75V2.5L11.52 2H2.52001L2.01001 2.5V2.99301L2 3.00003V13.29L2.36 13.75L7.36 15.47L8 15V14H11.52L12.02 13.5V11.25L11.02 12.25V13H8V4.71003L7.67 4.25003L4.03619 3H7.01001H11.02V3.77ZM7 14.28L3 12.94V3.72003L7 5.06003V14.28ZM10.09 7.53005H15.06V8.53005H10.13L11.72 10.1301L11.01 10.8301L8.53998 8.37005V7.66005L11.03 5.18005L11.73 5.88005L10.09 7.53005Z" fill="#C5C5C5"/> -</svg> diff --git a/resources/light/endpoint.svg b/resources/light/endpoint.svg deleted file mode 100644 index 91ad34f8..00000000 --- a/resources/light/endpoint.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M8.5 1C9.78557 1 11.0423 1.38123 12.1112 2.09546C13.1801 2.80969 14.0132 3.82483 14.5052 5.01257C14.8972 5.95898 15.0586 6.98108 14.9811 7.99524C14.8962 9.10645 14.5267 10.1801 13.9046 11.1112C13.1903 12.1802 12.1752 13.0133 10.9874 13.5052C9.79973 13.9972 8.4928 14.126 7.23192 13.8751C5.97104 13.6243 4.81285 13.0052 3.90381 12.0962C2.99476 11.1871 2.3757 10.0289 2.12489 8.76807C1.8741 7.5072 2.00282 6.20032 2.49478 5.01257C2.98675 3.82483 3.81987 2.80969 4.88879 2.09546C5.95772 1.38123 7.21443 1 8.5 1ZM13.394 5C12.7527 3.75281 11.6613 2.79626 10.3412 2.32373C10.7845 3.16357 11.106 4.0647 11.294 5H13.394ZM13.9765 7.99524C13.9918 7.83081 13.9997 7.66553 14 7.5C13.999 6.99255 13.9273 6.48767 13.787 6H11.445C11.477 6.33105 11.5 6.66406 11.5 7C11.4997 7.12598 11.4971 7.25195 11.4921 7.37769C11.4917 7.38623 11.4914 7.39417 11.4911 7.40271C11.4834 7.58289 11.4709 7.76331 11.4536 7.94263C11.4192 8.29749 11.366 8.65039 11.294 9H13.787C13.8815 8.67139 13.9449 8.33496 13.9765 7.99524ZM10.4408 7.99524C10.4428 7.97815 10.4447 7.96106 10.4466 7.94397C10.4808 7.63074 10.4987 7.31567 10.5 7C10.4933 6.66553 10.4679 6.33167 10.424 6H6.576C6.53207 6.33167 6.5067 6.66553 6.5 7C6.50274 7.67334 6.5809 8.34412 6.733 9H10.267C10.3439 8.66833 10.4019 8.33289 10.4408 7.99524ZM10.249 5C10.1607 4.60352 10.0465 4.21399 9.90597 3.83447C9.67117 3.2019 9.36551 2.59644 8.994 2.03003C8.83 2.01599 8.666 2 8.5 2C8.39551 2 8.29182 2.00635 8.18843 2.01453C8.12755 2.01929 8.06677 2.02478 8.00599 2.03003L8 2.03918C7.40887 2.94299 6.98573 3.9458 6.75101 5H10.249ZM5.70601 5C5.89779 4.0647 6.22313 3.16174 6.672 2.31897C5.34599 2.78979 4.24946 3.74866 3.606 5H5.70601ZM3.213 6C3.07269 6.48767 3.00101 6.99255 3 7.5C3.00101 8.00745 3.07269 8.51233 3.213 9H5.70601C5.57043 8.34192 5.50142 7.67188 5.5 7C5.5 6.66406 5.52301 6.33105 5.55501 6H3.213ZM5.96701 10H3.60701C3.98501 10.7384 4.52472 11.382 5.18594 11.8829C5.84715 12.3838 6.61285 12.729 7.42601 12.8931C6.78598 12.0142 6.2932 11.0371 5.96701 10ZM8.5 12.644C9.13943 11.8531 9.63927 10.959 9.97799 10H7.022C7.36075 10.959 7.86058 11.8531 8.5 12.644ZM11.033 10C10.7068 11.0371 10.214 12.0142 9.574 12.8931C10.3872 12.729 11.1528 12.3838 11.8141 11.8829C12.4753 11.382 13.015 10.7384 13.393 10H11.033Z" fill="#424242"/> -</svg> diff --git a/resources/light/refresh.svg b/resources/light/refresh.svg deleted file mode 100644 index 8ade09df..00000000 --- a/resources/light/refresh.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M5.56253 2.5158C3.46348 3.45013 2 5.55417 2 8.00002C2 11.3137 4.68629 14 8 14C11.3137 14 14 11.3137 14 8.00002C14 5.32522 12.2497 3.05922 9.83199 2.28485L9.52968 3.23835C11.5429 3.88457 13 5.77213 13 8.00002C13 10.7614 10.7614 13 8 13C5.23858 13 3 10.7614 3 8.00002C3 6.31107 3.83742 4.8177 5.11969 3.91248L5.56253 2.5158Z" fill="#424242"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M5 3H2V2H5.5L6 2.5V6H5V3Z" fill="#424242"/> -</svg> diff --git a/resources/light/search.svg b/resources/light/search.svg deleted file mode 100644 index fa629e10..00000000 --- a/resources/light/search.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M15.25 1.02546e-06C13.6605 -0.000791296 12.1046 0.457574 10.7694 1.32007C9.43422 2.18256 8.37657 3.4124 7.72375 4.8617C7.07094 6.31099 6.85077 7.91801 7.0896 9.4895C7.32843 11.061 8.01604 12.5301 9.06995 13.72L1 22.88L2.12 23.88L10.17 14.76C11.2055 15.5693 12.4192 16.1196 13.7103 16.365C15.0014 16.6104 16.3325 16.5437 17.5927 16.1707C18.8528 15.7976 20.0055 15.1288 20.955 14.2201C21.9044 13.3114 22.623 12.1891 23.0509 10.9465C23.4789 9.70396 23.6038 8.37703 23.4153 7.07642C23.2267 5.77581 22.7302 4.53915 21.967 3.46924C21.2039 2.39933 20.1962 1.52711 19.0278 0.925416C17.8595 0.323719 16.5642 0.00991516 15.25 0.0100108V1.02546e-06ZM15.25 15C13.915 15 12.6099 14.6041 11.4999 13.8624C10.3898 13.1207 9.52469 12.0665 9.01379 10.8331C8.5029 9.59973 8.36919 8.24248 8.62964 6.93311C8.89009 5.62373 9.53305 4.42106 10.4771 3.47705C11.4211 2.53305 12.6237 1.89009 13.9331 1.62964C15.2425 1.36919 16.5997 1.5029 17.8331 2.01379C19.0665 2.52469 20.1207 3.38985 20.8624 4.49988C21.6041 5.60991 22 6.91498 22 8.25C22 10.0402 21.2888 11.7571 20.0229 13.023C18.7571 14.2888 17.0402 15 15.25 15V15Z" fill="#424242"/> -</svg> diff --git a/resources/light/signin.svg b/resources/light/signin.svg deleted file mode 100644 index c7033f31..00000000 --- a/resources/light/signin.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M11.02 3.77L11.03 3.76L12.02 4.75V2.5L11.52 2H2.52001L2.01001 2.5V2.99301L2 3.00003V13.29L2.36 13.75L7.36 15.47L8 15V14H11.52L12.02 13.5V11.25L11.02 12.25V13H8V4.71003L7.67 4.25003L4.03619 3H7.01001H11.02V3.77ZM7 14.28L3 12.94V3.72003L7 5.06003V14.28ZM10.09 7.53005H15.06V8.53005H10.13L11.72 10.1301L11.01 10.8301L8.53998 8.37005V7.66005L11.03 5.18005L11.73 5.88005L10.09 7.53005Z" fill="#424242"/> -</svg> From d160d1ffccf31c270233a2d602b4d0563ffdd6cc Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sat, 22 Feb 2020 14:04:53 +0800 Subject: [PATCH 53/92] chore: Prepare for 0.16.1 (#518) --- CHANGELOG.md | 7 +++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a57ff0f..bb9c73be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to the "leetcode" extension will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +## [0.16.1] +### Added +- Can show the problem in current workspace even if it's not a LeetCode workspace [#373](https://github.com/jdneo/vscode-leetcode/issues/373) + +### Fixed +[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.16.1+is%3Aclosed+label%3Abug) + ## [0.16.0] ### Added - Support GitHub login and LinkedIn login [PR#496](https://github.com/jdneo/vscode-leetcode/pull/496) diff --git a/package-lock.json b/package-lock.json index db2741ae..0a555853 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "vscode-leetcode", - "version": "0.16.0", + "version": "0.16.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 9ec411af..59c5927b 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-leetcode", "displayName": "LeetCode", "description": "Solve LeetCode problems in VS Code", - "version": "0.16.0", + "version": "0.16.1", "author": "Sheng Chen", "publisher": "shengchen", "license": "MIT", From ac9df4d03ec4509310f89bdb7128da2077a9de15 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sun, 23 Feb 2020 12:04:55 +0800 Subject: [PATCH 54/92] Better config how to show the problem description (#519) --- package.json | 19 ++++++++++++++++++- src/commands/show.ts | 26 +++++++++++++++----------- src/leetCodeExecutor.ts | 4 ++-- src/shared.ts | 7 +++++++ src/utils/settingUtils.ts | 39 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 81 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 59c5927b..6397ef3a 100644 --- a/package.json +++ b/package.json @@ -300,11 +300,28 @@ "scope": "application", "description": "Default language for solving the problems." }, + "leetcode.showDescription": { + "type": "string", + "default": "In Webview", + "enum": [ + "In Webview", + "In File Comment", + "Both", + "None" + ], + "enumDescriptions": [ + "Show the problem description in a new webview window", + "Show the problem description in the file's comment" + ], + "scope": "application", + "description": "Specify where to show the description." + }, "leetcode.showCommentDescription": { "type": "boolean", "default": false, "scope": "application", - "description": "Include problem description in comments." + "description": "[Deprecated] Include problem description in comments.", + "deprecationMessage": "This setting will be deprecated in 0.17.0, please use 'leetcode.showDescription' instead" }, "leetcode.hint.setDefaultLanguage": { "type": "boolean", diff --git a/src/commands/show.ts b/src/commands/show.ts index 3de4f89a..1265e6f7 100644 --- a/src/commands/show.ts +++ b/src/commands/show.ts @@ -12,6 +12,8 @@ import { leetCodeExecutor } from "../leetCodeExecutor"; import { leetCodeManager } from "../leetCodeManager"; import { IProblem, IQuickItemEx, languages, ProblemState } from "../shared"; import { genFileExt, genFileName, getNodeIdFromFile } from "../utils/problemUtils"; +import * as settingUtils from "../utils/settingUtils"; +import { IDescriptionConfiguration } from "../utils/settingUtils"; import { DialogOptions, DialogType, openSettingsEditor, promptForOpenOutputChannel, promptForSignIn, promptHintMessage } from "../utils/uiUtils"; import { getActiveFilePath, selectWorkspaceFolder } from "../utils/workspaceUtils"; import * as wsl from "../utils/wslUtils"; @@ -166,28 +168,30 @@ async function showProblemInternal(node: IProblem): Promise<void> { finalPath = wsl.useWsl() ? await wsl.toWinPath(finalPath) : finalPath; - await leetCodeExecutor.showProblem(node, language, finalPath, leetCodeConfig.get<boolean>("showCommentDescription")); - await Promise.all([ + const descriptionConfig: IDescriptionConfiguration = settingUtils.getDescriptionConfiguration(); + await leetCodeExecutor.showProblem(node, language, finalPath, descriptionConfig.showInComment); + const promises: any[] = [ vscode.window.showTextDocument(vscode.Uri.file(finalPath), { preview: false, viewColumn: vscode.ViewColumn.One }), - movePreviewAsideIfNeeded(node), promptHintMessage( "hint.commentDescription", - 'You can generate the code file with problem description in the comments by enabling "leetcode.showCommentDescription".', + 'You can config how to show the problem description through "leetcode.showDescription".', "Open settings", - (): Promise<any> => openSettingsEditor("leetcode.showCommentDescription"), + (): Promise<any> => openSettingsEditor("leetcode.showDescription"), ), - ]); + ]; + if (descriptionConfig.showInWebview) { + promises.push(showDescriptionView(node)); + } + + await Promise.all(promises); } catch (error) { await promptForOpenOutputChannel(`${error} Please open the output channel for details.`, DialogType.error); } } -async function movePreviewAsideIfNeeded(node: IProblem): Promise<void> { - if (vscode.workspace.getConfiguration("leetcode").get<boolean>("enableSideMode", true)) { - return previewProblem(node, true); - } +async function showDescriptionView(node: IProblem): Promise<void> { + return previewProblem(node, vscode.workspace.getConfiguration("leetcode").get<boolean>("enableSideMode", true)); } - async function parseProblemsToPicks(p: Promise<IProblem[]>): Promise<Array<IQuickItemEx<IProblem>>> { return new Promise(async (resolve: (res: Array<IQuickItemEx<IProblem>>) => void): Promise<void> => { const picks: Array<IQuickItemEx<IProblem>> = (await p).map((problem: IProblem) => Object.assign({}, { diff --git a/src/leetCodeExecutor.ts b/src/leetCodeExecutor.ts index 271ca9a4..4c0aa312 100644 --- a/src/leetCodeExecutor.ts +++ b/src/leetCodeExecutor.ts @@ -86,8 +86,8 @@ class LeetCodeExecutor implements Disposable { ); } - public async showProblem(problemNode: IProblem, language: string, filePath: string, detailed: boolean = false): Promise<void> { - const templateType: string = detailed ? "-cx" : "-c"; + public async showProblem(problemNode: IProblem, language: string, filePath: string, showDescriptionInComment: boolean = false): Promise<void> { + const templateType: string = showDescriptionInComment ? "-cx" : "-c"; if (!await fse.pathExists(filePath)) { await fse.createFile(filePath); diff --git a/src/shared.ts b/src/shared.ts index 5f1039e4..d9d156d8 100644 --- a/src/shared.ts +++ b/src/shared.ts @@ -105,3 +105,10 @@ export const supportedPlugins: string[] = [ "solution.discuss", "leetcode.cn", ]; + +export enum DescriptionConfiguration { + InWebView = "In Webview", + InFileComment = "In File Comment", + Both = "Both", + None = "None", +} diff --git a/src/utils/settingUtils.ts b/src/utils/settingUtils.ts index 388f31b8..8c94a95f 100644 --- a/src/utils/settingUtils.ts +++ b/src/utils/settingUtils.ts @@ -2,6 +2,7 @@ // Licensed under the MIT license. import { workspace, WorkspaceConfiguration } from "vscode"; +import { DescriptionConfiguration } from "../shared"; export function getWorkspaceConfiguration(): WorkspaceConfiguration { return workspace.getConfiguration("leetcode"); @@ -18,3 +19,41 @@ export function getWorkspaceFolder(): string { export function getEditorShortcuts(): string[] { return getWorkspaceConfiguration().get<string[]>("editor.shortcuts", ["submit", "test"]); } + +export function getDescriptionConfiguration(): IDescriptionConfiguration { + const setting: string = getWorkspaceConfiguration().get<string>("showDescription", DescriptionConfiguration.InWebView); + const config: IDescriptionConfiguration = { + showInComment: false, + showInWebview: true, + }; + switch (setting) { + case DescriptionConfiguration.Both: + config.showInComment = true; + config.showInWebview = true; + break; + case DescriptionConfiguration.None: + config.showInComment = false; + config.showInWebview = false; + break; + case DescriptionConfiguration.InFileComment: + config.showInComment = true; + config.showInWebview = false; + break; + case DescriptionConfiguration.InWebView: + config.showInComment = false; + config.showInWebview = true; + break; + } + + // To be compatible with the deprecated setting: + if (getWorkspaceConfiguration().get<boolean>("showCommentDescription")) { + config.showInComment = true; + } + + return config; +} + +export interface IDescriptionConfiguration { + showInComment: boolean; + showInWebview: boolean; +} From 15c4216badd3080c0845d51ed71e786b6003895e Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sun, 23 Feb 2020 13:33:45 +0800 Subject: [PATCH 55/92] Remove the deprecated setting: leetcode.enableShortcuts (#520) --- README.md | 1 - docs/README_zh-CN.md | 1 - package.json | 6 ------ src/codelens/CodeLensController.ts | 22 +++------------------- 4 files changed, 3 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 454a2d46..b5067515 100644 --- a/README.md +++ b/README.md @@ -129,7 +129,6 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh | `leetcode.filePath` | Specify the relative path under the workspace and the file name to save the problem files. More details can be found [here](https://github.com/jdneo/vscode-leetcode/wiki/Customize-the-Relative-Folder-and-the-File-Name-of-the-Problem-File). | | | **[Deprecated] Use `leetcode.filePath` instead** ~~`leetcode.outputFolder`~~ | ~~Specify the relative path to save the problem files. Besides using customized path, there are also several reserved words which can be used here: <ul><li>`${tag}`: Categorize the problem according to their tags.<li>`${language}`: Categorize the problem according to their language.</li><li>`${difficulty}`: Categorize the problem according to their difficulty.</li></ul>For example: `problem-${tag}-${difficulty}`~~ | ~~N/A~~ | | `leetcode.enableStatusBar` | Specify whether the LeetCode status bar will be shown or not. | `true` | -| **[Deprecated] Use `leetcode.editor.shortcuts` instead** ~~`leetcode.enableShortcuts`~~ | ~~Specify whether the submit and test shortcuts in editor or not.~~ | ~~`true`~~ | | `leetcode.editor.shortcuts` | Specify the customized shorcuts in editors. Supported values are: `submit`, `test`, `solution` and `description`. | `["submit, test"]` | | `leetcode.enableSideMode` | Specify whether `preview`, `solution` and `submission` tab should be grouped into the second editor column when solving a problem. | `true` | | `leetcode.nodePath` | Specify the `Node.js` executable path. for example, C:\Program Files\nodejs\node.exe | `node` | diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index d6b3b8f4..d69c62a7 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -130,7 +130,6 @@ | `leetcode.filePath` | 指定生成题目文件的相对文件夹路径名和文件名。点击查看[更多详细用法](https://github.com/jdneo/vscode-leetcode/wiki/%E8%87%AA%E5%AE%9A%E4%B9%89%E9%A2%98%E7%9B%AE%E6%96%87%E4%BB%B6%E7%9A%84%E7%9B%B8%E5%AF%B9%E6%96%87%E4%BB%B6%E5%A4%B9%E8%B7%AF%E5%BE%84%E5%92%8C%E6%96%87%E4%BB%B6%E5%90%8D)。 | | | **[Deprecated] 请使用 `leetcode.filePath`** ~~`leetcode.outputFolder`~~ | ~~指定保存文件时所用的相对文件夹路径。除了用户自定义路径外,也可以使用保留项,包括:<ul><li>`${tag}`: 根据题目的类别进行分类。<li>`${language}`: 根据题目的语言进行分类。</li><li>`${difficulty}`: 根据题目的难度进行分类。</li></ul>例如:`problem-${tag}-${difficulty}`~~ | ~~N/A~~ | | `leetcode.enableStatusBar` | 指定是否在 VS Code 下方显示插件状态栏。 | `true` | -| **[Deprecated] 请使用 `leetcode.editor.shortcuts`** ~~`leetcode.enableShortcuts`~~ | ~~指定是否在 VS Code 编辑文件下方显示提交和测试的快捷按钮。~~ | ~~`true`~~ | | `leetcode.editor.shortcuts` | 指定在编辑器内所自定义的快捷方式。可用的快捷方式有: `submit`, `test`, `solution`, `description`。 | `["submit, test"]` | | `leetcode.enableSideMode` | 指定在解决一道题时,是否将`问题预览`、`高票答案`与`提交结果`窗口集中在编辑器的第二栏。 | `true` | | `leetcode.nodePath` | 指定 `Node.js` 可执行文件的路径。如:C:\Program Files\nodejs\node.exe | `node` | diff --git a/package.json b/package.json index 6397ef3a..cc7b9eb1 100644 --- a/package.json +++ b/package.json @@ -621,12 +621,6 @@ "scope": "application", "description": "Show the LeetCode status bar or not." }, - "leetcode.enableShortcuts": { - "type": "boolean", - "default": true, - "scope": "application", - "description": "[Deprecated] Show the submit and test shortcuts in editor or not." - }, "leetcode.editor.shortcuts": { "type": "array", "default": [ diff --git a/src/codelens/CodeLensController.ts b/src/codelens/CodeLensController.ts index 9373df27..8e2fa3c9 100644 --- a/src/codelens/CodeLensController.ts +++ b/src/codelens/CodeLensController.ts @@ -1,7 +1,7 @@ // Copyright (c) jdneo. All rights reserved. // Licensed under the MIT license. -import { ConfigurationChangeEvent, Disposable, languages, workspace, WorkspaceConfiguration } from "vscode"; +import { ConfigurationChangeEvent, Disposable, languages, workspace } from "vscode"; import { CustomCodeLensProvider } from "./CustomCodeLensProvider"; class CodeLensController implements Disposable { @@ -13,14 +13,12 @@ class CodeLensController implements Disposable { this.internalProvider = new CustomCodeLensProvider(); this.configurationChangeListener = workspace.onDidChangeConfiguration((event: ConfigurationChangeEvent) => { - if (event.affectsConfiguration("leetcode.enableShortcuts")) { - this.setCodeLensVisibility(); - } else if (event.affectsConfiguration("leetcode.editor.shortcuts")) { + if (event.affectsConfiguration("leetcode.editor.shortcuts")) { this.internalProvider.refresh(); } }, this); - this.setCodeLensVisibility(); + this.registeredProvider = languages.registerCodeLensProvider({ scheme: "file" }, this.internalProvider); } public dispose(): void { @@ -29,20 +27,6 @@ class CodeLensController implements Disposable { } this.configurationChangeListener.dispose(); } - - private setCodeLensVisibility(): void { - if (this.isShortcutsEnabled() && !this.registeredProvider) { - this.registeredProvider = languages.registerCodeLensProvider({ scheme: "file" }, this.internalProvider); - } else if (!this.isShortcutsEnabled() && this.registeredProvider) { - this.registeredProvider.dispose(); - this.registeredProvider = undefined; - } - } - - private isShortcutsEnabled(): boolean { - const configuration: WorkspaceConfiguration = workspace.getConfiguration(); - return configuration.get<boolean>("leetcode.enableShortcuts", true); - } } export const codeLensController: CodeLensController = new CodeLensController(); From bedd69307944795846db5995167cdb709398758d Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sun, 23 Feb 2020 14:02:08 +0800 Subject: [PATCH 56/92] Remove the deprecated setting: leetcode.outputFolder (#521) --- README.md | 1 - docs/README_zh-CN.md | 1 - package.json | 5 ----- src/commands/show.ts | 4 +--- 4 files changed, 1 insertion(+), 10 deletions(-) diff --git a/README.md b/README.md index b5067515..fecddd1b 100644 --- a/README.md +++ b/README.md @@ -127,7 +127,6 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh | `leetcode.endpoint` | Specify the active endpoint. Supported endpoints are: `leetcode`, `leetcode-cn` | `leetcode` | | `leetcode.workspaceFolder` | Specify the path of the workspace folder to store the problem files. | `""` | | `leetcode.filePath` | Specify the relative path under the workspace and the file name to save the problem files. More details can be found [here](https://github.com/jdneo/vscode-leetcode/wiki/Customize-the-Relative-Folder-and-the-File-Name-of-the-Problem-File). | | -| **[Deprecated] Use `leetcode.filePath` instead** ~~`leetcode.outputFolder`~~ | ~~Specify the relative path to save the problem files. Besides using customized path, there are also several reserved words which can be used here: <ul><li>`${tag}`: Categorize the problem according to their tags.<li>`${language}`: Categorize the problem according to their language.</li><li>`${difficulty}`: Categorize the problem according to their difficulty.</li></ul>For example: `problem-${tag}-${difficulty}`~~ | ~~N/A~~ | | `leetcode.enableStatusBar` | Specify whether the LeetCode status bar will be shown or not. | `true` | | `leetcode.editor.shortcuts` | Specify the customized shorcuts in editors. Supported values are: `submit`, `test`, `solution` and `description`. | `["submit, test"]` | | `leetcode.enableSideMode` | Specify whether `preview`, `solution` and `submission` tab should be grouped into the second editor column when solving a problem. | `true` | diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index d69c62a7..8aced3a8 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -128,7 +128,6 @@ | `leetcode.endpoint` | 指定使用的终端,可用终端有:`leetcode`, `leetcode-cn` | `leetcode` | | `leetcode.workspaceFolder` | 指定保存文件的工作区目录 | `""` | | `leetcode.filePath` | 指定生成题目文件的相对文件夹路径名和文件名。点击查看[更多详细用法](https://github.com/jdneo/vscode-leetcode/wiki/%E8%87%AA%E5%AE%9A%E4%B9%89%E9%A2%98%E7%9B%AE%E6%96%87%E4%BB%B6%E7%9A%84%E7%9B%B8%E5%AF%B9%E6%96%87%E4%BB%B6%E5%A4%B9%E8%B7%AF%E5%BE%84%E5%92%8C%E6%96%87%E4%BB%B6%E5%90%8D)。 | | -| **[Deprecated] 请使用 `leetcode.filePath`** ~~`leetcode.outputFolder`~~ | ~~指定保存文件时所用的相对文件夹路径。除了用户自定义路径外,也可以使用保留项,包括:<ul><li>`${tag}`: 根据题目的类别进行分类。<li>`${language}`: 根据题目的语言进行分类。</li><li>`${difficulty}`: 根据题目的难度进行分类。</li></ul>例如:`problem-${tag}-${difficulty}`~~ | ~~N/A~~ | | `leetcode.enableStatusBar` | 指定是否在 VS Code 下方显示插件状态栏。 | `true` | | `leetcode.editor.shortcuts` | 指定在编辑器内所自定义的快捷方式。可用的快捷方式有: `submit`, `test`, `solution`, `description`。 | `["submit, test"]` | | `leetcode.enableSideMode` | 指定在解决一道题时,是否将`问题预览`、`高票答案`与`提交结果`窗口集中在编辑器的第二栏。 | `true` | diff --git a/package.json b/package.json index cc7b9eb1..ddc54134 100644 --- a/package.json +++ b/package.json @@ -369,11 +369,6 @@ "description": "The path of the workspace folder to store the problem files.", "default": "" }, - "leetcode.outputFolder": { - "type": "string", - "scope": "application", - "description": "[Deprecated] The output folder to save the problem files." - }, "leetcode.filePath": { "type": "object", "scope": "application", diff --git a/src/commands/show.ts b/src/commands/show.ts index 1265e6f7..70474426 100644 --- a/src/commands/show.ts +++ b/src/commands/show.ts @@ -144,10 +144,8 @@ async function showProblemInternal(node: IProblem): Promise<void> { return; } - const outputFolder: string = leetCodeConfig.get<string>("outputFolder", "").trim(); - const fileFolder: string = leetCodeConfig - .get<string>(`filePath.${language}.folder`, leetCodeConfig.get<string>(`filePath.default.folder`, outputFolder)) + .get<string>(`filePath.${language}.folder`, leetCodeConfig.get<string>(`filePath.default.folder`, "")) .trim(); const fileName: string = leetCodeConfig .get<string>( From 1835d07495513e6603b721033b28a24ceb75e651 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sat, 18 Apr 2020 18:20:31 +0800 Subject: [PATCH 57/92] Prepare for 0.16.2 (#541) --- CHANGELOG.md | 9 ++++ package-lock.json | 123 ++++++++++++++++++++++++++-------------------- package.json | 4 +- 3 files changed, 81 insertions(+), 55 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb9c73be..93ccefa0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,15 @@ All notable changes to the "leetcode" extension will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +## [0.16.2] +### Added +- New Category: `Concurrency` [CLI#42](https://github.com/leetcode-tools/leetcode-cli/pull/42) +- New configuration to better configure how to show the description [#310](https://github.com/jdneo/vscode-leetcode/issues/310) + +### Removed +- Removed the deprecated setting `leetcode.enableShortcuts` [PR#520](https://github.com/jdneo/vscode-leetcode/pull/520) +- Removed the deprecated setting `leetcode.outputFolder` [PR#521](https://github.com/jdneo/vscode-leetcode/pull/521) + ## [0.16.1] ### Added - Can show the problem in current workspace even if it's not a LeetCode workspace [#373](https://github.com/jdneo/vscode-leetcode/issues/373) diff --git a/package-lock.json b/package-lock.json index 0a555853..0283fca9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "vscode-leetcode", - "version": "0.16.1", + "version": "0.16.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -86,11 +86,11 @@ } }, "ajv": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", - "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", + "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -146,9 +146,9 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" }, "babel-code-frame": { "version": "6.26.0", @@ -306,9 +306,9 @@ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "requires": { "delayed-stream": "~1.0.0" } @@ -479,12 +479,12 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.1.tgz", - "integrity": "sha512-Q8t2YZ+0e0pc7NRVj3B4tSQ9rim1oi4Fh46k2xhJ2qOiEwhQfdjyEQddWdj7ZFaKmU+5104vn1qrcjEPWq+bgQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", + "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", "optional": true, "requires": { - "esprima": "^3.1.3", + "esprima": "^4.0.1", "estraverse": "^4.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", @@ -492,9 +492,9 @@ } }, "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "optional": true }, "estraverse": { @@ -538,14 +538,14 @@ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" }, "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "fast-levenshtein": { "version": "2.0.6", @@ -936,16 +936,16 @@ } }, "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" }, "mime-types": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", "requires": { - "mime-db": "~1.38.0" + "mime-db": "1.43.0" } }, "mimic-fn": { @@ -967,11 +967,18 @@ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + } } }, "moment": { @@ -1135,9 +1142,9 @@ "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" }, "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { "p-try": "^2.0.0" } @@ -1212,9 +1219,9 @@ } }, "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, "pump": { "version": "3.0.0", @@ -1344,9 +1351,9 @@ } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" }, "safer-buffer": { "version": "2.1.2", @@ -1388,9 +1395,9 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "source-map": { "version": "0.6.1", @@ -1602,9 +1609,9 @@ } }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, "verror": { "version": "1.10.0", @@ -1617,9 +1624,9 @@ } }, "vsc-leetcode-cli": { - "version": "2.6.22", - "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.22.tgz", - "integrity": "sha512-/mKAQtwabtzZfbQlJO9k9qotx7qgtDFZnZ6TkO3NrfUyne2jTXLzDBN+/66fcXUyX5fpxKYBx81icChGRnT7CQ==", + "version": "2.6.23", + "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.23.tgz", + "integrity": "sha512-icSErC6SFhtR9wNs00yv4UO7MktGgRFKwvNwl5L3Fprchr/iK6C09iUdn60ZsKcKsfTm0eBoLmvSTHZCHM2wXQ==", "requires": { "ansi-styles": "3.2.1", "cheerio": "0.20.0", @@ -1634,6 +1641,16 @@ "underscore": "1.9.1", "wordwrap": "1.0.0", "yargs": "12.0.4" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + } } }, "wcwidth": { diff --git a/package.json b/package.json index ddc54134..933ce6b6 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-leetcode", "displayName": "LeetCode", "description": "Solve LeetCode problems in VS Code", - "version": "0.16.1", + "version": "0.16.2", "author": "Sheng Chen", "publisher": "shengchen", "license": "MIT", @@ -675,6 +675,6 @@ "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", "unescape-js": "^1.1.1", - "vsc-leetcode-cli": "2.6.22" + "vsc-leetcode-cli": "2.6.23" } } From 082876628ceb7b07806c07b6b457014397a98b65 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Wed, 20 May 2020 19:41:37 +0800 Subject: [PATCH 58/92] Update third party notice --- thirdpartynotice.txt | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/thirdpartynotice.txt b/thirdpartynotice.txt index 1f33cded..93c1b0f0 100644 --- a/thirdpartynotice.txt +++ b/thirdpartynotice.txt @@ -11,6 +11,7 @@ are grateful to these developers for their contribution to open source. 4. lodash (https://github.com/lodash/lodash) 5. markdown-it (https://github.com/markdown-it/markdown-it) 6. leetcode-cli (https://github.com/skygragon/leetcode-cli) +7. unescape-js (https://github.com/iamakulov/unescape-js) fs-extra NOTICES BEGIN HERE ============================= @@ -205,3 +206,31 @@ SOFTWARE. END OF leetcode-cli NOTICES AND INFORMATION ================================== + +unescape-js NOTICES BEGIN HERE +============================= + +The MIT License (MIT) + +Copyright (c) Ivan Akulov <mail@iamakulov.com> (http://iamakulov.com) + +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. + +END OF unescape-js NOTICES AND INFORMATION +================================== From 9bf587782fc086ce75fa677ff199f764d939244b Mon Sep 17 00:00:00 2001 From: Jerry Zou <jerry.zry@outlook.com> Date: Thu, 28 May 2020 14:22:57 +0800 Subject: [PATCH 59/92] chore: replace resources (#561) --- resources/LeetCode.png | Bin 15437 -> 7031 bytes resources/LeetCode.svg | 12 +++++------- resources/check.png | Bin 3057 -> 235 bytes resources/dark/dislike.png | Bin 700 -> 364 bytes resources/dark/like.png | Bin 472 -> 498 bytes resources/light/dislike.png | Bin 599 -> 368 bytes resources/light/like.png | Bin 418 -> 521 bytes resources/lock.png | Bin 3160 -> 387 bytes resources/x.png | Bin 3109 -> 225 bytes 9 files changed, 5 insertions(+), 7 deletions(-) diff --git a/resources/LeetCode.png b/resources/LeetCode.png index d068e69789afa0277908230fc9f89c106f5c5487..35461b5fe8c8e60fdd6c1d043047bbaff46b8f54 100644 GIT binary patch literal 7031 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 V*?5*yDenLP002ovPDHLkV1ldwNeBP{ literal 15437 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%0Ao`s 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 D)Sv-e diff --git a/resources/LeetCode.svg b/resources/LeetCode.svg index a3bac1f0..3a80c1b4 100644 --- a/resources/LeetCode.svg +++ b/resources/LeetCode.svg @@ -1,11 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> -<svg width="15px" height="16px" viewBox="0 0 15 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <!-- Generator: Sketch 57 (83077) - https://sketch.com --> - <title>Combined Shape</title> - <desc>Created with Sketch.</desc> - <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> - <g id="Artboard" transform="translate(-439.000000, -612.000000)" fill="#303133" fill-rule="nonzero"> - <path d="M448.617144,612.16769 C448.808341,612.363282 448.826418,612.663731 448.673533,612.879152 L448.608191,612.955578 L446.15,615.357 L449.894886,619.007259 C450.093972,619.194817 450.124399,619.494266 449.98051,619.715797 L449.918369,619.794848 C449.707367,620.01882 449.354751,620.029333 449.13078,619.818331 L449.13078,619.818331 L445.354,616.136 L440.170212,621.203943 C440.111737,621.261104 440.099007,621.347469 440.132652,621.417331 L440.166592,621.46592 L445.358074,626.829135 C445.415144,626.888093 445.501806,626.90111 445.571922,626.867432 L445.620685,626.833408 L445.623532,626.830592 L449.13805,623.278672 C449.354479,623.05994 449.707246,623.058073 449.925978,623.274502 C450.120407,623.466883 450.143485,623.766988 449.994209,623.984926 L449.930149,624.06243 L446.415631,627.61435 L446.395701,627.634062 C445.914207,628.100138 445.16516,628.119545 444.661422,627.700626 L444.55742,627.604151 L439.365938,622.240936 C438.901478,621.761111 438.880378,621.015175 439.29562,620.511206 L439.391276,620.407102 L447.829256,612.158737 C448.049297,611.94364 448.402047,611.947648 448.617144,612.16769 Z M446.514534,621 L453.485466,621 C453.769635,621 454,621.223858 454,621.5 C454,621.74546 453.817984,621.949608 453.577954,621.991944 L453.485466,622 L446.514534,622 C446.230365,622 446,621.776142 446,621.5 C446,621.25454 446.182016,621.050392 446.422046,621.008056 L446.514534,621 L453.485466,621 Z" id="Combined-Shape"></path> +<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <title>LeetCode</title> + <g id="LeetCode" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="lc(1)-copy" transform="translate(1.000000, 0.000000)" fill="#303133" fill-rule="nonzero"> + <path d="M6.88695652,15.9652174 C5.94782609,15.9652174 5.04347826,15.6173913 4.3826087,14.9565217 L1.39130435,12 C1.28695652,11.8956522 1.1826087,11.7913043 1.11304348,11.6869565 C0.417391304,10.8173913 0.139130435,9.70434783 0.382608696,8.66086957 C0.452173913,8.4173913 0.52173913,8.20869565 0.626086957,8 L0.660869565,7.89565217 L0.695652174,7.82608696 L0.730434783,7.75652174 C0.8,7.65217391 0.869565217,7.51304348 0.973913043,7.40869565 C1.04347826,7.33913043 1.11304348,7.23478261 1.1826087,7.16521739 L7.6173913,0.243478261 C7.72173913,0.139130435 7.86086957,0.0695652174 8.03478261,0.0695652174 C8.17391304,0.0695652174 8.31304348,0.139130435 8.4173913,0.208695652 C8.66086957,0.417391304 8.66086957,0.8 8.45217391,1.00869565 L6.53913043,3.06086957 L7.26956522,3.16521739 C7.93043478,3.26956522 8.52173913,3.51304348 9.00869565,3.93043478 L11.4434783,5.91304348 C11.6869565,6.12173913 11.7217391,6.46956522 11.5130435,6.71304348 C11.4086957,6.85217391 11.2347826,6.92173913 11.0608696,6.92173913 C10.9217391,6.92173913 10.8173913,6.88695652 10.7130435,6.7826087 L8.27826087,4.8 C7.82608696,4.45217391 7.23478261,4.24347826 6.60869565,4.24347826 C5.84347826,4.24347826 5.11304348,4.52173913 4.66086957,5.00869565 L1.9826087,7.86086957 C1.42608696,8.48695652 1.25217391,9.35652174 1.56521739,10.1913043 L1.6,10.2956522 C1.73913043,10.6086957 1.94782609,10.9217391 2.19130435,11.1652174 C2.19130435,11.1652174 5.14782609,14.0521739 5.1826087,14.0869565 C5.63478261,14.5391304 6.26086957,14.7826087 6.92173913,14.7826087 C7.5826087,14.7826087 8.20869565,14.5391304 8.66086957,14.0521739 L10.3304348,12.3826087 C10.4347826,12.2782609 10.573913,12.2086957 10.7478261,12.2086957 C10.8869565,12.2086957 11.026087,12.2782609 11.1652174,12.3826087 C11.373913,12.5913043 11.373913,12.973913 11.1652174,13.1826087 L9.49565217,14.8521739 C8.76521739,15.5826087 7.86086957,15.9652174 6.88695652,15.9652174 Z M5.9826087,10.0869565 C5.66956522,10.0869565 5.42608696,9.84347826 5.42608696,9.53043478 C5.42608696,9.2173913 5.66956522,8.97391304 5.9826087,8.97391304 L13.0434783,8.97391304 C13.3565217,8.97391304 13.6,9.2173913 13.6,9.53043478 C13.6,9.84347826 13.3913043,10.0869565 13.0782609,10.0869565 L5.9826087,10.0869565 Z" id="Shape"></path> </g> </g> </svg> \ No newline at end of file diff --git a/resources/check.png b/resources/check.png index ad7077dffcfe6bd7ae200c13b983e982e1b6160d..84d2d1007e2fec3b72d5157ea6b530444dc24518 100644 GIT binary patch delta 219 zcmew;{+e-uL_G^L0|P^2NcwRg#ggvm>&U>cv7h@-A}f&3SRCZ;#IWw1%u66gF~BFp z)hDwsa=S*<4)vIwT9Mn;BX_6+$>`l6GHX9b<hOiSC{Qt1NswPKLrS;f*Z4=8-+3zb z8|(p!26?(ThG?8mPLOD6Fy-`h$dc3wnO}G{$b@w@%LNe~l`zKT7PFX^sj{t5+pw<4 z&DfE91<O$`wFN>U+FPbcEZWtW87e+YddmgblP${{8V}YiSj@!mT3F0^OSh*d(0B$< LS3j3^P6<r_wu?&B literal 3057 zcmV<N3l8*&P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800009a7bBm000XU z000XU0RWnu7ytkYO=&|zP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-oy)cUY767Czti zWe-+D*zmEJY=HnGBdiF>5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1<Rh~l6qxMx9% zh+2zPTsZC@+^4mDdhhM+``7!t=bY#K&Uw!dfDsZVk>;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008g<d3b(wus{3(uWtYX0C3eVBofEr|AV?vCRYF;kpSQ#66Xs6 zkWv81E>y@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} z<RYAxn<EoQ=L1a63;+Nc`O(4tI6si*=H%h#X6J10^u?n7Yw&L(J|Xen{=AF=1OO0D z&+pn_<>l4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-<BLB3GvROGi+=X}Kpy_vdhh^onn0PYz@vlxaba$Du2PQY%LGC(ZujRS{>O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#<bWIsp%|7y8C1YJ*aWq(0~(+a zn&A+%!7(@u=im}tf$MM=24EPT!Wg`U2?RmN2oqr;I*1Wsj@Tm32p5@-1R`NbG?IX% zAnAw{Q6k02a-;&OLTZs+NF(wsauhj@TtNDe+sGg?iu{VaM=_LvvQY!n0(C&Ss2>`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)I<b&gMyw|8As!)~C0-{E6JL`^Bo4`v<W349C6F>n3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&G<BLK&6^fO%cL!%)zF%0XKD9nFX?o; z3EhJpMVHW*(rf4k>F4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^#<Ae=IoX^_&LPeX&U-BbEk7-> z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ib<gTP(_`y- z=?V49^$zLX(MR=d^rQ6`>hIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyE<W%V@fh z#Au_@NuwvYChmu4<285}K4z?M9Ad0A-euftJYiyKGTWrYq{ZaEDb18?nr6Duw9|CV z%*ZU<tk|r{?2b9roNJz8zS+Fn{EdaBMV!S-i#ChLmfDtl%LSHAmiMffRz6mFR`pib ztVz~f>n!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>><a9f>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86<b<B2baJ=iJ;WWdk#HqvSS7#e%p>v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<<q3^N{B+UUpttUi-ZsPqUmRp4KpJ$lJtQ;JwRxU^+fMW%|zP13tz+0-t)H zhrXu1BHul}BYxI?nSKZSp8Grc%l(h|zu|fE7V%C6U;)7a<pI5c8iBI|YXctynFOT= zH3f|Yy9O@|J{3X?2@P2va+7bs7xEkVV>8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^H<bj`5GFjJZ48 zYPNEAXRK;$Qfy=Fo4A0us<?r8hxkSDmlAXnBnj<_<iyy-J&EIU0_SX+Go0j_RF-sO zuI1dKxfkZ?&dZ*6JXtkakbF3Wm=c$=KjniULQpRlPvxg>O&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9<ahEGOy#xn^|QY(3p8Irjp^G#Mn*50ho*>Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8<U61_v9n_bMxC3Y=unGqqI`4P!1MMFQ_YcTNqn- zxJbQ7TGTV&X8!8=BMX8Se7%scP`I$O*tmFE@!%rAMY|Rwi&GbOE-_tFx@351@X~$D zXv?ye{ZQgqQdRP5dED}jQiIZ^r9&%%S2UHWl*!9(uJl^DV-;bQWL58Km(^QVe<~N1 zU#xJfsIK_1M!4qUS59BmeD!&4+S=Yqx61A7Nb98QZmjoNzpqNYYC+Y|hVTuo8}W_h z8((co-gKdQYW0rIw9U%R12tha?OV*YtlRRTHly}>oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t<Nq8e$u|zvh13xJP$S#h#CQrF#eVMeplsbZ>0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j<Jb;mW2SDv7qC_VA{<bspqr(~y| zolZYJ)S29Q_e}hmYh6)Yy=Ozuo<A3K?o78|_sR3#=Z{_Rym0g)_hQ>6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde00d`2O+f$vv5tKEQIh}w03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(` z>R<o>I+y?e7jKeZ#YO-C0S-w-K~#9!?3cX_gD?<ApHT*2lng+TYyu;sWq`C%CNP^o zkv@!)4M+osm_OSbxQQEt1ovLyJAYP9(-3k+1YW@f)De*T>yiQw;F>2@eW*YS*X`@a zlu!r4nUYWk!$%S-0Q^TH3Iqp;fiemN@77HPglBnD6>6eT43xk#PpV>1_^1m8@U!{h z9`GN52{>yKTj9OH0(|yI2{?eVfR74D!8?Js1-viRK1JXFC!lr^(2m`?x{13zpn+6) zC}uWoJnRBViOhC}m~%iv!Wuq#9B-6xg3smwPYGxEVjyvp@Pe-<B1;KxxK$)uk=O*c z&V(}(o8eBO)Q}K?`=lP-9z=3CqyObJw7_=&n!=t~!0LeG00000NkvXXu0mjf6Z^u+ diff --git a/resources/dark/dislike.png b/resources/dark/dislike.png index 4a4fe0202483583ef0d5278b9be337aca5ce2a96..47f17c57de149b767426486c1c7891ebb80bc36e 100644 GIT binary patch delta 348 zcmdnP`i5zOWIZzj1B1(wu46!oCEd~2k%3`jKlh(RRv@3TILO_JVcj{Imq3ndfKQ04 zPiEnP0|yQsJP0I#VE_L8$BrEXGR~Yi0~GxK|36R!$b~3?un!+T3}gVop+kotjMhD_ zj6eg$N`m}?8S1+t-rsvGw3gMD@t}|P?(%%el%M7`2Xof#11eeU>EaktaqH|vPrkzn zJPc>|v2ObOf4Ny`Z&Qcv*BO?Pvo=~X<R4<I{Bi#UzvP<*&a1@TZmbr0X1)Bv@106+ zUYDQ!{1&ZxbJq4Qz9~l&R`PJOwQ_T@&Ehs;>*Bt$UtCCBg~u;c&%*FT%ml{5E#((Z zSU>%Kr(WzJkNHJGewP;?QokHsoYgA*&6daIVzuDIlPR;zgeR=wJHP&b;mat~b(en# c*zD=!7ZFj7&)WKz7wBFFPgg&ebxsLQ0BrT76aWAK delta 687 zcmV;g0#N<z0=xx~8Gi%-007x@vVQ;o00Lr5M??VshmXv^0007YNkl<ZNXPAz%S+Tz z6vyxQm?U~pSfZKI-w+igG}WRog4*<0R!~;kC_-CCMGz(tEkhDg49i6k76YPlKj-I< z9^g<|q%JbcMK%sOqI6o!Z~V>6$3V;OZ}q$Pp3gbwd(J(^{C{8na%qvAly1hDlOOgK zr^02alW-ZQdCdfKjPcAK*P=Y;wiXx7_{QakF~-PI#xqZ>(_fQoK8`ZXS*JQ0w6$Ec zqbO>xa|1;g;exG=2AyhYU<Bn`211K)QC{|~_V>bNwuxC3W!5(O=@`QrdQc=S5l)~C zr<*62?Bf@c?0?PPch}lc)E@IMcB67GpRhJ$LwWblqdfH^7(<=vLMql@gYwk}%%JYd zLIBTKppx(b!)Rnzfj#qxFFv3drL(ZM>nOH|{fsseL*>k32AMU=shBjNOh*nbWG<H( z>Z_cOcoQFNQ+8qQER2xLD9T5t!izVGqP8*n+D(+1w13P}{;r`Y6DaRxLvJ~Q-k;hl z%RqSMmz-+(jN<YRWvH)`t9cL_pg9u}E|C`~({{Hp9zv69MD{R)ayz@e0q$lZqCvV) z;x^<Vh9XtQP{$N1E%{m`2jP~|i4sdj;dzgvJkUV?F3UlLOQano#!h35p^i9eALgA) zDTK77BY%3!lhQ@1j4_7Id_v_-Wc^~j9^f9z_wXuXoC*eg>C)sJc)M;<guP{V7~@nB zO?jt|sWds4iXxdkQIy~AmU-zsIR~~%0;OlkS0{%gfl9lxpEydZZ9|FK5KmBk%C==Z zT<Rr(@(1N{M{!57ZS($?XKsu!a)4=+F1Iu}2`FeqnT%{NV0=(dXEf*!6S<%A{uffP V3>enx1@-^{002ovPDHLkV1l;*McDuV diff --git a/resources/dark/like.png b/resources/dark/like.png index 613fccd4a02d9c514bfab713760aaf1c768432e3..d77896123ed59a02c35564e57d46c80e2878b7c4 100644 GIT binary patch literal 498 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaM`0(?STeKHI8@85s)=usef;J|@{2M+?tQ>RV=NeBRnL!{s&oN?&TA)p!{ z_v+QFKn6rFkc22WdGaKX0pUVOtNbrvKzo%-g8YIRo(k-V)cV7A|AX(hO{?pZPnYK( zl<9iQJl)*ZOr%fvqFtxkj~fB)K;>UOT^vIyZk?TQb6T^40BfLNLGSNrwqO7Mw@`0O z^hvoF?C<)W)o=R`wL`Aw9(x~;)O+au`x+C^_ilmdbqpE#x9iqc7<yPngl;X6Y1lI{ z_<)zeNi}x9Lq%QzpEP%cEb#hUveLuP?81SYuP)A5eAU<_Oqt`ZK|R~V&}PBtvZpO4 z#5+7<wtQmM`tIbt?0fCpi&46YciDq9)*cJ^S*P&t>z&-Uxx05-ACa8tUF~hka(CN( z)_{C&))^JW_Z<xPofUEXBrwgLY2v>byBMnWzLM1_n=M)Wz>3>2zA>)CgFRuE2+zt7 tmqgb*nfs&vO2fwMe_y0teDwMU<2GHfpSosUPk{lz;OXk;vd$@?2>=Tb^e_Mb delta 457 zcmV;)0XF{f1K0zQ8Gi%-007x@vVQ;o00Lr5M??VshmXv^0004zNkl<ZNQv!`u}&0G z6o!W_$VP*9bQ|_LtiZx-Ln4hzi6#P)_yW=rtPmv-^%*RHj;Ptj-SeHzHWt(ih08`8 zuo(y>zs0N$12Z_Y8Y}->-E+_P-E(gc{LkNvN<Qt|bUE{{_J4tydim!`z05;C@{KdP zY}tL4QgEx%Mv2w)yFm~HK1DBiVy(v5WxR*z@VHgk9kwb9wvUi4v5XLVJhAHTaI4~T z>>&;k3YBOhc0P^7wR+hWIYo$5dlo+@2)My}gr9o|4-lR6coe_Q5r<4%thaC4KC*jp z<2Lfyw2!rM8-Gu&&m%VD3A(6NNo&kXV+`>n7M!5=wIYJg*O4E`f(~llDk5M4(TTUK zh<AkqJIL04Z5yL}NB$@;?z4z6@oPSZ2%EJ$c(dlm$evy(+e$t~vqp$`kv7<K#EDH_ zg>xqp&!gz$s~XB^&=4=P6@C15CVsUd7oM%?<8OY8M?wmJl~feMFDv@^+uV3kF%TXp zSVx3}i1osFq_8zK(Cx9pH+*AYJW~7-{!j7)D@0%2sNNKS00000NkvXXu0mjfTy@rt diff --git a/resources/light/dislike.png b/resources/light/dislike.png index b514f0f3223cdc878233d86e4427ac161b65ee05..4ced195dcf60ed39d75d30df3d82b5b843cb6c03 100644 GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaMQ0(?STeKHHx)z$6o?SZ74nwplD7LWu2O-)S*1Hv{pHwP*J0-!jMgiFEM zr+f?^0L>IH3GxeO@L?&xC)D-McEiEl+H8{1=J~5qeumaW-(~#=RI=F9#WAGf*4c@k ze1{cy80K!6u_49($AACXtK3wtOshIGN9U{rr{uhr!sB=9kJZ`D$=ve!C)3)UUfu6+ z?!L9!=YdJ$%&XV)XQpc3Q;=V<FySN<H>)ET6KfQg39AO{kN4bhTsExBMdpaOXm&X8 z?2%s}P=4<HMmw?QrmnBo*9S~?dhOg)z0vG9XH?ExU4xPcld=Owd|&<xs#wk4ysUKI elbELCADKQ%sQvU*-`)gtE`z75pUXO@geCx}d3?42 delta 585 zcmV-P0=E6|0@nnP8Gi%-007x@vVQ;o00Lr5M??VshmXv^0006INkl<ZNXPBe-)qfr z9LMp;b~u&{5tbRt-yp=w!3B}x#*a&spSL27OChCMl1nX$ny?#b`~g^^wrFHrnBfAm zY-{p%alSj}?Cdz(%B9cu>h=D7UeC|_{rc3G|LdQwN_({F^?%D}5A9Wz+o`h8BVYW| z>z-XIOWEsnh%sNE?O=z#qMav}jkos+Jr1aoR`00yLOA2B5Z*bWURs?)-U%PaA}VzV z4^$V_s+=++gb|Ge<1kyh@VIc0-9pb8dv<N`-8bvU)#rFG?93P1go7o6&B&Cj9~SQB zWv@^-r59T!e1FKxVPWQ!05gQ4yzCLyObJlwy0>}RB(zQmK+3kfSg2pvU)E4vM&Xb! zX!Bp~$8}qrQ;WQGs`$voGKk|sc%>%kw@V0(#mCMG!-bP2>$DKQ2rtaHKxd-DiOC?c z_G9Y25js2<x-E9H6rw^?5n`JA!l1Pzh)B{{XIQvU+<!xbOGSvZJHmiWg6LL@20w)6 zQh|*}OxG&(CtYN39}uppDE(yP5!2if`mF{H283&+|4XBY<}ru`Np!VfiPyq2^C*Y7 zEPOHxH98BT%g6cD-13O?R-r~$?)C;h3gVowi|q7W!cR+c(T&Er+>p>d5rD0Rgj+Tm z5L(<2`a)&g7QR|BF@P<Ggx|tVDJeG+HAy>cGAP_J9i+4f->jUhJ=;aAbWWvQ8NK}v Xli1|nJR2A100000NkvXXu0mjf^gbip diff --git a/resources/light/like.png b/resources/light/like.png index 0f7081d2a74f7186174e7495b02d9eb2456ab686..92b845de5dfcb57cf04356fe45ceb742c1f6ed1e 100644 GIT binary patch literal 521 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaMe1AIbUeKHF*H8s`L)a>l+3=Iu|41IllAPE8L>grlrT0k~X4Ui3F07(b~ zt^mkbvt|v1i!2CNrlFyM%m%8_i*5G+IzX)?$S;_|`~U~*6M=hw-g{|v*;cHL5>EcQ zTPBF{&Gd#XeP{DeUes9`Ti_sksNE3gd<IV!$B>F!XD3GT9Wvl?xooEB`O?c<{G0Fl zf9@_*1e9(u8^oWVwNdr<qxoA-?e^Fg=oY*0*T&Bh2`91?U*#}#e7>O1lYev7CO+Sf zU(FBvE0h<Ve5IoPP2<_)>vfk^Ic_peC_CA$-MlvT0SkNk#A_1|GtZIPw&Bz18qTP8 zDOIs07y5KQ1}Pl-#d&<`0l~M6eT}|PKE{8~(VV{|z#`^wrJTj#Ux$A`$U0c+9Umht zHNPxa`iyCX*oxd2`Jy6@cker_Z?5CrZue$_?u{?OOU0soZZ73aDdI|Zu-xr4pK-cJ z#|x&Ey)(3B8wyPfmLvt<p5(bSKEuwXvFz>XNtJp>@4w`Xo+z>9;nc8Qz|dpxboFyt I=akR{0K<H|bpQYW delta 403 zcmV;E0c`$>1fm0w8Gi%-007x@vVQ;o00Lr5M??VshmXv^00047Nkl<ZNXPAwJx&5q z7)1{hglN>xj=(ysz{1d&XyZ?*CW4x{0d0*|iV}#r1`DMl>H;+EVW1F+Hfl2vNUp_8 z90nMiL1X1N)xF=GGkI^|e|~kstWu&*hZpWxBl@+8vd%rPbbqLG!!qGPc!COYJq;EB zSftUjc_iMCHxL$^#E6h!hZ;g0aEK69wn-2nMwTk#*{ujuL6n*3>Z0t^Mu;|hUB`h* zZV?aN2U$T_F5Jv4@4S)f>!+w8mYkx5$PB#LB*}sO7UJ58bwn)CAB!WNoY+E)1rm%S znohJ3Gl2vtgn#A49O5dFpp3{nahearhHpHBu-&(oMcAZ$;c1$P-QN1xry`AwI2p7$ zLbRA4iqCoDeiR1J5%PK=#OV-)!Oy+%;R;{4x5D5T-{VGc)}si7_bUv3=^uA1M#7Dv xfUvO<h2XeR<k4tfcN9g6qvJ;LBm6Js6PRC@{a13X<O~1+002ovPDHLkV1kB1yCMJp diff --git a/resources/lock.png b/resources/lock.png index 8c6fa7fdd7ed8ddc9a2a74ce1828c13817c0102d..c9ce37743fdaad8553a9f718caa761235b8d94aa 100644 GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaMQ0(?STeKHIGFP8kjQ0)KJ(EqFD|1S~)u@{NM7?LmsOnjjPSOJhL0a6B1 z43fI{TKqK7O!1N+zhDNNOU#^yo`kIa;#SqWs3;-+?`9Llojcw;iEafd+2-lu7*cWT z?4;X#hZF=@xmme%_l7_J|34&iszB`Q89yG_OxSEWS>RCE|F)MU9J`F?{|eo_IDF@Q zCYJ2WJ3E_N@7;O-@}O5O_jTpi1)?n+uRORGDSS!jOIaY!!hfFQU-rVzdyVxB=Z-I1 z@tU=9={cu%kLj$v9p?`9oS4IEbgtU{S?q?F`foZ7mSx%qe%o%YerUq7hb{%H)=izv zGE;}e#c5-X(zY9Bokj1LDa06rvbve-YXtx8kiKK3)WUUseJ#)j44$rjF6*2UngHQL Bs0jc7 literal 3160 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 diff --git a/resources/x.png b/resources/x.png index 57709cdb580bc338e2177c7c7785c4a6997df556..64a5fc7e256d3d3b99fbe980942af7da049bffc1 100644 GIT binary patch delta 209 zcmZ1~@sM$XL_G^L0|P^2NcwRg#ggvm>&U>cv7h@-A}f&3SRCZ;#IWw1%u66gD8MJg z)hDy?y}Qc?cbAVIuAh9|-n%=$$uG$S%CeRO`2{ni%=Ojy+;-&)P$0(B#W6(Vd~(79 z@dBfU3um+f7_T~T=t{AO8t{rT1okXE7{GWeV1t)XV28yVPEj`v#~_Ah3fc_Xj)4q8 zO^X<ou!J%$W7s9e<9u=L(E^EGmkn*&AJ+CT9O7`g#mq3XMkIKSNy=NGMGT&<elF{r G5}E*S6-5dF literal 3109 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 From 672de39302def1c85e10a6293a394853ca355c74 Mon Sep 17 00:00:00 2001 From: yihong <zouzou0208@gmail.com> Date: Tue, 2 Jun 2020 22:00:33 +0800 Subject: [PATCH 60/92] Update README_zh-CN.md (#566) * Update README_zh-CN.md * Update README_zh-CN.md --- docs/README_zh-CN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index 8aced3a8..59b62e3f 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -34,7 +34,7 @@ ## 运行条件 - [VS Code 1.23.0+](https://code.visualstudio.com/) -- [Node.js 8+](https://nodejs.org) +- [Node.js 10+](https://nodejs.org) > 注意:请确保`Node`在`PATH`环境变量中。您也可以通过设定 `leetcode.nodePath` 选项来指定 `Node.js` 可执行文件的路径。 ## 快速开始 From a11fb1d857f3f019ba6060b85eb85716f1b4ece4 Mon Sep 17 00:00:00 2001 From: yihong <zouzou0208@gmail.com> Date: Tue, 2 Jun 2020 22:00:49 +0800 Subject: [PATCH 61/92] Update README.md (#565) * Update README.md * Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fecddd1b..7bc7decb 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh ## Requirements - [VS Code 1.30.1+](https://code.visualstudio.com/) -- [Node.js 8+](https://nodejs.org) +- [Node.js 10+](https://nodejs.org) > NOTE: Please make sure that `Node` is in your `PATH` environment variable. You can also use the setting `leetcode.nodePath` to specify the location of your `Node.js` executable. ## Quick Start From d1307f1d27e0bd48e61397d2e4a85b5bc708299d Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Thu, 4 Jun 2020 16:33:34 +0800 Subject: [PATCH 62/92] chore: Update badge urls (#569) --- README.md | 12 ++++++------ docs/README_zh-CN.md | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 7bc7decb..164da0bf 100644 --- a/README.md +++ b/README.md @@ -3,20 +3,20 @@ > Solve LeetCode problems in VS Code <p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/resources/LeetCode.png" alt=""> + <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/resources/LeetCode.png" alt=""> </p> <p align="center"> - <a href="https://travis-ci.org/jdneo/vscode-leetcode"> - <img src="https://img.shields.io/travis/jdneo/vscode-leetcode.svg?style=flat-square" alt=""> + <a href="https://travis-ci.org/LeetCode-OpenSource/vscode-leetcode"> + <img src="https://img.shields.io/travis/LeetCode-OpenSource/vscode-leetcode.svg?style=flat-square" alt=""> </a> <a href="https://gitter.im/vscode-leetcode/Lobby"> - <img src="https://img.shields.io/gitter/room/jdneo/vscode-leetcode.svg?style=flat-square" alt=""> + <img src="https://img.shields.io/gitter/room/LeetCode-OpenSource/vscode-leetcode.svg?style=flat-square" alt=""> </a> <a href="https://marketplace.visualstudio.com/items?itemName=shengchen.vscode-leetcode"> <img src="https://img.shields.io/visual-studio-marketplace/d/shengchen.vscode-leetcode.svg?style=flat-square" alt=""> </a> - <a href="https://github.com/jdneo/vscode-leetcode/blob/master/LICENSE"> - <img src="https://img.shields.io/github/license/jdneo/vscode-leetcode.svg?style=flat-square" alt=""> + <a href="https://github.com/LeetCode-OpenSource/vscode-leetcode/blob/master/LICENSE"> + <img src="https://img.shields.io/github/license/LeetCode-OpenSource/vscode-leetcode.svg?style=flat-square" alt=""> </a> </p> diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index 59b62e3f..8a2a191f 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -3,20 +3,20 @@ > 在 VS Code 中练习 LeetCode <p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/resources/LeetCode.png" alt=""> + <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/resources/LeetCode.png" alt=""> </p> <p align="center"> - <a href="https://travis-ci.org/jdneo/vscode-leetcode"> - <img src="https://img.shields.io/travis/jdneo/vscode-leetcode.svg?style=flat-square" alt=""> + <a href="https://travis-ci.org/LeetCode-OpenSource/vscode-leetcode"> + <img src="https://img.shields.io/travis/LeetCode-OpenSource/vscode-leetcode.svg?style=flat-square" alt=""> </a> <a href="https://gitter.im/vscode-leetcode/Lobby"> - <img src="https://img.shields.io/gitter/room/jdneo/vscode-leetcode.svg?style=flat-square" alt=""> + <img src="https://img.shields.io/gitter/room/LeetCode-OpenSource/vscode-leetcode.svg?style=flat-square" alt=""> </a> <a href="https://marketplace.visualstudio.com/items?itemName=shengchen.vscode-leetcode"> <img src="https://img.shields.io/visual-studio-marketplace/d/shengchen.vscode-leetcode.svg?style=flat-square" alt=""> </a> - <a href="https://github.com/jdneo/vscode-leetcode/blob/master/LICENSE"> - <img src="https://img.shields.io/github/license/jdneo/vscode-leetcode.svg?style=flat-square" alt=""> + <a href="https://github.com/LeetCode-OpenSource/vscode-leetcode/blob/master/LICENSE"> + <img src="https://img.shields.io/github/license/LeetCode-OpenSource/vscode-leetcode.svg?style=flat-square" alt=""> </a> </p> From 7705ce717207bf2203dca2eacebc8b9c2013f26f Mon Sep 17 00:00:00 2001 From: Nathan Esau <nathanesau1@gmail.com> Date: Sat, 27 Jun 2020 04:03:17 -0400 Subject: [PATCH 63/92] Add ts support (#573) --- README.md | 2 +- docs/README_zh-CN.md | 2 +- package-lock.json | 422 +++++++++++++++---------------------------- package.json | 5 +- src/shared.ts | 2 + 5 files changed, 152 insertions(+), 281 deletions(-) diff --git a/README.md b/README.md index 164da0bf..07b9b68b 100644 --- a/README.md +++ b/README.md @@ -122,7 +122,7 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | | `leetcode.hideSolved` | Specify to hide the solved problems or not | `false` | | `leetcode.showLocked` | Specify to show the locked problems or not. Only Premium users could open the locked problems | `false` | -| `leetcode.defaultLanguage` | Specify the default language used to solve the problem. Supported languages are: `bash`, `c`, `cpp`, `csharp`, `golang`, `java`, `javascript`, `kotlin`, `mysql`, `php`, `python`,`python3`,`ruby`,`rust`, `scala`,`swift` | `N/A` | +| `leetcode.defaultLanguage` | Specify the default language used to solve the problem. Supported languages are: `bash`, `c`, `cpp`, `csharp`, `golang`, `java`, `javascript`, `kotlin`, `mysql`, `php`, `python`,`python3`,`ruby`,`rust`, `scala`, `swift`, `typescript` | `N/A` | | `leetcode.useWsl` | Specify whether to use WSL or not | `false` | | `leetcode.endpoint` | Specify the active endpoint. Supported endpoints are: `leetcode`, `leetcode-cn` | `leetcode` | | `leetcode.workspaceFolder` | Specify the path of the workspace folder to store the problem files. | `""` | diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index 8a2a191f..194c43d7 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -123,7 +123,7 @@ | ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | | `leetcode.hideSolved` | 指定是否要隐藏已解决的问题 | `false` | | `leetcode.showLocked` | 指定是否显示付费题目,只有付费账户才可以打开付费题目 | `false` | -| `leetcode.defaultLanguage` | 指定答题时使用的默认语言,可选语言有:`bash`, `c`, `cpp`, `csharp`, `golang`, `java`, `javascript`, `kotlin`, `mysql`, `php`, `python`,`python3`,`ruby`, `rust`, `scala`,`swift` | `N/A` | +| `leetcode.defaultLanguage` | 指定答题时使用的默认语言,可选语言有:`bash`, `c`, `cpp`, `csharp`, `golang`, `java`, `javascript`, `kotlin`, `mysql`, `php`, `python`,`python3`,`ruby`, `rust`, `scala`, `swift`, `typescript` | `N/A` | | `leetcode.useWsl` | 指定是否启用 WSL | `false` | | `leetcode.endpoint` | 指定使用的终端,可用终端有:`leetcode`, `leetcode-cn` | `leetcode` | | `leetcode.workspaceFolder` | 指定保存文件的工作区目录 | `""` | diff --git a/package-lock.json b/package-lock.json index 0283fca9..1144cdac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,11 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, "@types/fs-extra": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz", @@ -86,9 +91,9 @@ } }, "ajv": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", - "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -146,9 +151,9 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", + "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" }, "babel-code-frame": { "version": "6.26.0", @@ -329,18 +334,6 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, "css-select": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", @@ -460,13 +453,10 @@ "safer-buffer": "^2.1.0" } }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "entities": { "version": "1.1.2", @@ -479,9 +469,9 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", - "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "optional": true, "requires": { "esprima": "^4.0.1", @@ -508,20 +498,6 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -538,9 +514,9 @@ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" }, "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-json-stable-stringify": { "version": "2.1.0", @@ -554,11 +530,12 @@ "optional": true }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "requires": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "forever-agent": { @@ -592,17 +569,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "getpass": { "version": "0.1.7", @@ -734,11 +703,6 @@ "number-is-nan": "^1.0.0" } }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -749,11 +713,6 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -872,12 +831,11 @@ } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" } }, "lodash": { @@ -893,14 +851,6 @@ "chalk": "^2.0.1" } }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "requires": { - "p-defer": "^1.0.0" - } - }, "markdown-it": { "version": "8.4.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", @@ -918,34 +868,17 @@ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - } - } - }, "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" }, "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "requires": { - "mime-db": "1.43.0" + "mime-db": "1.44.0" } }, "mimic-fn": { @@ -962,29 +895,19 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - } - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", + "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" }, "mute-stream": { "version": "0.0.8", @@ -1023,19 +946,6 @@ "resolved": "https://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz", "integrity": "sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY=" }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, "nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", @@ -1126,21 +1036,6 @@ "lcid": "^1.0.0" } }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -1150,11 +1045,11 @@ } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "requires": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" } }, "p-try": { @@ -1169,20 +1064,15 @@ "optional": true }, "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", @@ -1223,15 +1113,6 @@ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -1315,9 +1196,9 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "resolve": { "version": "1.10.0", @@ -1351,9 +1232,9 @@ } }, "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safer-buffer": { "version": "2.1.2", @@ -1374,26 +1255,14 @@ "semver": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -1459,11 +1328,6 @@ "ansi-regex": "^2.0.0" } }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -1605,6 +1469,14 @@ "version": "0.9.2", "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } } } }, @@ -1624,14 +1496,14 @@ } }, "vsc-leetcode-cli": { - "version": "2.6.23", - "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.23.tgz", - "integrity": "sha512-icSErC6SFhtR9wNs00yv4UO7MktGgRFKwvNwl5L3Fprchr/iK6C09iUdn60ZsKcKsfTm0eBoLmvSTHZCHM2wXQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.7.0.tgz", + "integrity": "sha512-y0VEcdv1j61hblxBMQWGqdKC4TgGm9tu+9lvoMXz4RaDzwkmzfFpNMo32tMrJGiP23kk+IiXz6r41M1vcL2OlQ==", "requires": { "ansi-styles": "3.2.1", "cheerio": "0.20.0", "he": "1.2.0", - "mkdirp": "0.5.1", + "mkdirp": "^1.0.4", "moment": "^2.20.1", "nconf": "0.10.0", "ora": "3.0.0", @@ -1640,17 +1512,7 @@ "supports-color": "5.5.0", "underscore": "1.9.1", "wordwrap": "1.0.0", - "yargs": "12.0.4" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - } + "yargs": "^15.3.1" } }, "wcwidth": { @@ -1676,14 +1538,6 @@ "tr46": "~0.0.1" } }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", @@ -1762,90 +1616,104 @@ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" }, "yargs": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.4.tgz", - "integrity": "sha512-f5esswlPO351AnejaO2A1ZZr0zesz19RehQKwiRDqWtrraWrJy16tsUIKgDXFMVytvNOHPVmTiaTh3wO67I0fQ==", + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", + "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", "requires": { - "cliui": "^4.0.0", + "cliui": "^6.0.0", "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^4.2.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.0" + "y18n": "^4.0.0", + "yargs-parser": "^18.1.1" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "requires": { - "invert-kv": "^2.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "ansi-regex": "^5.0.0" } }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, - "strip-ansi": { + "y18n": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" } } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" diff --git a/package.json b/package.json index 933ce6b6..1a7c206c 100644 --- a/package.json +++ b/package.json @@ -295,7 +295,8 @@ "ruby", "rust", "scala", - "swift" + "swift", + "typescript" ], "scope": "application", "description": "Default language for solving the problems." @@ -675,6 +676,6 @@ "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", "unescape-js": "^1.1.1", - "vsc-leetcode-cli": "2.6.23" + "vsc-leetcode-cli": "2.7.0" } } diff --git a/src/shared.ts b/src/shared.ts index d9d156d8..9b6a749a 100644 --- a/src/shared.ts +++ b/src/shared.ts @@ -36,6 +36,7 @@ export const languages: string[] = [ "rust", "scala", "swift", + "typescript", ]; export const langExt: Map<string, string> = new Map([ @@ -55,6 +56,7 @@ export const langExt: Map<string, string> = new Map([ ["rust", "rs"], ["scala", "scala"], ["swift", "swift"], + ["typescript", "ts"], ]); export enum ProblemState { From 75051806161e02c5071d29f99e3fe6f062d45f60 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Sat, 27 Jun 2020 16:26:30 +0800 Subject: [PATCH 64/92] Prepare for 0.17.0 (#586) * Prepare for 0.17.0 * Update marketplace URL --- CHANGELOG.md | 7 +++++++ README.md | 4 ++-- docs/README_zh-CN.md | 4 ++-- package-lock.json | 2 +- package.json | 4 ++-- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93ccefa0..ffa84ef5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to the "leetcode" extension will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +## [0.17.0] +### Added +- Add TypeScript support [#560](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/560) + +### Changed +- Update the UI resources [PR#561](https://github.com/LeetCode-OpenSource/vscode-leetcode/pull/561) + ## [0.16.2] ### Added - New Category: `Concurrency` [CLI#42](https://github.com/leetcode-tools/leetcode-cli/pull/42) diff --git a/README.md b/README.md index 07b9b68b..4cbf9b6f 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@ <a href="https://gitter.im/vscode-leetcode/Lobby"> <img src="https://img.shields.io/gitter/room/LeetCode-OpenSource/vscode-leetcode.svg?style=flat-square" alt=""> </a> - <a href="https://marketplace.visualstudio.com/items?itemName=shengchen.vscode-leetcode"> - <img src="https://img.shields.io/visual-studio-marketplace/d/shengchen.vscode-leetcode.svg?style=flat-square" alt=""> + <a href="https://marketplace.visualstudio.com/items?itemName=LeetCode.vscode-leetcode"> + <img src="https://img.shields.io/visual-studio-marketplace/d/LeetCode.vscode-leetcode.svg?style=flat-square" alt=""> </a> <a href="https://github.com/LeetCode-OpenSource/vscode-leetcode/blob/master/LICENSE"> <img src="https://img.shields.io/github/license/LeetCode-OpenSource/vscode-leetcode.svg?style=flat-square" alt=""> diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index 194c43d7..89d7d10f 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -12,8 +12,8 @@ <a href="https://gitter.im/vscode-leetcode/Lobby"> <img src="https://img.shields.io/gitter/room/LeetCode-OpenSource/vscode-leetcode.svg?style=flat-square" alt=""> </a> - <a href="https://marketplace.visualstudio.com/items?itemName=shengchen.vscode-leetcode"> - <img src="https://img.shields.io/visual-studio-marketplace/d/shengchen.vscode-leetcode.svg?style=flat-square" alt=""> + <a href="https://marketplace.visualstudio.com/items?itemName=LeetCode.vscode-leetcode"> + <img src="https://img.shields.io/visual-studio-marketplace/d/LeetCode.vscode-leetcode.svg?style=flat-square" alt=""> </a> <a href="https://github.com/LeetCode-OpenSource/vscode-leetcode/blob/master/LICENSE"> <img src="https://img.shields.io/github/license/LeetCode-OpenSource/vscode-leetcode.svg?style=flat-square" alt=""> diff --git a/package-lock.json b/package-lock.json index 1144cdac..2332f2e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "vscode-leetcode", - "version": "0.16.2", + "version": "0.17.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 1a7c206c..90d6f0e1 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,9 @@ "name": "vscode-leetcode", "displayName": "LeetCode", "description": "Solve LeetCode problems in VS Code", - "version": "0.16.2", + "version": "0.17.0", "author": "Sheng Chen", - "publisher": "shengchen", + "publisher": "LeetCode", "license": "MIT", "icon": "resources/LeetCode.png", "engines": { From 7aeb97eecbf3362c0331faf8c3840a56d66f00d9 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Mon, 29 Jun 2020 10:52:04 +0800 Subject: [PATCH 65/92] Update the URLs (#587) --- .github/ISSUE_TEMPLATE/question.md | 6 +- ACKNOWLEDGEMENTS.md | 38 +++---- CHANGELOG.md | 160 ++++++++++++++--------------- README.md | 34 +++--- docs/README_zh-CN.md | 34 +++--- package.json | 4 +- 6 files changed, 138 insertions(+), 138 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index 6253f0a4..c697e09a 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -3,11 +3,11 @@ name: 💬 Questions / Help about: If you have questions, please check our documents first --- -Before you submit an question we recommend you to check out the [DOCUMENT](https://github.com/jdneo/vscode-leetcode/blob/master/README.md) first. +Before you submit an question we recommend you to check out the [DOCUMENT](https://github.com/LeetCode-OpenSource/vscode-leetcode/blob/master/README.md) first. You can also find more information in: -- [TROUBLESHOOTING](https://github.com/jdneo/vscode-leetcode/wiki/Troubleshooting) -- [FAQ](https://github.com/jdneo/vscode-leetcode/wiki/FAQ) +- [TROUBLESHOOTING](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/Troubleshooting) +- [FAQ](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/FAQ) ## 💬 Questions and Help diff --git a/ACKNOWLEDGEMENTS.md b/ACKNOWLEDGEMENTS.md index 8f9ea9ce..6c7758be 100644 --- a/ACKNOWLEDGEMENTS.md +++ b/ACKNOWLEDGEMENTS.md @@ -3,22 +3,22 @@ A big thanks to the following individuals for contributing: - [@JIEJIAN21](https://github.com/JIEJIAN21) - thanks for logo and icon design -- [@TsFreddie](https://github.com/TsFreddie) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=TsFreddie) -- [@ntt2k](https://github.com/ntt2k) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=ntt2k) -- [@purocean](https://github.com/purocean) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=purocean) -- [@Xeonacid](https://github.com/Xeonacid) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=Xeonacid) -- [@Himself65](https://github.com/Himself65) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=Himself65) -- [@Vigilans](https://github.com/Vigilans) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=Vigilans) -- [@ringcrl](https://github.com/ringcrl) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=ringcrl) -- [@pujiaxun](https://github.com/pujiaxun) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=pujiaxun) -- [@edvardchen](https://github.com/edvardchen) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=edvardchen) -- [@poppinlp](https://github.com/poppinlp) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=poppinlp) -- [@xuzaixian](https://github.com/xuzaixian) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=xuzaixian) -- [@ZainChen](https://github.com/ZainChen) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=ZainChen) -- [@houtianze](https://github.com/houtianze) — [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=houtianze) -- [@magic-akari](https://github.com/magic-akari) - [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=magic-akari) -- [@SF-Zhou](https://github.com/SF-Zhou) - [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=SF-Zhou) -- [@fuafa](https://github.com/fuafa) - [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=fuafa) -- [@iFun](https://github.com/iFun) - [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=iFun) -- [@hologerry](https://github.com/hologerry) - [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=hologerry) -- [@yihong0618](https://github.com/yihong0618) - [contributions](https://github.com/jdneo/vscode-leetcode/commits?author=yihong0618) +- [@TsFreddie](https://github.com/TsFreddie) — [contributions](https://github.com/LeetCode-OpenSource/vscode-leetcode/commits?author=TsFreddie) +- [@ntt2k](https://github.com/ntt2k) — [contributions](https://github.com/LeetCode-OpenSource/vscode-leetcode/commits?author=ntt2k) +- [@purocean](https://github.com/purocean) — [contributions](https://github.com/LeetCode-OpenSource/vscode-leetcode/commits?author=purocean) +- [@Xeonacid](https://github.com/Xeonacid) — [contributions](https://github.com/LeetCode-OpenSource/vscode-leetcode/commits?author=Xeonacid) +- [@Himself65](https://github.com/Himself65) — [contributions](https://github.com/LeetCode-OpenSource/vscode-leetcode/commits?author=Himself65) +- [@Vigilans](https://github.com/Vigilans) — [contributions](https://github.com/LeetCode-OpenSource/vscode-leetcode/commits?author=Vigilans) +- [@ringcrl](https://github.com/ringcrl) — [contributions](https://github.com/LeetCode-OpenSource/vscode-leetcode/commits?author=ringcrl) +- [@pujiaxun](https://github.com/pujiaxun) — [contributions](https://github.com/LeetCode-OpenSource/vscode-leetcode/commits?author=pujiaxun) +- [@edvardchen](https://github.com/edvardchen) — [contributions](https://github.com/LeetCode-OpenSource/vscode-leetcode/commits?author=edvardchen) +- [@poppinlp](https://github.com/poppinlp) — [contributions](https://github.com/LeetCode-OpenSource/vscode-leetcode/commits?author=poppinlp) +- [@xuzaixian](https://github.com/xuzaixian) — [contributions](https://github.com/LeetCode-OpenSource/vscode-leetcode/commits?author=xuzaixian) +- [@ZainChen](https://github.com/ZainChen) — [contributions](https://github.com/LeetCode-OpenSource/vscode-leetcode/commits?author=ZainChen) +- [@houtianze](https://github.com/houtianze) — [contributions](https://github.com/LeetCode-OpenSource/vscode-leetcode/commits?author=houtianze) +- [@magic-akari](https://github.com/magic-akari) - [contributions](https://github.com/LeetCode-OpenSource/vscode-leetcode/commits?author=magic-akari) +- [@SF-Zhou](https://github.com/SF-Zhou) - [contributions](https://github.com/LeetCode-OpenSource/vscode-leetcode/commits?author=SF-Zhou) +- [@fuafa](https://github.com/fuafa) - [contributions](https://github.com/LeetCode-OpenSource/vscode-leetcode/commits?author=fuafa) +- [@iFun](https://github.com/iFun) - [contributions](https://github.com/LeetCode-OpenSource/vscode-leetcode/commits?author=iFun) +- [@hologerry](https://github.com/hologerry) - [contributions](https://github.com/LeetCode-OpenSource/vscode-leetcode/commits?author=hologerry) +- [@yihong0618](https://github.com/yihong0618) - [contributions](https://github.com/LeetCode-OpenSource/vscode-leetcode/commits?author=yihong0618) diff --git a/CHANGELOG.md b/CHANGELOG.md index ffa84ef5..22a3fc38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,117 +13,117 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how ## [0.16.2] ### Added - New Category: `Concurrency` [CLI#42](https://github.com/leetcode-tools/leetcode-cli/pull/42) -- New configuration to better configure how to show the description [#310](https://github.com/jdneo/vscode-leetcode/issues/310) +- New configuration to better configure how to show the description [#310](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/310) ### Removed -- Removed the deprecated setting `leetcode.enableShortcuts` [PR#520](https://github.com/jdneo/vscode-leetcode/pull/520) -- Removed the deprecated setting `leetcode.outputFolder` [PR#521](https://github.com/jdneo/vscode-leetcode/pull/521) +- Removed the deprecated setting `leetcode.enableShortcuts` [PR#520](https://github.com/LeetCode-OpenSource/vscode-leetcode/pull/520) +- Removed the deprecated setting `leetcode.outputFolder` [PR#521](https://github.com/LeetCode-OpenSource/vscode-leetcode/pull/521) ## [0.16.1] ### Added -- Can show the problem in current workspace even if it's not a LeetCode workspace [#373](https://github.com/jdneo/vscode-leetcode/issues/373) +- Can show the problem in current workspace even if it's not a LeetCode workspace [#373](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/373) ### Fixed -[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.16.1+is%3Aclosed+label%3Abug) +[Bugs fixed](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.16.1+is%3Aclosed+label%3Abug) ## [0.16.0] ### Added -- Support GitHub login and LinkedIn login [PR#496](https://github.com/jdneo/vscode-leetcode/pull/496) +- Support GitHub login and LinkedIn login [PR#496](https://github.com/LeetCode-OpenSource/vscode-leetcode/pull/496) ## [0.15.8] ### Added -- Add a new command `Sign In by Cookie` to workaround the issue that [users cannot login to LeetCode](https://github.com/jdneo/vscode-leetcode/issues/478). Please check the [workaround steps](https://github.com/jdneo/vscode-leetcode/tree/master#%EF%B8%8F-attention-%EF%B8%8F--workaround-to-login-to-leetcode-endpoint) for more details! +- Add a new command `Sign In by Cookie` to workaround the issue that [users cannot login to LeetCode](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/478). Please check the [workaround steps](https://github.com/LeetCode-OpenSource/vscode-leetcode/tree/master#%EF%B8%8F-attention-%EF%B8%8F--workaround-to-login-to-leetcode-endpoint) for more details! ### Changed -- Update the explorer icons to be align with the VS Code design [#460](https://github.com/jdneo/vscode-leetcode/issues/460) +- Update the explorer icons to be align with the VS Code design [#460](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/460) ## [0.15.7] ### Fixed -[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.7+is%3Aclosed+label%3Abug) +[Bugs fixed](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.7+is%3Aclosed+label%3Abug) ## [0.15.6] ### Added -- Add a link to the solution page [#424](https://github.com/jdneo/vscode-leetcode/issues/424) +- Add a link to the solution page [#424](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/424) ### Fixed -[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.6+is%3Aclosed+label%3Abug) +[Bugs fixed](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.6+is%3Aclosed+label%3Abug) ## [0.15.5] ### Added -- Add a link to the discussion page [#420](https://github.com/jdneo/vscode-leetcode/issues/420) +- Add a link to the discussion page [#420](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/420) ### Fixed -[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.5+is%3Aclosed+label%3Abug) +[Bugs fixed](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.5+is%3Aclosed+label%3Abug) ## [0.15.4] ### Added -- Add a new setting `leetcode.filePath`. Now users can use this setting to dynamicly specify the relative folder name and file name. [#PR380](https://github.com/jdneo/vscode-leetcode/pull/380) +- Add a new setting `leetcode.filePath`. Now users can use this setting to dynamicly specify the relative folder name and file name. [#PR380](https://github.com/LeetCode-OpenSource/vscode-leetcode/pull/380) ### Fixed -- Missing language `Rust` in the supported language list. [#PR412](https://github.com/jdneo/vscode-leetcode/pull/412) -- Cannot show output when the answer is wrong. [#414](https://github.com/jdneo/vscode-leetcode/issues/414) +- Missing language `Rust` in the supported language list. [#PR412](https://github.com/LeetCode-OpenSource/vscode-leetcode/pull/412) +- Cannot show output when the answer is wrong. [#414](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/414) ## [0.15.3] ### Added -- Support `Pick One` [#263](https://github.com/jdneo/vscode-leetcode/issues/263) -- Support toggling the favorite problems [#378](https://github.com/jdneo/vscode-leetcode/issues/378) +- Support `Pick One` [#263](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/263) +- Support toggling the favorite problems [#378](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/378) ### Changed -- Update the activity bar icon [#395](https://github.com/jdneo/vscode-leetcode/issues/263) +- Update the activity bar icon [#395](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/263) ### Fixed -[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.3+is%3Aclosed+label%3Abug) +[Bugs fixed](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.3+is%3Aclosed+label%3Abug) ## [0.15.2] ### Added -- Prompt to open the workspace for LeetCode [#130](https://github.com/jdneo/vscode-leetcode/issues/130) -- Support deleting sessions [#198](https://github.com/jdneo/vscode-leetcode/issues/130) +- Prompt to open the workspace for LeetCode [#130](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/130) +- Support deleting sessions [#198](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/130) ### Fixed -[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.2+is%3Aclosed+label%3Abug) +[Bugs fixed](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.2+is%3Aclosed+label%3Abug) ## [0.15.1] ### Fixed -[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.1+is%3Aclosed+label%3Abug) +[Bugs fixed](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.1+is%3Aclosed+label%3Abug) ## [0.15.0] ### Added -- Auto refresh the explorer after submitting [#91](https://github.com/jdneo/vscode-leetcode/issues/91) -- Add a editor shortcut `Description` to show the problem description [#286](https://github.com/jdneo/vscode-leetcode/issues/286) -- Support customizing the shortcuts in editor [#335](https://github.com/jdneo/vscode-leetcode/issues/335) +- Auto refresh the explorer after submitting [#91](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/91) +- Add a editor shortcut `Description` to show the problem description [#286](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/286) +- Support customizing the shortcuts in editor [#335](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/335) ### Fixed -[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.0+is%3Aclosed+label%3Abug) +[Bugs fixed](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.15.0+is%3Aclosed+label%3Abug) ## [0.14.3] ### Added -- Support interpolation for `leetcode.outputFolder` settings [#151](https://github.com/jdneo/vscode-leetcode/issues/151) +- Support interpolation for `leetcode.outputFolder` settings [#151](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/151) ### Fixed -[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+is%3Aclosed+milestone%3A0.14.3+label%3Abug) +[Bugs fixed](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues?q=is%3Aissue+is%3Aclosed+milestone%3A0.14.3+label%3Abug) ## [0.14.2] ### Added -- Add the `All` category in the LeetCode Explorer [#184](https://github.com/jdneo/vscode-leetcode/issues/184) -- Add shortcuts for `Show top voted solution` [#269](https://github.com/jdneo/vscode-leetcode/issues/269) +- Add the `All` category in the LeetCode Explorer [#184](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/184) +- Add shortcuts for `Show top voted solution` [#269](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/269) ### Fixed -[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+is%3Aclosed+label%3Abug+milestone%3A0.14.2) +[Bugs fixed](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues?q=is%3Aissue+is%3Aclosed+label%3Abug+milestone%3A0.14.2) ## [0.14.1] ### Added -- Add setting `leetcode.showCommentDescription` to specify whether including the problem description in comments or not [#287](https://github.com/jdneo/vscode-leetcode/issues/287) +- Add setting `leetcode.showCommentDescription` to specify whether including the problem description in comments or not [#287](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/287) ## [0.14.0] ### Added -- Add setting `leetcode.enableShortcuts` to specify whether to show the submit/test shortcuts in editor [#146](https://github.com/jdneo/vscode-leetcode/issues/146) -- Add `Like` and `Dislike` counts in the problem description [#267](https://github.com/jdneo/vscode-leetcode/issues/267) +- Add setting `leetcode.enableShortcuts` to specify whether to show the submit/test shortcuts in editor [#146](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/146) +- Add `Like` and `Dislike` counts in the problem description [#267](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/267) ### Changed - Improve the `Preview`, `Result` and `Solution` views ### Fixed -[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+label%3Abug+is%3Aclosed+milestone%3A0.14.0) +[Bugs fixed](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues?q=is%3Aissue+label%3Abug+is%3Aclosed+milestone%3A0.14.0) ## [0.13.3] ### Fixed @@ -131,51 +131,51 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how ## [0.13.2] ### Added -- Add a setting `leetcode.enableStatusBar` to specify whether the LeetCode status bar will be shown or not [#156](https://github.com/jdneo/vscode-leetcode/issues/156) -- Add a setting `leetcode.nodePath` to specify the `Node.js` executable path [#227](https://github.com/jdneo/vscode-leetcode/issues/227) +- Add a setting `leetcode.enableStatusBar` to specify whether the LeetCode status bar will be shown or not [#156](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/156) +- Add a setting `leetcode.nodePath` to specify the `Node.js` executable path [#227](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/227) ### Changed -- Update the activity bar icon, See: [#225](https://github.com/jdneo/vscode-leetcode/pull/225) +- Update the activity bar icon, See: [#225](https://github.com/LeetCode-OpenSource/vscode-leetcode/pull/225) ### Fixed -[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.13.2+is%3Aclosed+label%3Abug) +[Bugs fixed](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.13.2+is%3Aclosed+label%3Abug) ## [0.13.1] ### Fixed -[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.13.1+is%3Aclosed+label%3Abug) +[Bugs fixed](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.13.1+is%3Aclosed+label%3Abug) ## [0.13.0] ### Added -- Preview the problem description [#131](https://github.com/jdneo/vscode-leetcode/issues/131) -- Show top voted solution [#193](https://github.com/jdneo/vscode-leetcode/pull/193) -- Add `collapse all` for the explorer [#197](https://github.com/jdneo/vscode-leetcode/pull/197) +- Preview the problem description [#131](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/131) +- Show top voted solution [#193](https://github.com/LeetCode-OpenSource/vscode-leetcode/pull/193) +- Add `collapse all` for the explorer [#197](https://github.com/LeetCode-OpenSource/vscode-leetcode/pull/197) ### Fixed -[Bugs fixed](https://github.com/jdneo/vscode-leetcode/issues?q=is%3Aissue+is%3Aclosed+milestone%3A0.13.0+label%3Abug) +[Bugs fixed](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues?q=is%3Aissue+is%3Aclosed+milestone%3A0.13.0+label%3Abug) ## [0.12.0] ### Added -- Add new command `LeetCode: Switch Default Language` to support switching the default language [#115](https://github.com/jdneo/vscode-leetcode/issues/115) -- Support `PHP` and `Rust` ([#83](https://github.com/jdneo/vscode-leetcode/issues/83), [#103](https://github.com/jdneo/vscode-leetcode/issues/103)) +- Add new command `LeetCode: Switch Default Language` to support switching the default language [#115](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/115) +- Support `PHP` and `Rust` ([#83](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/83), [#103](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/103)) ### Fixed -- Cannot retrieve time and memory result [#105](https://github.com/jdneo/vscode-leetcode/issues/105) -- Power operator displays in a wrong way [#74](https://github.com/jdneo/vscode-leetcode/issues/74) +- Cannot retrieve time and memory result [#105](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/105) +- Power operator displays in a wrong way [#74](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/74) ## [0.11.0] ### Added -- Add new setting: `leetcode.outputFolder` to customize the sub-directory to save the files generated by 'Show Problem' [#119](https://github.com/jdneo/vscode-leetcode/issues/119) -- Add tooltips for sub-category nodes in LeetCode Explorer [#143](https://github.com/jdneo/vscode-leetcode/pull/143) +- Add new setting: `leetcode.outputFolder` to customize the sub-directory to save the files generated by 'Show Problem' [#119](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/119) +- Add tooltips for sub-category nodes in LeetCode Explorer [#143](https://github.com/LeetCode-OpenSource/vscode-leetcode/pull/143) ### Changed -- Now when triggering 'Show Problem', the extension will not generate a new file if it already exists [#59](https://github.com/jdneo/vscode-leetcode/issues/59) +- Now when triggering 'Show Problem', the extension will not generate a new file if it already exists [#59](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/59) ### Fixed -- Log in timeout when proxy is enabled [#117](https://github.com/jdneo/vscode-leetcode/issues/117) +- Log in timeout when proxy is enabled [#117](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/117) ## [0.10.2] ### Fixed -- Test cases cannot have double quotes [#60](https://github.com/jdneo/vscode-leetcode/issues/60) +- Test cases cannot have double quotes [#60](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/60) ## [0.10.1] ### Changed @@ -183,13 +183,13 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how ## [0.10.0] ### Added -- Add an extension setting to hide solved problems [#95](https://github.com/jdneo/vscode-leetcode/issues/95) -- Support categorize problems by company, tag, difficulty and favorite [#67](https://github.com/jdneo/vscode-leetcode/issues/67) +- Add an extension setting to hide solved problems [#95](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/95) +- Support categorize problems by company, tag, difficulty and favorite [#67](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/67) ## [0.9.0] ### Changed -- Improve the experience of switching endpoint [#85](https://github.com/jdneo/vscode-leetcode/issues/85) -- Use web view to show the result page [#76](https://github.com/jdneo/vscode-leetcode/issues/76) +- Improve the experience of switching endpoint [#85](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/85) +- Use web view to show the result page [#76](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/76) ## [0.8.2] @@ -197,7 +197,7 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how - Add Code Lens for submitting the answer to LeetCode ### Fixed -- Fix the bug that the extension could not automatically sign in [#72](https://github.com/jdneo/vscode-leetcode/issues/72) +- Fix the bug that the extension could not automatically sign in [#72](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/72) ## [0.8.1] ### Changed @@ -205,67 +205,67 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how ## [0.8.0] ### Added -- Support LeetCode CN [#50](https://github.com/jdneo/vscode-leetcode/issues/50) -- Support Windows Subsystem for Linux [#47](https://github.com/jdneo/vscode-leetcode/issues/47) +- Support LeetCode CN [#50](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/50) +- Support Windows Subsystem for Linux [#47](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/47) ## [0.7.0] ### Added -- Add spinner when submitting code [#43](https://github.com/jdneo/vscode-leetcode/issues/43) +- Add spinner when submitting code [#43](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/43) ## [0.6.1] ### Added -- Add Sign in action into LeetCode Explorer title area [#25](https://github.com/jdneo/vscode-leetcode/issues/25) +- Add Sign in action into LeetCode Explorer title area [#25](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/25) ## [0.6.0] ### Changed -- Move LeetCode explorer into activity bar [#39](https://github.com/jdneo/vscode-leetcode/issues/39) +- Move LeetCode explorer into activity bar [#39](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/39) ### Added -- Support trigger test & submit in the editor [#37](https://github.com/jdneo/vscode-leetcode/issues/37) +- Support trigger test & submit in the editor [#37](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/37) ### Fixed -- Fix the bug that cannot show problem [#41](https://github.com/jdneo/vscode-leetcode/issues/41) +- Fix the bug that cannot show problem [#41](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/41) ## [0.5.1] ### Fixed -- Fix the bug when user's path contains white spaces [#34](https://github.com/jdneo/vscode-leetcode/issues/34) +- Fix the bug when user's path contains white spaces [#34](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/34) ## [0.5.0] ### Added -- Support submit and test solution files from the file explorer in VS Code ([#24](https://github.com/jdneo/vscode-leetcode/issues/24), [#26](https://github.com/jdneo/vscode-leetcode/issues/26)) +- Support submit and test solution files from the file explorer in VS Code ([#24](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/24), [#26](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/26)) ## [0.4.0] ### Added -- Support locked problem [#20](https://github.com/jdneo/vscode-leetcode/issues/20) +- Support locked problem [#20](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/20) ### Changed -- Simplify the command 'LeetCode: Test Current File' to 'LeetCode: Test' [#18](https://github.com/jdneo/vscode-leetcode/issues/18) -- Will automatically save current file when 'LeetCode: Test' command is triggered [#17](https://github.com/jdneo/vscode-leetcode/issues/17) +- Simplify the command 'LeetCode: Test Current File' to 'LeetCode: Test' [#18](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/18) +- Will automatically save current file when 'LeetCode: Test' command is triggered [#17](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/17) ## [0.3.0] ### Added -- Test current solution file [#15](https://github.com/jdneo/vscode-leetcode/issues/15) +- Test current solution file [#15](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/15) ## [0.2.1] ### Fixed -- Fix the wrong icon bug in LeetCode Explorer [#9](https://github.com/jdneo/vscode-leetcode/issues/9) -- Fix the switch session bug when login session is expired [#12](https://github.com/jdneo/vscode-leetcode/issues/12) +- Fix the wrong icon bug in LeetCode Explorer [#9](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/9) +- Fix the switch session bug when login session is expired [#12](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/12) ## [0.2.0] ### Added -- Support setting the default language to solve problems [#5](https://github.com/jdneo/vscode-leetcode/issues/5) +- Support setting the default language to solve problems [#5](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/5) ### Fixed -- When user cancels login, no further actions will happen [#10](https://github.com/jdneo/vscode-leetcode/issues/10) +- When user cancels login, no further actions will happen [#10](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/10) ## [0.1.2] ### Fixed -- Fix the duplicated nodes in LeetCode Explorer bug [#6](https://github.com/jdneo/vscode-leetcode/issues/6) +- Fix the duplicated nodes in LeetCode Explorer bug [#6](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/6) ## [0.1.1] ### Fixed -- Fix a bug in LeetCode Explorer [#3](https://github.com/jdneo/vscode-leetcode/issues/3) -- Remove the show problem command from command palette [#4](https://github.com/jdneo/vscode-leetcode/issues/4) +- Fix a bug in LeetCode Explorer [#3](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/3) +- Remove the show problem command from command palette [#4](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/4) ## [0.1.0] ### Added diff --git a/README.md b/README.md index 4cbf9b6f..490db51e 100644 --- a/README.md +++ b/README.md @@ -20,16 +20,16 @@ </a> </p> -- English Document | [中文文档](https://github.com/jdneo/vscode-leetcode/blob/master/docs/README_zh-CN.md) +- English Document | [中文文档](https://github.com/LeetCode-OpenSource/vscode-leetcode/blob/master/docs/README_zh-CN.md) ## ❗️ Attention ❗️- Workaround to login to LeetCode endpoint > Note: If you are using `leetcode-cn.com`, you can just ignore this section. -Recently we observed that [the extension cannot login to leetcode.com endpoint anymore](https://github.com/jdneo/vscode-leetcode/issues/478). The root cause of this issue is that leetcode.com changed its login mechanism and so far there is no ideal way to fix that issue. +Recently we observed that [the extension cannot login to leetcode.com endpoint anymore](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/478). The root cause of this issue is that leetcode.com changed its login mechanism and so far there is no ideal way to fix that issue. Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround which can somehow mitigate this. Now you can simply click the `Sign In` button and then select `Third Party` login or `Cookie` login. -> Note: If you want to use third-party login(**Recommended**), please make sure your account has been connected to the thrid-party. If you want to use `Cookie` login, click [here](https://github.com/jdneo/vscode-leetcode/issues/478#issuecomment-564757098) to see the steps. +> Note: If you want to use third-party login(**Recommended**), please make sure your account has been connected to the thrid-party. If you want to use `Cookie` login, click [here](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/478#issuecomment-564757098) to see the steps. ## Requirements - [VS Code 1.30.1+](https://code.visualstudio.com/) @@ -38,13 +38,13 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh ## Quick Start - + ## Features ### Sign In/Out <p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/sign_in.png" alt="Sign in" /> + <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/sign_in.png" alt="Sign in" /> </p> - Simply click `Sign in to LeetCode` in the `LeetCode Explorer` will let you **sign in** with your LeetCode account. @@ -56,10 +56,10 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh ### Switch Endpoint <p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/endpoint.png" alt="Switch Endpoint" /> + <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/endpoint.png" alt="Switch Endpoint" /> </p> -- By clicking the button  at the **explorer's navigation bar**, you can switch between different endpoints. +- By clicking the button  at the **explorer's navigation bar**, you can switch between different endpoints. - The supported endpoints are: - **leetcode.com** @@ -71,7 +71,7 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh ### Pick a Problem <p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/pick_problem.png" alt="Pick a Problem" /> + <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/pick_problem.png" alt="Pick a Problem" /> </p> - Directly click on the problem or right click the problem in the `LeetCode Explorer` and select `Preview Problem` to see the problem description. @@ -87,7 +87,7 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh ### Editor Shortcuts <p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/shortcuts.png" alt="Editor Shortcuts" /> + <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/shortcuts.png" alt="Editor Shortcuts" /> </p> - The extension supports 4 editor shortcuts (aka Code Lens): @@ -102,16 +102,16 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh ### Search problems by Keywords <p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/search.png" alt="Search problems by Keywords" /> + <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/search.png" alt="Search problems by Keywords" /> </p> -- By clicking the button  at the **explorer's navigation bar**, you can search the problems by keywords. +- By clicking the button  at the **explorer's navigation bar**, you can search the problems by keywords. --- ### Manage Session <p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/session.png" alt="Manage Session" /> + <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/session.png" alt="Manage Session" /> </p> - To manage your LeetCode sessions, just clicking the `LeetCode: ***` at the bottom of the status bar. You can **switch** between sessions or **create**, **delete** a session. @@ -126,7 +126,7 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh | `leetcode.useWsl` | Specify whether to use WSL or not | `false` | | `leetcode.endpoint` | Specify the active endpoint. Supported endpoints are: `leetcode`, `leetcode-cn` | `leetcode` | | `leetcode.workspaceFolder` | Specify the path of the workspace folder to store the problem files. | `""` | -| `leetcode.filePath` | Specify the relative path under the workspace and the file name to save the problem files. More details can be found [here](https://github.com/jdneo/vscode-leetcode/wiki/Customize-the-Relative-Folder-and-the-File-Name-of-the-Problem-File). | | +| `leetcode.filePath` | Specify the relative path under the workspace and the file name to save the problem files. More details can be found [here](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/Customize-the-Relative-Folder-and-the-File-Name-of-the-Problem-File). | | | `leetcode.enableStatusBar` | Specify whether the LeetCode status bar will be shown or not. | `true` | | `leetcode.editor.shortcuts` | Specify the customized shorcuts in editors. Supported values are: `submit`, `test`, `solution` and `description`. | `["submit, test"]` | | `leetcode.enableSideMode` | Specify whether `preview`, `solution` and `submission` tab should be grouped into the second editor column when solving a problem. | `true` | @@ -135,15 +135,15 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh ## Want Help? -When you meet any problem, you can check out the [Troubleshooting](https://github.com/jdneo/vscode-leetcode/wiki/Troubleshooting) and [FAQ](https://github.com/jdneo/vscode-leetcode/wiki/FAQ) first. +When you meet any problem, you can check out the [Troubleshooting](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/Troubleshooting) and [FAQ](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/FAQ) first. -If your problem still cannot be addressed, feel free to reach us in the [Gitter Channel](https://gitter.im/vscode-leetcode/Lobby) or [file an issue](https://github.com/jdneo/vscode-leetcode/issues/new/choose). +If your problem still cannot be addressed, feel free to reach us in the [Gitter Channel](https://gitter.im/vscode-leetcode/Lobby) or [file an issue](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/new/choose). ## Release Notes -Refer to [CHANGELOG](https://github.com/jdneo/vscode-leetcode/blob/master/CHANGELOG.md) +Refer to [CHANGELOG](https://github.com/LeetCode-OpenSource/vscode-leetcode/blob/master/CHANGELOG.md) ## Acknowledgement - This extension is based on [@skygragon](https://github.com/skygragon)'s [leetcode-cli](https://github.com/skygragon/leetcode-cli) open source project. -- Special thanks to our [contributors](https://github.com/jdneo/vscode-leetcode/blob/master/ACKNOWLEDGEMENTS.md). +- Special thanks to our [contributors](https://github.com/LeetCode-OpenSource/vscode-leetcode/blob/master/ACKNOWLEDGEMENTS.md). diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index 89d7d10f..6972902d 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -20,17 +20,17 @@ </a> </p> -- [English Document](https://github.com/jdneo/vscode-leetcode#requirements) | 中文文档 +- [English Document](https://github.com/LeetCode-OpenSource/vscode-leetcode#requirements) | 中文文档 ## ❗️ 注意 ❗️- 无法登录 LeetCode 节点的临时解决办法 > 注意:如果使用的是 `leetcode-cn.com` 账户,可以跳过此段落。 -近期我们发现插件出现了[无法登录 leetcode.com 节点的问题](https://github.com/jdneo/vscode-leetcode/issues/478)。原因是因为近期 leetcode.com 改变了登录机制,目前我们暂时没有找到解决该问题的完美解决方案。 +近期我们发现插件出现了[无法登录 leetcode.com 节点的问题](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/478)。原因是因为近期 leetcode.com 改变了登录机制,目前我们暂时没有找到解决该问题的完美解决方案。 感谢 [@yihong0618](https://github.com/yihong0618) 提供了一个临时解决办法。现在你可以直接点击登录按钮并选择第三方登录或者 `Cookie` 登录。 -> 注意:如果你希望使用第三方登录(**推荐**),请确保你的账户已经与第三方账户连接。如果你希望通过 `Cookie` 登录,请点击[该连接](https://github.com/jdneo/vscode-leetcode/issues/478#issuecomment-564757098)查看登录步骤。 +> 注意:如果你希望使用第三方登录(**推荐**),请确保你的账户已经与第三方账户连接。如果你希望通过 `Cookie` 登录,请点击[该连接](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/478#issuecomment-564757098)查看登录步骤。 ## 运行条件 - [VS Code 1.23.0+](https://code.visualstudio.com/) @@ -39,13 +39,13 @@ ## 快速开始 - + ## 功能 ### 登入登出 <p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/sign_in.png" alt="登入登出" /> + <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/sign_in.png" alt="登入登出" /> </p> - 点击 `LeetCode Explorer` 中的 `Sign in to LeetCode` 即可登入。 @@ -57,10 +57,10 @@ ### 切换 LeetCode 版本 <p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/endpoint.png" alt="切换 LeetCode 版本" /> + <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/endpoint.png" alt="切换 LeetCode 版本" /> </p> -- LeetCode 目前有**英文版**和**中文版**两种版本。点击 `LeetCode Explorer` 导航栏中的  按钮可切换版本。 +- LeetCode 目前有**英文版**和**中文版**两种版本。点击 `LeetCode Explorer` 导航栏中的  按钮可切换版本。 - 目前可切换的版本有: - **leetcode.com** @@ -72,7 +72,7 @@ ### 选择题目 <p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/pick_problem.png" alt="选择题目" /> + <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/pick_problem.png" alt="选择题目" /> </p> - 直接点击题目或者在 `LeetCode Explorer` 中**右键**题目并选择 `Preview Problem` 可查看题目描述 @@ -88,7 +88,7 @@ ### 编辑器快捷方式 <p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/shortcuts.png" alt="Editor Shortcuts" /> + <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/shortcuts.png" alt="Editor Shortcuts" /> </p> - 插件会在编辑区域内支持四种不同的快捷方式(Code Lens): @@ -103,16 +103,16 @@ ### 通过关键字搜索题目 <p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/search.png" alt="通过关键字搜索题目" /> + <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/search.png" alt="通过关键字搜索题目" /> </p> -- 点击 `LeetCode Explorer` 导航栏中的  按钮可按照关键字搜索题目。 +- 点击 `LeetCode Explorer` 导航栏中的  按钮可按照关键字搜索题目。 --- ### 管理存档 <p align="center"> - <img src="https://raw.githubusercontent.com/jdneo/vscode-leetcode/master/docs/imgs/session.png" alt="管理存档" /> + <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/session.png" alt="管理存档" /> </p> - 点击位于 VS Code 底部状态栏的 `LeetCode: ***` 管理 `LeetCode 存档`。你可以**切换**存档或者**创建**,**删除**存档。 @@ -127,7 +127,7 @@ | `leetcode.useWsl` | 指定是否启用 WSL | `false` | | `leetcode.endpoint` | 指定使用的终端,可用终端有:`leetcode`, `leetcode-cn` | `leetcode` | | `leetcode.workspaceFolder` | 指定保存文件的工作区目录 | `""` | -| `leetcode.filePath` | 指定生成题目文件的相对文件夹路径名和文件名。点击查看[更多详细用法](https://github.com/jdneo/vscode-leetcode/wiki/%E8%87%AA%E5%AE%9A%E4%B9%89%E9%A2%98%E7%9B%AE%E6%96%87%E4%BB%B6%E7%9A%84%E7%9B%B8%E5%AF%B9%E6%96%87%E4%BB%B6%E5%A4%B9%E8%B7%AF%E5%BE%84%E5%92%8C%E6%96%87%E4%BB%B6%E5%90%8D)。 | | +| `leetcode.filePath` | 指定生成题目文件的相对文件夹路径名和文件名。点击查看[更多详细用法](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/%E8%87%AA%E5%AE%9A%E4%B9%89%E9%A2%98%E7%9B%AE%E6%96%87%E4%BB%B6%E7%9A%84%E7%9B%B8%E5%AF%B9%E6%96%87%E4%BB%B6%E5%A4%B9%E8%B7%AF%E5%BE%84%E5%92%8C%E6%96%87%E4%BB%B6%E5%90%8D)。 | | | `leetcode.enableStatusBar` | 指定是否在 VS Code 下方显示插件状态栏。 | `true` | | `leetcode.editor.shortcuts` | 指定在编辑器内所自定义的快捷方式。可用的快捷方式有: `submit`, `test`, `solution`, `description`。 | `["submit, test"]` | | `leetcode.enableSideMode` | 指定在解决一道题时,是否将`问题预览`、`高票答案`与`提交结果`窗口集中在编辑器的第二栏。 | `true` | @@ -135,15 +135,15 @@ | `leetcode.showCommentDescription` | 指定是否要在注释中显示题干。 | `false` | ## 需要帮助? -在遇到任何问题时,可以先查看一下[疑难解答](https://github.com/jdneo/vscode-leetcode/wiki/%E7%96%91%E9%9A%BE%E8%A7%A3%E7%AD%94)以及[常见问题](https://github.com/jdneo/vscode-leetcode/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98)寻求帮助。 +在遇到任何问题时,可以先查看一下[疑难解答](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/%E7%96%91%E9%9A%BE%E8%A7%A3%E7%AD%94)以及[常见问题](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98)寻求帮助。 -如果您的问题依然没有解决,可以在 [Gitter Channel](https://gitter.im/vscode-leetcode/Lobby) 联系我们,或者您也可以[记录一个新的 issue](https://github.com/jdneo/vscode-leetcode/issues/new/choose)。 +如果您的问题依然没有解决,可以在 [Gitter Channel](https://gitter.im/vscode-leetcode/Lobby) 联系我们,或者您也可以[记录一个新的 issue](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/new/choose)。 ## 更新日志 -请参考[更新日志](https://github.com/jdneo/vscode-leetcode/blob/master/CHANGELOG.md) +请参考[更新日志](https://github.com/LeetCode-OpenSource/vscode-leetcode/blob/master/CHANGELOG.md) ## 鸣谢 - 本插件基于[@skygragon](https://github.com/skygragon)的[leetcode-cli](https://github.com/skygragon/leetcode-cli)开源项目制作。 -- 特别鸣谢这些[贡献者们](https://github.com/jdneo/vscode-leetcode/blob/master/ACKNOWLEDGEMENTS.md)。 +- 特别鸣谢这些[贡献者们](https://github.com/LeetCode-OpenSource/vscode-leetcode/blob/master/ACKNOWLEDGEMENTS.md)。 diff --git a/package.json b/package.json index 90d6f0e1..b6164f17 100644 --- a/package.json +++ b/package.json @@ -12,9 +12,9 @@ }, "repository": { "type": "git", - "url": "https://github.com/jdneo/vscode-leetcode" + "url": "https://github.com/LeetCode-OpenSource/vscode-leetcode" }, - "homepage": "https://github.com/jdneo/vscode-leetcode/blob/master/README.md", + "homepage": "https://github.com/LeetCode-OpenSource/vscode-leetcode/blob/master/README.md", "categories": [ "Other", "Snippets" From 7bc6d6ca55954b3d53cfc1481ea4fdc1303d21b1 Mon Sep 17 00:00:00 2001 From: Jerry Zou <jerry.zry@outlook.com> Date: Thu, 2 Jul 2020 12:16:37 +0800 Subject: [PATCH 66/92] chore: update copyright parts of license (#592) --- LICENSE | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 4401d6f6..fffb65eb 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,7 @@ MIT License -Copyright (c) 2018 jdneo +Copyright (c) 2020-present 力扣 +Copyright (c) 2018-2019 jdneo Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From ade48fbbea9fd55bff628fe95e948c4d694871e1 Mon Sep 17 00:00:00 2001 From: yihong <zouzou0208@gmail.com> Date: Tue, 21 Jul 2020 11:29:12 +0800 Subject: [PATCH 67/92] add: star command in shortcuts (#601) --- README.md | 5 +++-- docs/README_zh-CN.md | 5 +++-- package.json | 8 ++++++++ src/codelens/CodeLensController.ts | 4 ++-- src/codelens/CustomCodeLensProvider.ts | 19 ++++++++++++++++++- src/commands/star.ts | 12 ++++++++++-- src/utils/settingUtils.ts | 5 +++++ 7 files changed, 49 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 490db51e..3396d0c7 100644 --- a/README.md +++ b/README.md @@ -90,9 +90,10 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/shortcuts.png" alt="Editor Shortcuts" /> </p> -- The extension supports 4 editor shortcuts (aka Code Lens): +- The extension supports 5 editor shortcuts (aka Code Lens): - `Submit`: Submit your answer to LeetCode. - `Test`: Test your answer with customized test cases. + - `Star/Unstar`: Star or unstar the current problem. - `Solution`: Show the top voted solution for the current problem. - `Description`: Show the problem description page. @@ -128,7 +129,7 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh | `leetcode.workspaceFolder` | Specify the path of the workspace folder to store the problem files. | `""` | | `leetcode.filePath` | Specify the relative path under the workspace and the file name to save the problem files. More details can be found [here](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/Customize-the-Relative-Folder-and-the-File-Name-of-the-Problem-File). | | | `leetcode.enableStatusBar` | Specify whether the LeetCode status bar will be shown or not. | `true` | -| `leetcode.editor.shortcuts` | Specify the customized shorcuts in editors. Supported values are: `submit`, `test`, `solution` and `description`. | `["submit, test"]` | +| `leetcode.editor.shortcuts` | Specify the customized shorcuts in editors. Supported values are: `submit`, `test`, `star`, `solution` and `description`. | `["submit, test"]` | | `leetcode.enableSideMode` | Specify whether `preview`, `solution` and `submission` tab should be grouped into the second editor column when solving a problem. | `true` | | `leetcode.nodePath` | Specify the `Node.js` executable path. for example, C:\Program Files\nodejs\node.exe | `node` | | `leetcode.showCommentDescription` | Specify whether to include the problem description in the comments | `false` | diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index 6972902d..608c6226 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -91,9 +91,10 @@ <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/shortcuts.png" alt="Editor Shortcuts" /> </p> -- 插件会在编辑区域内支持四种不同的快捷方式(Code Lens): +- 插件会在编辑区域内支持五种不同的快捷方式(Code Lens): - `Submit`: 提交你的答案至 LeetCode; - `Test`: 用给定的测试用例测试你的答案; + - `Star`: 收藏或取消收藏该问题; - `Solution`: 显示该问题的高票解答; - `Description`: 显示该问题的题目描述。 @@ -129,7 +130,7 @@ | `leetcode.workspaceFolder` | 指定保存文件的工作区目录 | `""` | | `leetcode.filePath` | 指定生成题目文件的相对文件夹路径名和文件名。点击查看[更多详细用法](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/%E8%87%AA%E5%AE%9A%E4%B9%89%E9%A2%98%E7%9B%AE%E6%96%87%E4%BB%B6%E7%9A%84%E7%9B%B8%E5%AF%B9%E6%96%87%E4%BB%B6%E5%A4%B9%E8%B7%AF%E5%BE%84%E5%92%8C%E6%96%87%E4%BB%B6%E5%90%8D)。 | | | `leetcode.enableStatusBar` | 指定是否在 VS Code 下方显示插件状态栏。 | `true` | -| `leetcode.editor.shortcuts` | 指定在编辑器内所自定义的快捷方式。可用的快捷方式有: `submit`, `test`, `solution`, `description`。 | `["submit, test"]` | +| `leetcode.editor.shortcuts` | 指定在编辑器内所自定义的快捷方式。可用的快捷方式有: `submit`, `test`, `star`, `solution`, `description`。 | `["submit, test"]` | | `leetcode.enableSideMode` | 指定在解决一道题时,是否将`问题预览`、`高票答案`与`提交结果`窗口集中在编辑器的第二栏。 | `true` | | `leetcode.nodePath` | 指定 `Node.js` 可执行文件的路径。如:C:\Program Files\nodejs\node.exe | `node` | | `leetcode.showCommentDescription` | 指定是否要在注释中显示题干。 | `false` | diff --git a/package.json b/package.json index b6164f17..81a8536b 100644 --- a/package.json +++ b/package.json @@ -629,8 +629,16 @@ "enum": [ "submit", "test", + "star", "solution", "description" + ], + "enumDescriptions": [ + "Submit your answer to LeetCode.", + "Test your answer with customized test cases.", + "Star or unstar the current problem.", + "Show the top voted solution for the current problem.", + "Show the problem description page." ] }, "description": "Customize the shorcuts in editors." diff --git a/src/codelens/CodeLensController.ts b/src/codelens/CodeLensController.ts index 8e2fa3c9..b41f28f0 100644 --- a/src/codelens/CodeLensController.ts +++ b/src/codelens/CodeLensController.ts @@ -2,7 +2,7 @@ // Licensed under the MIT license. import { ConfigurationChangeEvent, Disposable, languages, workspace } from "vscode"; -import { CustomCodeLensProvider } from "./CustomCodeLensProvider"; +import { customCodeLensProvider, CustomCodeLensProvider } from "./CustomCodeLensProvider"; class CodeLensController implements Disposable { private internalProvider: CustomCodeLensProvider; @@ -10,7 +10,7 @@ class CodeLensController implements Disposable { private configurationChangeListener: Disposable; constructor() { - this.internalProvider = new CustomCodeLensProvider(); + this.internalProvider = customCodeLensProvider; this.configurationChangeListener = workspace.onDidChangeConfiguration((event: ConfigurationChangeEvent) => { if (event.affectsConfiguration("leetcode.editor.shortcuts")) { diff --git a/src/codelens/CustomCodeLensProvider.ts b/src/codelens/CustomCodeLensProvider.ts index 4764e999..4b9b6491 100644 --- a/src/codelens/CustomCodeLensProvider.ts +++ b/src/codelens/CustomCodeLensProvider.ts @@ -2,6 +2,8 @@ // Licensed under the MIT license. import * as vscode from "vscode"; +import { explorerNodeManager } from "../explorer/explorerNodeManager"; +import { LeetCodeNode } from "../explorer/LeetCodeNode"; import { getEditorShortcuts } from "../utils/settingUtils"; export class CustomCodeLensProvider implements vscode.CodeLensProvider { @@ -23,10 +25,15 @@ export class CustomCodeLensProvider implements vscode.CodeLensProvider { } const content: string = document.getText(); - const matchResult: RegExpMatchArray | null = content.match(/@lc app=.* id=.* lang=.*/); + const matchResult: RegExpMatchArray | null = content.match(/@lc app=.* id=(.*) lang=.*/); if (!matchResult) { return undefined; } + const nodeId: string | undefined = matchResult[1]; + let node: LeetCodeNode | undefined; + if (nodeId) { + node = explorerNodeManager.getNodeById(nodeId); + } let codeLensLine: number = document.lineCount - 1; for (let i: number = document.lineCount - 1; i >= 0; i--) { @@ -56,6 +63,14 @@ export class CustomCodeLensProvider implements vscode.CodeLensProvider { })); } + if (shortcuts.indexOf("star") >= 0 && node) { + codeLens.push(new vscode.CodeLens(range, { + title: node.isFavorite ? "Unstar" : "Star", + command: node.isFavorite ? "leetcode.removeFavorite" : "leetcode.addFavorite", + arguments: [node], + })); + } + if (shortcuts.indexOf("solution") >= 0) { codeLens.push(new vscode.CodeLens(range, { title: "Solution", @@ -75,3 +90,5 @@ export class CustomCodeLensProvider implements vscode.CodeLensProvider { return codeLens; } } + +export const customCodeLensProvider: CustomCodeLensProvider = new CustomCodeLensProvider(); diff --git a/src/commands/star.ts b/src/commands/star.ts index baae0b07..36611499 100644 --- a/src/commands/star.ts +++ b/src/commands/star.ts @@ -2,15 +2,20 @@ // Copyright (c) jdneo. All rights reserved. // Licensed under the MIT license. +import { customCodeLensProvider } from "../codelens/CustomCodeLensProvider"; import { LeetCodeNode } from "../explorer/LeetCodeNode"; import { leetCodeTreeDataProvider } from "../explorer/LeetCodeTreeDataProvider"; import { leetCodeExecutor } from "../leetCodeExecutor"; +import { hasStarShortcut } from "../utils/settingUtils"; import { DialogType, promptForOpenOutputChannel } from "../utils/uiUtils"; export async function addFavorite(node: LeetCodeNode): Promise<void> { try { await leetCodeExecutor.toggleFavorite(node, true); - leetCodeTreeDataProvider.refresh(); + await leetCodeTreeDataProvider.refresh(); + if (hasStarShortcut()) { + customCodeLensProvider.refresh(); + } } catch (error) { await promptForOpenOutputChannel("Failed to add the problem to favorite. Please open the output channel for details.", DialogType.error); } @@ -19,7 +24,10 @@ export async function addFavorite(node: LeetCodeNode): Promise<void> { export async function removeFavorite(node: LeetCodeNode): Promise<void> { try { await leetCodeExecutor.toggleFavorite(node, false); - leetCodeTreeDataProvider.refresh(); + await leetCodeTreeDataProvider.refresh(); + if (hasStarShortcut()) { + customCodeLensProvider.refresh(); + } } catch (error) { await promptForOpenOutputChannel("Failed to remove the problem from favorite. Please open the output channel for details.", DialogType.error); } diff --git a/src/utils/settingUtils.ts b/src/utils/settingUtils.ts index 8c94a95f..207604fa 100644 --- a/src/utils/settingUtils.ts +++ b/src/utils/settingUtils.ts @@ -20,6 +20,11 @@ export function getEditorShortcuts(): string[] { return getWorkspaceConfiguration().get<string[]>("editor.shortcuts", ["submit", "test"]); } +export function hasStarShortcut(): boolean { + const shortcuts: string[] = getWorkspaceConfiguration().get<string[]>("editor.shortcuts", ["submit", "test"]); + return shortcuts.indexOf("star") >= 0; +} + export function getDescriptionConfiguration(): IDescriptionConfiguration { const setting: string = getWorkspaceConfiguration().get<string>("showDescription", DescriptionConfiguration.InWebView); const config: IDescriptionConfiguration = { From 5fa449e58f6e198ddb4fd481490c1ddc050dacb4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Jul 2020 12:35:27 +0800 Subject: [PATCH 68/92] chore(deps): bump lodash from 4.17.13 to 4.17.19 (#597) Bumps [lodash](https://github.com/lodash/lodash) from 4.17.13 to 4.17.19. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.13...4.17.19) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2332f2e1..f378577b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -839,9 +839,9 @@ } }, "lodash": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.13.tgz", - "integrity": "sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA==" + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" }, "log-symbols": { "version": "2.2.0", diff --git a/package.json b/package.json index 81a8536b..b1759a52 100644 --- a/package.json +++ b/package.json @@ -680,7 +680,7 @@ "dependencies": { "fs-extra": "^6.0.1", "highlight.js": "^9.15.6", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", "unescape-js": "^1.1.1", From 1893d34a64c567cbfb7a2872b59e0f88e8910347 Mon Sep 17 00:00:00 2001 From: yihong <zouzou0208@gmail.com> Date: Thu, 23 Jul 2020 16:20:01 +0800 Subject: [PATCH 69/92] fix: #593 by adding global flag to remove cache (#602) --- src/extension.ts | 2 +- src/leetCodeExecutor.ts | 25 +++++++++++++++++++++---- src/shared.ts | 2 ++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 9bb3ad41..5bd026f1 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -26,7 +26,7 @@ import { markdownEngine } from "./webview/markdownEngine"; export async function activate(context: vscode.ExtensionContext): Promise<void> { try { - if (!await leetCodeExecutor.meetRequirements()) { + if (!await leetCodeExecutor.meetRequirements(context)) { throw new Error("The environment doesn't meet requirements."); } diff --git a/src/leetCodeExecutor.ts b/src/leetCodeExecutor.ts index 4c0aa312..5157b6c1 100644 --- a/src/leetCodeExecutor.ts +++ b/src/leetCodeExecutor.ts @@ -3,10 +3,12 @@ import * as cp from "child_process"; import * as fse from "fs-extra"; +import * as os from "os"; import * as path from "path"; import * as requireFromString from "require-from-string"; +import { ExtensionContext } from "vscode"; import { ConfigurationChangeEvent, Disposable, MessageItem, window, workspace, WorkspaceConfiguration } from "vscode"; -import { Endpoint, IProblem, supportedPlugins } from "./shared"; +import { Endpoint, IProblem, leetcodeHasInited, supportedPlugins } from "./shared"; import { executeCommand, executeCommandWithProgress } from "./utils/cpUtils"; import { DialogOptions, openUrl } from "./utils/uiUtils"; import * as wsl from "./utils/wslUtils"; @@ -34,7 +36,11 @@ class LeetCodeExecutor implements Disposable { return `"${path.join(this.leetCodeRootPath, "bin", "leetcode")}"`; } - public async meetRequirements(): Promise<boolean> { + public async meetRequirements(context: ExtensionContext): Promise<boolean> { + const hasInited: boolean | undefined = context.globalState.get(leetcodeHasInited); + if (!hasInited) { + await this.removeOldCache(); + } if (this.nodeExecutable !== "node") { if (!await fse.pathExists(this.nodeExecutable)) { throw new Error(`The Node.js executable does not exist on path ${this.nodeExecutable}`); @@ -60,10 +66,13 @@ class LeetCodeExecutor implements Disposable { for (const plugin of supportedPlugins) { try { // Check plugin await this.executeCommandEx(this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "plugin", "-e", plugin]); - } catch (error) { // Download plugin and activate + } catch (error) { // Remove old cache that may cause the error download plugin and activate + await this.removeOldCache(); await this.executeCommandEx(this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "plugin", "-i", plugin]); } } + // Set the global state HasInited true to skip delete old cache after init + context.globalState.update(leetcodeHasInited, true); return true; } @@ -76,7 +85,7 @@ class LeetCodeExecutor implements Disposable { } public async signOut(): Promise<string> { - return await await this.executeCommandEx(this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "user", "-L"]); + return await this.executeCommandEx(this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "user", "-L"]); } public async listProblems(showLocked: boolean): Promise<string> { @@ -194,6 +203,14 @@ class LeetCodeExecutor implements Disposable { } return await executeCommandWithProgress(message, command, args, options); } + + private async removeOldCache(): Promise<void> { + const oldPath: string = path.join(os.homedir(), ".lc"); + if (await fse.pathExists(oldPath)) { + await fse.remove(oldPath); + } + } + } export const leetCodeExecutor: LeetCodeExecutor = new LeetCodeExecutor(); diff --git a/src/shared.ts b/src/shared.ts index 9b6a749a..e09943f8 100644 --- a/src/shared.ts +++ b/src/shared.ts @@ -114,3 +114,5 @@ export enum DescriptionConfiguration { Both = "Both", None = "None", } + +export const leetcodeHasInited: string = "leetcode.hasInited"; From 4c0d59a4a5400cb490ff575931b94b620815f694 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Dec 2020 11:05:35 +0800 Subject: [PATCH 70/92] chore(deps): bump ini from 1.3.5 to 1.3.7 (#656) Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7. - [Release notes](https://github.com/isaacs/ini/releases) - [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f378577b..50c5fbc2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -686,9 +686,9 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" }, "invert-kv": { "version": "1.0.0", From 172c87817e834e6250229cd130037d791a83dd53 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Mon, 31 May 2021 11:26:49 +0800 Subject: [PATCH 71/92] chore: Use GitHub Actions for CI (#709) --- .github/workflows/build.yml | 71 +++++++++++++++++++++++++++++++++++++ .travis.yml | 19 ---------- .vscodeignore | 1 - README.md | 4 +-- docs/README_zh-CN.md | 4 +-- 5 files changed, 75 insertions(+), 24 deletions(-) create mode 100644 .github/workflows/build.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..1df11a00 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,71 @@ +name: CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + linux: + name: Linux + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v2 + + - name: Setup Node.js environment + uses: actions/setup-node@v2 + with: + node-version: 12 + + - name: Install Node.js modules + run: npm install + + - name: Lint + run: npm run lint + + - name: VSCE Packge + run: npx vsce package + + windows: + name: Windows + runs-on: windows-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v2 + + - name: Setup Node.js environment + uses: actions/setup-node@v2 + with: + node-version: 12 + + - name: Install Node.js modules + run: npm install + + - name: Lint + run: npm run lint + + - name: VSCE Packge + run: npx vsce package + + darwin: + name: macOS + runs-on: macos-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v2 + + - name: Setup Node.js environment + uses: actions/setup-node@v2 + with: + node-version: 12 + + - name: Install Node.js modules + run: npm install + + - name: Lint + run: npm run lint + + - name: VSCE Packge + run: npx vsce package diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 6bbae841..00000000 --- a/.travis.yml +++ /dev/null @@ -1,19 +0,0 @@ -language: node_js - -node_js: - - 'lts/*' - -before_install: - - if [ $TRAVIS_OS_NAME == "linux" ]; then - export CXX="g++-4.9" CC="gcc-4.9" DISPLAY=:99.0; - sh -e /etc/init.d/xvfb start; - sleep 3; - fi - -install: - - npm install -g vsce - - npm install - -script: - - npm run lint - - vsce package diff --git a/.vscodeignore b/.vscodeignore index 8cdceec0..7a04907d 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -5,7 +5,6 @@ test/** src/** **/*.map .gitignore -.travis.yml package-lock.json tsconfig.json tslint.json diff --git a/README.md b/README.md index 3396d0c7..b432be98 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/resources/LeetCode.png" alt=""> </p> <p align="center"> - <a href="https://travis-ci.org/LeetCode-OpenSource/vscode-leetcode"> - <img src="https://img.shields.io/travis/LeetCode-OpenSource/vscode-leetcode.svg?style=flat-square" alt=""> + <a href="https://github.com/LeetCode-OpenSource/vscode-leetcode/actions?query=workflow%3ACI+branch%3Amaster"> + <img src="https://img.shields.io/github/workflow/status/LeetCode-OpenSource/vscode-leetcode/CI/master?style=flat-square" alt=""> </a> <a href="https://gitter.im/vscode-leetcode/Lobby"> <img src="https://img.shields.io/gitter/room/LeetCode-OpenSource/vscode-leetcode.svg?style=flat-square" alt=""> diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index 608c6226..e4760015 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -6,8 +6,8 @@ <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/resources/LeetCode.png" alt=""> </p> <p align="center"> - <a href="https://travis-ci.org/LeetCode-OpenSource/vscode-leetcode"> - <img src="https://img.shields.io/travis/LeetCode-OpenSource/vscode-leetcode.svg?style=flat-square" alt=""> + <a href="https://github.com/LeetCode-OpenSource/vscode-leetcode/actions?query=workflow%3ACI+branch%3Amaster"> + <img src="https://img.shields.io/github/workflow/status/LeetCode-OpenSource/vscode-leetcode/CI/master?style=flat-square" alt=""> </a> <a href="https://gitter.im/vscode-leetcode/Lobby"> <img src="https://img.shields.io/gitter/room/LeetCode-OpenSource/vscode-leetcode.svg?style=flat-square" alt=""> From 6b95d5c015d90008f9d99001ac0655ef82e4d30f Mon Sep 17 00:00:00 2001 From: Tejasvi S Tomar <45873379+tejasvi@users.noreply.github.com> Date: Mon, 31 May 2021 09:01:16 +0530 Subject: [PATCH 72/92] chore: Fix typo (#694) Co-authored-by: Sheng Chen <sheche@microsoft.com> --- README.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b432be98..35fd0cad 100644 --- a/README.md +++ b/README.md @@ -129,7 +129,7 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh | `leetcode.workspaceFolder` | Specify the path of the workspace folder to store the problem files. | `""` | | `leetcode.filePath` | Specify the relative path under the workspace and the file name to save the problem files. More details can be found [here](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/Customize-the-Relative-Folder-and-the-File-Name-of-the-Problem-File). | | | `leetcode.enableStatusBar` | Specify whether the LeetCode status bar will be shown or not. | `true` | -| `leetcode.editor.shortcuts` | Specify the customized shorcuts in editors. Supported values are: `submit`, `test`, `star`, `solution` and `description`. | `["submit, test"]` | +| `leetcode.editor.shortcuts` | Specify the customized shortcuts in editors. Supported values are: `submit`, `test`, `star`, `solution` and `description`. | `["submit, test"]` | | `leetcode.enableSideMode` | Specify whether `preview`, `solution` and `submission` tab should be grouped into the second editor column when solving a problem. | `true` | | `leetcode.nodePath` | Specify the `Node.js` executable path. for example, C:\Program Files\nodejs\node.exe | `node` | | `leetcode.showCommentDescription` | Specify whether to include the problem description in the comments | `false` | diff --git a/package.json b/package.json index b1759a52..4a2ef54a 100644 --- a/package.json +++ b/package.json @@ -641,7 +641,7 @@ "Show the problem description page." ] }, - "description": "Customize the shorcuts in editors." + "description": "Customize the shortcuts in editors." }, "leetcode.enableSideMode": { "type": "boolean", From 0fcf9f1f404f2af10c0917db46c399af5049c3ee Mon Sep 17 00:00:00 2001 From: Zhizhang Deng <reg@2011ysyb.com> Date: Mon, 31 May 2021 01:40:04 -0400 Subject: [PATCH 73/92] feat: Added an option to disable endpoint translation (#690) Co-authored-by: Sheng Chen <sheche@microsoft.com> --- package-lock.json | 2154 ++++++++++++++++++++++++++++++++++++- package.json | 10 +- src/commands/list.ts | 4 +- src/commands/show.ts | 11 +- src/leetCodeExecutor.ts | 54 +- src/utils/settingUtils.ts | 4 + 6 files changed, 2209 insertions(+), 28 deletions(-) diff --git a/package-lock.json b/package-lock.json index 50c5fbc2..4afd04fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,2141 @@ { "name": "vscode-leetcode", "version": "0.17.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "version": "0.17.0", + "license": "MIT", + "dependencies": { + "fs-extra": "^6.0.1", + "highlight.js": "^9.15.6", + "lodash": "^4.17.19", + "markdown-it": "^8.4.2", + "require-from-string": "^2.0.2", + "unescape-js": "^1.1.1", + "vsc-leetcode-cli": "^2.8.0" + }, + "devDependencies": { + "@types/fs-extra": "5.0.0", + "@types/highlight.js": "^9.12.3", + "@types/lodash": "^4.14.123", + "@types/markdown-it": "0.0.7", + "@types/mocha": "^2.2.42", + "@types/node": "^7.0.43", + "@types/require-from-string": "^1.2.0", + "@types/vscode": "1.42.0", + "tslint": "^5.9.1", + "typescript": "^2.6.1" + }, + "engines": { + "vscode": "^1.42.0" + } + }, + "node_modules/@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "node_modules/@types/fs-extra": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/highlight.js": { + "version": "9.12.3", + "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.3.tgz", + "integrity": "sha512-pGF/zvYOACZ/gLGWdQH8zSwteQS1epp68yRcVLJMgUck/MjEn/FBYmPub9pXT8C1e4a8YZfHo1CKyV8q1vKUnQ==", + "dev": true + }, + "node_modules/@types/linkify-it": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-2.0.4.tgz", + "integrity": "sha512-9o5piu3tP6DwqT+Cyf7S3BitsTc6Cl0pCPKUhIE5hzQbtueiBXdtBipTLLvaGfT11/8XHRmsagu4YfBesTaiCA==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.123", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.123.tgz", + "integrity": "sha512-pQvPkc4Nltyx7G1Ww45OjVqUsJP4UsZm+GWJpigXgkikZqJgRm4c48g027o6tdgubWHwFRF15iFd+Y4Pmqv6+Q==", + "dev": true + }, + "node_modules/@types/markdown-it": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-0.0.7.tgz", + "integrity": "sha512-WyL6pa76ollQFQNEaLVa41ZUUvDvPY+qAUmlsphnrpL6I9p1m868b26FyeoOmo7X3/Ta/S9WKXcEYXUSHnxoVQ==", + "dev": true, + "dependencies": { + "@types/linkify-it": "*" + } + }, + "node_modules/@types/mocha": { + "version": "2.2.48", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", + "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.3.tgz", + "integrity": "sha512-HeyK+csRk7Khhg9krpMGJeT9pLzjsmiJFHYRzYpPv/dQ5tPclQsbvceiX/HKynRt/9lMLorWUYTbBHC3hRI4sg==", + "dev": true + }, + "node_modules/@types/require-from-string": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/require-from-string/-/require-from-string-1.2.0.tgz", + "integrity": "sha512-5vE9WoOOC9/DoD3Zj53UISpM+5tSvh8k0mL4fe2zFI6vO715/W4IQ3EdVUrWVMrFi1/NZhyMvm2iKsDFkEGddQ==", + "dev": true + }, + "node_modules/@types/vscode": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.42.0.tgz", + "integrity": "sha512-ds6TceMsh77Fs0Mq0Vap6Y72JbGWB8Bay4DrnJlf5d9ui2RSe1wis13oQm+XhguOeH1HUfLGzaDAoupTUtgabw==", + "dev": true + }, + "node_modules/abab": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", + "optional": true + }, + "node_modules/acorn": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", + "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", + "optional": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", + "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", + "optional": true, + "dependencies": { + "acorn": "^2.1.0" + } + }, + "node_modules/ajv": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "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" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", + "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" + }, + "node_modules/babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cheerio": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.20.0.tgz", + "integrity": "sha1-XHEPK6uVZTJyhCugHG6mGzVF7DU=", + "dependencies": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "~3.8.1", + "lodash": "^4.1.0" + }, + "engines": { + "node": ">= 0.6" + }, + "optionalDependencies": { + "jsdom": "^7.0.2" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-spinners": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dependencies": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "node_modules/css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "engines": { + "node": "*" + } + }, + "node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "optional": true + }, + "node_modules/cssstyle": { + "version": "0.2.37", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", + "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", + "optional": true, + "dependencies": { + "cssom": "0.3.x" + } + }, + "node_modules/cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-equal": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz", + "integrity": "sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0=" + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "optional": true + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dependencies": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/domhandler": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "optional": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "optional": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "optional": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", + "engines": { + "node": "> 0.1.90" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "optional": true + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fs-extra": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", + "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "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" + }, + "engines": { + "node": "*" + } + }, + "node_modules/graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dependencies": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/highlight.js": { + "version": "9.15.6", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.6.tgz", + "integrity": "sha512-zozTAWM1D6sozHo8kqhfYgsac+B+q0PmsjXeyDrYIHHcBN0zTVT66+s2GW1GZv7DbyaROdLXKdabwS/WqPyIdQ==", + "engines": { + "node": "*" + } + }, + "node_modules/htmlparser2": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", + "dependencies": { + "domelementtype": "1", + "domhandler": "2.3", + "domutils": "1.5", + "entities": "1.0", + "readable-stream": "1.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=" + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/i": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", + "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "node_modules/jsdom": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz", + "integrity": "sha1-QLQCdwwr2iNGkJa+6Rq2deOx/G4=", + "optional": true, + "dependencies": { + "abab": "^1.0.0", + "acorn": "^2.4.0", + "acorn-globals": "^1.0.4", + "cssom": ">= 0.3.0 < 0.4.0", + "cssstyle": ">= 0.2.29 < 0.3.0", + "escodegen": "^1.6.1", + "nwmatcher": ">= 1.3.7 < 2.0.0", + "parse5": "^1.5.1", + "request": "^2.55.0", + "sax": "^1.1.4", + "symbol-tree": ">= 3.1.0 < 4.0.0", + "tough-cookie": "^2.2.0", + "webidl-conversions": "^2.0.0", + "whatwg-url-compat": "~0.6.5", + "xml-name-validator": ">= 2.0.1 < 3.0.0" + } + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "optional": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/linkify-it": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.1.0.tgz", + "integrity": "sha512-4REs8/062kV2DSHxNfq5183zrqXMl7WP0WzABH9IeJI+NLm429FgE1PDecltYfnOoFDFlZGh2T8PfZn0r+GTRg==", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/markdown-it": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", + "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", + "dependencies": { + "argparse": "^1.0.7", + "entities": "~1.1.1", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, + "node_modules/mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dependencies": { + "mime-db": "1.44.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/moment": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", + "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==", + "engines": { + "node": "*" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "node_modules/nconf": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.10.0.tgz", + "integrity": "sha512-fKiXMQrpP7CYWJQzKkPPx9hPgmq+YLDyxcG9N8RpiE9FoCkCbzD0NyW0YhE3xn3Aupe7nnDeIx4PFzYehpHT9Q==", + "dependencies": { + "async": "^1.4.0", + "ini": "^1.3.0", + "secure-keys": "^1.0.0", + "yargs": "^3.19.0" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/nconf/node_modules/yargs": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", + "dependencies": { + "camelcase": "^2.0.1", + "cliui": "^3.0.3", + "decamelize": "^1.1.1", + "os-locale": "^1.4.0", + "string-width": "^1.0.1", + "window-size": "^0.1.4", + "y18n": "^3.2.0" + } + }, + "node_modules/ncp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz", + "integrity": "sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY=", + "bin": { + "ncp": "bin/ncp" + } + }, + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nwmatcher": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", + "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==", + "optional": true + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "optional": true, + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.0.0.tgz", + "integrity": "sha512-LBS97LFe2RV6GJmXBi6OKcETKyklHNMV0xw7BtsVn2MlsgsydyZetSCbCANr+PFLmDyv4KV88nn0eCKza665Mg==", + "dependencies": { + "chalk": "^2.3.1", + "cli-cursor": "^2.1.0", + "cli-spinners": "^1.1.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^4.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse5": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", + "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", + "optional": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "node_modules/pkginfo": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", + "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "optional": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prompt": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.0.0.tgz", + "integrity": "sha1-jlcSPDlquYiJf7Mn/Trtw+c15P4=", + "dependencies": { + "colors": "^1.1.2", + "pkginfo": "0.x.x", + "read": "1.0.x", + "revalidator": "0.1.x", + "utile": "0.3.x", + "winston": "2.1.x" + }, + "engines": { + "node": ">= 0.6.6" + } + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/request/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dependencies": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, + "dependencies": { + "path-parse": "^1.0.6" + } + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/revalidator": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", + "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "optional": true + }, + "node_modules/secure-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz", + "integrity": "sha1-8MgtmKOxOah3aogIBQuCRDEIf8o=" + }, + "node_modules/semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "engines": { + "node": "*" + } + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.fromcodepoint": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz", + "integrity": "sha1-jZeDM8C8klOPUPOD5IiPPlYZ1lM=" + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "optional": true + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "optional": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "optional": true + }, + "node_modules/tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, + "node_modules/tslint": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.1.tgz", + "integrity": "sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw==", + "dev": true, + "dependencies": { + "babel-code-frame": "^6.22.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.7.0", + "minimatch": "^3.0.4", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.27.2" + }, + "bin": { + "tslint": "bin/tslint" + }, + "engines": { + "node": ">=4.8.0" + } + }, + "node_modules/tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "optional": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, + "node_modules/underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + }, + "node_modules/unescape-js": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unescape-js/-/unescape-js-1.1.1.tgz", + "integrity": "sha512-2/6CdybfFt9fzYJhCD6SHfBnqCGNfjhMwPK9Pf+sJRloa/WmyAmxdBVOslOIYkvSIRKX+9xGePF5t1tugtZ63g==", + "dependencies": { + "string.fromcodepoint": "^0.2.1" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utile": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/utile/-/utile-0.3.0.tgz", + "integrity": "sha1-E1LDQOuCDk2N26A5pPv6oy7U7zo=", + "dependencies": { + "async": "~0.9.0", + "deep-equal": "~0.2.1", + "i": "0.3.x", + "mkdirp": "0.x.x", + "ncp": "1.0.x", + "rimraf": "2.x.x" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/utile/node_modules/async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + }, + "node_modules/utile/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vsc-leetcode-cli": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.8.0.tgz", + "integrity": "sha512-KcFzpk3OZ+wUCoeK1yjBK0hYpJItYd8WFC7pQfE1zxJGjQs4tUvadLI5imKfRjw5NicjNRFnVpVv6N7ig7ik4A==", + "dependencies": { + "ansi-styles": "3.2.1", + "cheerio": "0.20.0", + "he": "1.2.0", + "mkdirp": "^1.0.4", + "moment": "^2.20.1", + "nconf": "0.10.0", + "ora": "3.0.0", + "prompt": "1.0.0", + "request": "2.88.0", + "supports-color": "5.5.0", + "underscore": "1.9.1", + "wordwrap": "1.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "leetcode": "bin/leetcode" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-2.0.1.tgz", + "integrity": "sha1-O/glj30xjHRDw28uFpQCoaZwNQY=", + "optional": true + }, + "node_modules/whatwg-url-compat": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz", + "integrity": "sha1-AImBEa9om7CXVBzVpFymyHmERb8=", + "optional": true, + "dependencies": { + "tr46": "~0.0.1" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "node_modules/window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", + "bin": { + "window-size": "cli.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/winston": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.1.1.tgz", + "integrity": "sha1-PJNJ0ZYgf9G9/51LxD73JRDjoS4=", + "dependencies": { + "async": "~1.0.0", + "colors": "1.0.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "pkginfo": "0.3.x", + "stack-trace": "0.0.x" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/winston/node_modules/async": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", + "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" + }, + "node_modules/winston/node_modules/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/winston/node_modules/pkginfo": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", + "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/xml-name-validator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", + "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", + "optional": true + }, + "node_modules/y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "node_modules/yargs": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", + "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dependencies": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/yargs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/yargs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + } + }, "dependencies": { "@types/color-name": { "version": "1.1.1", @@ -496,7 +2629,8 @@ "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "devOptional": true }, "extend": { "version": "3.0.2", @@ -1300,6 +3434,11 @@ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -1315,11 +3454,6 @@ "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz", "integrity": "sha1-jZeDM8C8klOPUPOD5IiPPlYZ1lM=" }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -1496,9 +3630,9 @@ } }, "vsc-leetcode-cli": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.7.0.tgz", - "integrity": "sha512-y0VEcdv1j61hblxBMQWGqdKC4TgGm9tu+9lvoMXz4RaDzwkmzfFpNMo32tMrJGiP23kk+IiXz6r41M1vcL2OlQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.8.0.tgz", + "integrity": "sha512-KcFzpk3OZ+wUCoeK1yjBK0hYpJItYd8WFC7pQfE1zxJGjQs4tUvadLI5imKfRjw5NicjNRFnVpVv6N7ig7ik4A==", "requires": { "ansi-styles": "3.2.1", "cheerio": "0.20.0", diff --git a/package.json b/package.json index 4a2ef54a..58e99198 100644 --- a/package.json +++ b/package.json @@ -364,6 +364,12 @@ ], "description": "Endpoint of the user account." }, + "leetcode.useEndpointTranslation": { + "type": "boolean", + "default": true, + "scope": "application", + "description": "Use endpoint's translation (if available)" + }, "leetcode.workspaceFolder": { "type": "string", "scope": "application", @@ -672,8 +678,8 @@ "@types/markdown-it": "0.0.7", "@types/mocha": "^2.2.42", "@types/node": "^7.0.43", - "@types/vscode": "1.42.0", "@types/require-from-string": "^1.2.0", + "@types/vscode": "1.42.0", "tslint": "^5.9.1", "typescript": "^2.6.1" }, @@ -684,6 +690,6 @@ "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", "unescape-js": "^1.1.1", - "vsc-leetcode-cli": "2.7.0" + "vsc-leetcode-cli": "2.8.0" } } diff --git a/src/commands/list.ts b/src/commands/list.ts index 5cb44137..7e7b36a7 100644 --- a/src/commands/list.ts +++ b/src/commands/list.ts @@ -5,6 +5,7 @@ import * as vscode from "vscode"; import { leetCodeExecutor } from "../leetCodeExecutor"; import { leetCodeManager } from "../leetCodeManager"; import { IProblem, ProblemState, UserStatus } from "../shared"; +import * as settingUtils from "../utils/settingUtils"; import { DialogType, promptForOpenOutputChannel } from "../utils/uiUtils"; export async function listProblems(): Promise<IProblem[]> { @@ -14,7 +15,8 @@ export async function listProblems(): Promise<IProblem[]> { } const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode"); const showLocked: boolean = !!leetCodeConfig.get<boolean>("showLocked"); - const result: string = await leetCodeExecutor.listProblems(showLocked); + const useEndpointTranslation: boolean = settingUtils.shouldUseEndpointTranslation(); + const result: string = await leetCodeExecutor.listProblems(showLocked, useEndpointTranslation); const problems: IProblem[] = []; const lines: string[] = result.split("\n"); const reg: RegExp = /^(.)\s(.{1,2})\s(.)\s\[\s*(\d*)\s*\]\s*(.*)\s*(Easy|Medium|Hard)\s*\((\s*\d+\.\d+ %)\)/; diff --git a/src/commands/show.ts b/src/commands/show.ts index 70474426..3aebce8f 100644 --- a/src/commands/show.ts +++ b/src/commands/show.ts @@ -41,8 +41,8 @@ export async function previewProblem(input: IProblem | vscode.Uri, isSideMode: b } else { node = input; } - - const descString: string = await leetCodeExecutor.getDescription(node.id); + const needTranslation: boolean = settingUtils.shouldUseEndpointTranslation(); + const descString: string = await leetCodeExecutor.getDescription(node.id, needTranslation); leetCodePreviewProvider.show(descString, node, isSideMode); } @@ -97,7 +97,8 @@ export async function showSolution(input: LeetCodeNode | vscode.Uri): Promise<vo return; } try { - const solution: string = await leetCodeExecutor.showSolution(problemInput, language); + const needTranslation: boolean = settingUtils.shouldUseEndpointTranslation(); + const solution: string = await leetCodeExecutor.showSolution(problemInput, language, needTranslation); leetCodeSolutionProvider.show(unescapeJS(solution)); } catch (error) { leetCodeChannel.appendLine(error.toString()); @@ -167,7 +168,9 @@ async function showProblemInternal(node: IProblem): Promise<void> { finalPath = wsl.useWsl() ? await wsl.toWinPath(finalPath) : finalPath; const descriptionConfig: IDescriptionConfiguration = settingUtils.getDescriptionConfiguration(); - await leetCodeExecutor.showProblem(node, language, finalPath, descriptionConfig.showInComment); + const needTranslation: boolean = settingUtils.shouldUseEndpointTranslation(); + + await leetCodeExecutor.showProblem(node, language, finalPath, descriptionConfig.showInComment, needTranslation); const promises: any[] = [ vscode.window.showTextDocument(vscode.Uri.file(finalPath), { preview: false, viewColumn: vscode.ViewColumn.One }), promptHintMessage( diff --git a/src/leetCodeExecutor.ts b/src/leetCodeExecutor.ts index 5157b6c1..d2332c7a 100644 --- a/src/leetCodeExecutor.ts +++ b/src/leetCodeExecutor.ts @@ -88,30 +88,62 @@ class LeetCodeExecutor implements Disposable { return await this.executeCommandEx(this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "user", "-L"]); } - public async listProblems(showLocked: boolean): Promise<string> { - return await this.executeCommandEx(this.nodeExecutable, showLocked ? - [await this.getLeetCodeBinaryPath(), "list"] : - [await this.getLeetCodeBinaryPath(), "list", "-q", "L"], - ); + public async listProblems(showLocked: boolean, needTranslation: boolean): Promise<string> { + const cmd: string[] = [await this.getLeetCodeBinaryPath(), "list"]; + if (!needTranslation) { + cmd.push("-T"); // use -T to prevent translation + } + if (!showLocked) { + cmd.push("-q"); + cmd.push("L"); + } + return await this.executeCommandEx(this.nodeExecutable, cmd); } - public async showProblem(problemNode: IProblem, language: string, filePath: string, showDescriptionInComment: boolean = false): Promise<void> { + public async showProblem(problemNode: IProblem, language: string, filePath: string, showDescriptionInComment: boolean = false, needTranslation: boolean): Promise<void> { const templateType: string = showDescriptionInComment ? "-cx" : "-c"; + const cmd: string[] = [await this.getLeetCodeBinaryPath(), "show", problemNode.id, templateType, "-l", language]; + + if (!needTranslation) { + cmd.push("-T"); // use -T to force English version + } if (!await fse.pathExists(filePath)) { await fse.createFile(filePath); - const codeTemplate: string = await this.executeCommandWithProgressEx("Fetching problem data...", this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "show", problemNode.id, templateType, "-l", language]); + const codeTemplate: string = await this.executeCommandWithProgressEx("Fetching problem data...", this.nodeExecutable, cmd); await fse.writeFile(filePath, codeTemplate); } } - public async showSolution(input: string, language: string): Promise<string> { - const solution: string = await this.executeCommandWithProgressEx("Fetching top voted solution from discussions...", this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "show", input, "--solution", "-l", language]); + /** + * This function returns solution of a problem identified by input + * + * @remarks + * Even though this function takes the needTranslation flag, it is important to note + * that as of vsc-leetcode-cli 2.8.0, leetcode-cli doesn't support querying solution + * on CN endpoint yet. So this flag doesn't have any effect right now. + * + * @param input - parameter to pass to cli that can identify a problem + * @param language - the source code language of the solution desired + * @param needTranslation - whether or not to use endPoint translation on solution query + * @returns promise of the solution string + */ + public async showSolution(input: string, language: string, needTranslation: boolean): Promise<string> { + // solution don't support translation + const cmd: string[] = [await this.getLeetCodeBinaryPath(), "show", input, "--solution", "-l", language]; + if (!needTranslation) { + cmd.push("-T"); + } + const solution: string = await this.executeCommandWithProgressEx("Fetching top voted solution from discussions...", this.nodeExecutable, cmd); return solution; } - public async getDescription(problemNodeId: string): Promise<string> { - return await this.executeCommandWithProgressEx("Fetching problem description...", this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "show", problemNodeId, "-x"]); + public async getDescription(problemNodeId: string, needTranslation: boolean): Promise<string> { + const cmd: string[] = [await this.getLeetCodeBinaryPath(), "show", problemNodeId, "-x"]; + if (!needTranslation) { + cmd.push("-T"); + } + return await this.executeCommandWithProgressEx("Fetching problem description...", this.nodeExecutable, cmd); } public async listSessions(): Promise<string> { diff --git a/src/utils/settingUtils.ts b/src/utils/settingUtils.ts index 207604fa..7b6eb6c2 100644 --- a/src/utils/settingUtils.ts +++ b/src/utils/settingUtils.ts @@ -25,6 +25,10 @@ export function hasStarShortcut(): boolean { return shortcuts.indexOf("star") >= 0; } +export function shouldUseEndpointTranslation(): boolean { + return getWorkspaceConfiguration().get<boolean>("useEndpointTranslation", true); +} + export function getDescriptionConfiguration(): IDescriptionConfiguration { const setting: string = getWorkspaceConfiguration().get<string>("showDescription", DescriptionConfiguration.InWebView); const config: IDescriptionConfiguration = { From ff46c33772441a076ae0008c83b9531f58a57e98 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Thu, 3 Jun 2021 10:30:26 +0800 Subject: [PATCH 74/92] chore: Update npm modules (#710) --- package-lock.json | 2521 ++------------------- package.json | 19 +- src/leetCodeManager.ts | 14 +- src/utils/cpUtils.ts | 6 +- src/webview/leetCodePreviewProvider.ts | 2 - src/webview/leetCodeSolutionProvider.ts | 1 - src/webview/leetCodeSubmissionProvider.ts | 1 - 7 files changed, 211 insertions(+), 2353 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4afd04fd..e4980605 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,2172 +1,54 @@ { "name": "vscode-leetcode", "version": "0.17.0", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "version": "0.17.0", - "license": "MIT", - "dependencies": { - "fs-extra": "^6.0.1", - "highlight.js": "^9.15.6", - "lodash": "^4.17.19", - "markdown-it": "^8.4.2", - "require-from-string": "^2.0.2", - "unescape-js": "^1.1.1", - "vsc-leetcode-cli": "^2.8.0" - }, - "devDependencies": { - "@types/fs-extra": "5.0.0", - "@types/highlight.js": "^9.12.3", - "@types/lodash": "^4.14.123", - "@types/markdown-it": "0.0.7", - "@types/mocha": "^2.2.42", - "@types/node": "^7.0.43", - "@types/require-from-string": "^1.2.0", - "@types/vscode": "1.42.0", - "tslint": "^5.9.1", - "typescript": "^2.6.1" - }, - "engines": { - "vscode": "^1.42.0" - } - }, - "node_modules/@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, - "node_modules/@types/fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/highlight.js": { - "version": "9.12.3", - "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.3.tgz", - "integrity": "sha512-pGF/zvYOACZ/gLGWdQH8zSwteQS1epp68yRcVLJMgUck/MjEn/FBYmPub9pXT8C1e4a8YZfHo1CKyV8q1vKUnQ==", - "dev": true - }, - "node_modules/@types/linkify-it": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-2.0.4.tgz", - "integrity": "sha512-9o5piu3tP6DwqT+Cyf7S3BitsTc6Cl0pCPKUhIE5hzQbtueiBXdtBipTLLvaGfT11/8XHRmsagu4YfBesTaiCA==", - "dev": true - }, - "node_modules/@types/lodash": { - "version": "4.14.123", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.123.tgz", - "integrity": "sha512-pQvPkc4Nltyx7G1Ww45OjVqUsJP4UsZm+GWJpigXgkikZqJgRm4c48g027o6tdgubWHwFRF15iFd+Y4Pmqv6+Q==", - "dev": true - }, - "node_modules/@types/markdown-it": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-0.0.7.tgz", - "integrity": "sha512-WyL6pa76ollQFQNEaLVa41ZUUvDvPY+qAUmlsphnrpL6I9p1m868b26FyeoOmo7X3/Ta/S9WKXcEYXUSHnxoVQ==", - "dev": true, - "dependencies": { - "@types/linkify-it": "*" - } - }, - "node_modules/@types/mocha": { - "version": "2.2.48", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", - "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.3.tgz", - "integrity": "sha512-HeyK+csRk7Khhg9krpMGJeT9pLzjsmiJFHYRzYpPv/dQ5tPclQsbvceiX/HKynRt/9lMLorWUYTbBHC3hRI4sg==", - "dev": true - }, - "node_modules/@types/require-from-string": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/require-from-string/-/require-from-string-1.2.0.tgz", - "integrity": "sha512-5vE9WoOOC9/DoD3Zj53UISpM+5tSvh8k0mL4fe2zFI6vO715/W4IQ3EdVUrWVMrFi1/NZhyMvm2iKsDFkEGddQ==", - "dev": true - }, - "node_modules/@types/vscode": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.42.0.tgz", - "integrity": "sha512-ds6TceMsh77Fs0Mq0Vap6Y72JbGWB8Bay4DrnJlf5d9ui2RSe1wis13oQm+XhguOeH1HUfLGzaDAoupTUtgabw==", - "dev": true - }, - "node_modules/abab": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", - "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", - "optional": true - }, - "node_modules/acorn": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", - "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", - "optional": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", - "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", - "optional": true, - "dependencies": { - "acorn": "^2.1.0" - } - }, - "node_modules/ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", - "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" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" - }, - "node_modules/babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "node_modules/babel-code-frame/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cheerio": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.20.0.tgz", - "integrity": "sha1-XHEPK6uVZTJyhCugHG6mGzVF7DU=", - "dependencies": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "~3.8.1", - "lodash": "^4.1.0" - }, - "engines": { - "node": ">= 0.6" - }, - "optionalDependencies": { - "jsdom": "^7.0.2" - } - }, - "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-spinners": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", - "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "node_modules/css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "engines": { - "node": "*" - } - }, - "node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "optional": true - }, - "node_modules/cssstyle": { - "version": "0.2.37", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", - "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", - "optional": true, - "dependencies": { - "cssom": "0.3.x" - } - }, - "node_modules/cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deep-equal": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz", - "integrity": "sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0=" - }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "optional": true - }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dependencies": { - "clone": "^1.0.2" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dependencies": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "optional": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "optional": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "optional": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "devOptional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", - "engines": { - "node": "> 0.1.90" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "optional": true - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/fs-extra": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", - "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "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" - }, - "engines": { - "node": "*" - } - }, - "node_modules/graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dependencies": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/highlight.js": { - "version": "9.15.6", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.6.tgz", - "integrity": "sha512-zozTAWM1D6sozHo8kqhfYgsac+B+q0PmsjXeyDrYIHHcBN0zTVT66+s2GW1GZv7DbyaROdLXKdabwS/WqPyIdQ==", - "engines": { - "node": "*" - } - }, - "node_modules/htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "dependencies": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - } - }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=" - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/i": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", - "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" - }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/js-yaml/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "node_modules/jsdom": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz", - "integrity": "sha1-QLQCdwwr2iNGkJa+6Rq2deOx/G4=", - "optional": true, - "dependencies": { - "abab": "^1.0.0", - "acorn": "^2.4.0", - "acorn-globals": "^1.0.4", - "cssom": ">= 0.3.0 < 0.4.0", - "cssstyle": ">= 0.2.29 < 0.3.0", - "escodegen": "^1.6.1", - "nwmatcher": ">= 1.3.7 < 2.0.0", - "parse5": "^1.5.1", - "request": "^2.55.0", - "sax": "^1.1.4", - "symbol-tree": ">= 3.1.0 < 4.0.0", - "tough-cookie": "^2.2.0", - "webidl-conversions": "^2.0.0", - "whatwg-url-compat": "~0.6.5", - "xml-name-validator": ">= 2.0.1 < 3.0.0" - } - }, - "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "optional": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/linkify-it": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.1.0.tgz", - "integrity": "sha512-4REs8/062kV2DSHxNfq5183zrqXMl7WP0WzABH9IeJI+NLm429FgE1PDecltYfnOoFDFlZGh2T8PfZn0r+GTRg==", - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" - }, - "node_modules/log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dependencies": { - "chalk": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/markdown-it": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", - "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", - "dependencies": { - "argparse": "^1.0.7", - "entities": "~1.1.1", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, - "node_modules/mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dependencies": { - "mime-db": "1.44.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/moment": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", - "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==", - "engines": { - "node": "*" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "node_modules/nconf": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.10.0.tgz", - "integrity": "sha512-fKiXMQrpP7CYWJQzKkPPx9hPgmq+YLDyxcG9N8RpiE9FoCkCbzD0NyW0YhE3xn3Aupe7nnDeIx4PFzYehpHT9Q==", - "dependencies": { - "async": "^1.4.0", - "ini": "^1.3.0", - "secure-keys": "^1.0.0", - "yargs": "^3.19.0" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/nconf/node_modules/yargs": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", - "dependencies": { - "camelcase": "^2.0.1", - "cliui": "^3.0.3", - "decamelize": "^1.1.1", - "os-locale": "^1.4.0", - "string-width": "^1.0.1", - "window-size": "^0.1.4", - "y18n": "^3.2.0" - } - }, - "node_modules/ncp": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz", - "integrity": "sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY=", - "bin": { - "ncp": "bin/ncp" - } - }, - "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nwmatcher": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", - "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==", - "optional": true - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "engines": { - "node": "*" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "optional": true, - "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" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.0.0.tgz", - "integrity": "sha512-LBS97LFe2RV6GJmXBi6OKcETKyklHNMV0xw7BtsVn2MlsgsydyZetSCbCANr+PFLmDyv4KV88nn0eCKza665Mg==", - "dependencies": { - "chalk": "^2.3.1", - "cli-cursor": "^2.1.0", - "cli-spinners": "^1.1.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^4.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "engines": { - "node": ">=4" - } - }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/parse5": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", - "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", - "optional": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "node_modules/pkginfo": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", - "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "optional": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prompt": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.0.0.tgz", - "integrity": "sha1-jlcSPDlquYiJf7Mn/Trtw+c15P4=", - "dependencies": { - "colors": "^1.1.2", - "pkginfo": "0.x.x", - "read": "1.0.x", - "revalidator": "0.1.x", - "utile": "0.3.x", - "winston": "2.1.x" - }, - "engines": { - "node": ">= 0.6.6" - } - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/request/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "node_modules/request/node_modules/tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dependencies": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "node_modules/resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, - "dependencies": { - "path-parse": "^1.0.6" - } - }, - "node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/revalidator": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", - "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "optional": true - }, - "node_modules/secure-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz", - "integrity": "sha1-8MgtmKOxOah3aogIBQuCRDEIf8o=" - }, - "node_modules/semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "engines": { - "node": "*" - } - }, - "node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string.fromcodepoint": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz", - "integrity": "sha1-jZeDM8C8klOPUPOD5IiPPlYZ1lM=" - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "optional": true - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "optional": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "optional": true - }, - "node_modules/tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true - }, - "node_modules/tslint": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.1.tgz", - "integrity": "sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw==", - "dev": true, - "dependencies": { - "babel-code-frame": "^6.22.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^3.2.0", - "glob": "^7.1.1", - "js-yaml": "^3.7.0", - "minimatch": "^3.0.4", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.27.2" - }, - "bin": { - "tslint": "bin/tslint" - }, - "engines": { - "node": ">=4.8.0" - } - }, - "node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "optional": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "node_modules/underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" - }, - "node_modules/unescape-js": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unescape-js/-/unescape-js-1.1.1.tgz", - "integrity": "sha512-2/6CdybfFt9fzYJhCD6SHfBnqCGNfjhMwPK9Pf+sJRloa/WmyAmxdBVOslOIYkvSIRKX+9xGePF5t1tugtZ63g==", - "dependencies": { - "string.fromcodepoint": "^0.2.1" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/utile": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/utile/-/utile-0.3.0.tgz", - "integrity": "sha1-E1LDQOuCDk2N26A5pPv6oy7U7zo=", - "dependencies": { - "async": "~0.9.0", - "deep-equal": "~0.2.1", - "i": "0.3.x", - "mkdirp": "0.x.x", - "ncp": "1.0.x", - "rimraf": "2.x.x" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/utile/node_modules/async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" - }, - "node_modules/utile/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/vsc-leetcode-cli": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.8.0.tgz", - "integrity": "sha512-KcFzpk3OZ+wUCoeK1yjBK0hYpJItYd8WFC7pQfE1zxJGjQs4tUvadLI5imKfRjw5NicjNRFnVpVv6N7ig7ik4A==", - "dependencies": { - "ansi-styles": "3.2.1", - "cheerio": "0.20.0", - "he": "1.2.0", - "mkdirp": "^1.0.4", - "moment": "^2.20.1", - "nconf": "0.10.0", - "ora": "3.0.0", - "prompt": "1.0.0", - "request": "2.88.0", - "supports-color": "5.5.0", - "underscore": "1.9.1", - "wordwrap": "1.0.0", - "yargs": "^15.3.1" - }, - "bin": { - "leetcode": "bin/leetcode" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-2.0.1.tgz", - "integrity": "sha1-O/glj30xjHRDw28uFpQCoaZwNQY=", - "optional": true - }, - "node_modules/whatwg-url-compat": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz", - "integrity": "sha1-AImBEa9om7CXVBzVpFymyHmERb8=", - "optional": true, - "dependencies": { - "tr46": "~0.0.1" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "node_modules/window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", - "bin": { - "window-size": "cli.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/winston": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.1.1.tgz", - "integrity": "sha1-PJNJ0ZYgf9G9/51LxD73JRDjoS4=", - "dependencies": { - "async": "~1.0.0", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "pkginfo": "0.3.x", - "stack-trace": "0.0.x" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/winston/node_modules/async": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", - "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" - }, - "node_modules/winston/node_modules/colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/winston/node_modules/pkginfo": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", - "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" - }, - "node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/xml-name-validator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", - "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", - "optional": true - }, - "node_modules/y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - }, - "node_modules/yargs": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", - "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-parser/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dependencies": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/yargs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/yargs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" } }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true }, - "node_modules/yargs/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" + "@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } }, - "node_modules/yargs/node_modules/y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - } - }, - "dependencies": { - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, "@types/fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==", + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.11.tgz", + "integrity": "sha512-mZsifGG4QeQ7hlkhO56u7zt/ycBgGxSVsFI/6lGTU34VtwkiqrrSDgw0+ygs8kFGWcXnFQWMrzF2h7TtDFNixA==", "dev": true, "requires": { "@types/node": "*" } }, - "@types/highlight.js": { - "version": "9.12.3", - "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.3.tgz", - "integrity": "sha512-pGF/zvYOACZ/gLGWdQH8zSwteQS1epp68yRcVLJMgUck/MjEn/FBYmPub9pXT8C1e4a8YZfHo1CKyV8q1vKUnQ==", - "dev": true - }, "@types/linkify-it": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-2.0.4.tgz", - "integrity": "sha512-9o5piu3tP6DwqT+Cyf7S3BitsTc6Cl0pCPKUhIE5hzQbtueiBXdtBipTLLvaGfT11/8XHRmsagu4YfBesTaiCA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.1.tgz", + "integrity": "sha512-pQv3Sygwxxh6jYQzXaiyWDAHevJqWtqDUv6t11Sa9CPGiXny66II7Pl6PR8QO5OVysD6HYOkHMeBgIjLnk9SkQ==", "dev": true }, "@types/lodash": { - "version": "4.14.123", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.123.tgz", - "integrity": "sha512-pQvPkc4Nltyx7G1Ww45OjVqUsJP4UsZm+GWJpigXgkikZqJgRm4c48g027o6tdgubWHwFRF15iFd+Y4Pmqv6+Q==", + "version": "4.14.170", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.170.tgz", + "integrity": "sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q==", "dev": true }, "@types/markdown-it": { @@ -2185,9 +67,9 @@ "dev": true }, "@types/node": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.3.tgz", - "integrity": "sha512-HeyK+csRk7Khhg9krpMGJeT9pLzjsmiJFHYRzYpPv/dQ5tPclQsbvceiX/HKynRt/9lMLorWUYTbBHC3hRI4sg==", + "version": "14.17.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.1.tgz", + "integrity": "sha512-/tpUyFD7meeooTRwl3sYlihx2BrJE7q9XF71EguPFIySj9B7qgnRtHsHTho+0AUm4m1SvWGm6uSncrR94q6Vtw==", "dev": true }, "@types/require-from-string": { @@ -2224,9 +106,9 @@ } }, "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2284,52 +166,14 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "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" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "bcrypt-pbkdf": { "version": "1.0.2", @@ -2452,9 +296,9 @@ } }, "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "concat-map": { @@ -2541,9 +385,9 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, "dom-serializer": { @@ -2617,8 +461,7 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "optional": true + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "estraverse": { "version": "4.3.0", @@ -2627,10 +470,10 @@ "optional": true }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "devOptional": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "optional": true }, "extend": { "version": "3.0.2", @@ -2688,13 +531,13 @@ } }, "fs-extra": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", - "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, "fs.realpath": { @@ -2702,6 +545,12 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -2716,9 +565,9 @@ } }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2729,9 +578,9 @@ } }, "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" }, "har-schema": { "version": "2.0.0", @@ -2739,21 +588,21 @@ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "requires": { - "ajv": "^6.5.5", + "ajv": "^6.12.3", "har-schema": "^2.0.0" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "function-bind": "^1.1.1" } }, "has-flag": { @@ -2767,9 +616,9 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, "highlight.js": { - "version": "9.15.6", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.6.tgz", - "integrity": "sha512-zozTAWM1D6sozHo8kqhfYgsac+B+q0PmsjXeyDrYIHHcBN0zTVT66+s2GW1GZv7DbyaROdLXKdabwS/WqPyIdQ==" + "version": "10.7.2", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.2.tgz", + "integrity": "sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg==" }, "htmlparser2": { "version": "3.8.3", @@ -2815,20 +664,29 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, + "is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", @@ -2853,27 +711,19 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - } } }, "jsbn": { @@ -2920,11 +770,12 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, "jsprim": { @@ -2957,9 +808,9 @@ } }, "linkify-it": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.1.0.tgz", - "integrity": "sha512-4REs8/062kV2DSHxNfq5183zrqXMl7WP0WzABH9IeJI+NLm429FgE1PDecltYfnOoFDFlZGh2T8PfZn0r+GTRg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", "requires": { "uc.micro": "^1.0.1" } @@ -2973,9 +824,9 @@ } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "log-symbols": { "version": "2.2.0", @@ -3003,16 +854,16 @@ "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", "requires": { - "mime-db": "1.44.0" + "mime-db": "1.47.0" } }, "mimic-fn": { @@ -3039,9 +890,9 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "moment": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", - "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, "mute-stream": { "version": "0.0.8", @@ -3208,9 +1059,9 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "performance-now": { @@ -3335,11 +1186,12 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, @@ -3387,9 +1239,9 @@ "integrity": "sha1-8MgtmKOxOah3aogIBQuCRDEIf8o=" }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "set-blocking": { @@ -3434,11 +1286,6 @@ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -3454,6 +1301,11 @@ "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz", "integrity": "sha1-jZeDM8C8klOPUPOD5IiPPlYZ1lM=" }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -3493,29 +1345,41 @@ "optional": true }, "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "tslint": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.1.tgz", - "integrity": "sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw==", + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", + "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", "dev": true, "requires": { - "babel-code-frame": "^6.22.0", + "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", - "diff": "^3.2.0", + "diff": "^4.0.1", "glob": "^7.1.1", - "js-yaml": "^3.7.0", + "js-yaml": "^3.13.1", "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.8.0", - "tsutils": "^2.27.2" + "tsutils": "^2.29.0" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } } }, "tsutils": { @@ -3550,9 +1414,9 @@ } }, "typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", + "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", "dev": true }, "uc.micro": { @@ -3566,22 +1430,22 @@ "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" }, "unescape-js": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unescape-js/-/unescape-js-1.1.1.tgz", - "integrity": "sha512-2/6CdybfFt9fzYJhCD6SHfBnqCGNfjhMwPK9Pf+sJRloa/WmyAmxdBVOslOIYkvSIRKX+9xGePF5t1tugtZ63g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unescape-js/-/unescape-js-1.1.4.tgz", + "integrity": "sha512-42SD8NOQEhdYntEiUQdYq/1V/YHwr1HLwlHuTJB5InVVdOSbgI6xu8jK5q65yIzuFCfczzyDF/7hbGzVbyCw0g==", "requires": { "string.fromcodepoint": "^0.2.1" } }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "requires": { "punycode": "^2.1.0" } @@ -3745,14 +1609,14 @@ "optional": true }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" }, "yargs": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", - "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "requires": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -3764,7 +1628,7 @@ "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^18.1.1" + "yargs-parser": "^18.1.2" }, "dependencies": { "ansi-regex": { @@ -3773,11 +1637,10 @@ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, @@ -3810,9 +1673,9 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3838,9 +1701,9 @@ } }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" } } }, diff --git a/package.json b/package.json index 58e99198..22e91b40 100644 --- a/package.json +++ b/package.json @@ -672,24 +672,23 @@ "lint": "tslint --project tsconfig.json -e src/*.d.ts -t verbose" }, "devDependencies": { - "@types/fs-extra": "5.0.0", - "@types/highlight.js": "^9.12.3", - "@types/lodash": "^4.14.123", + "@types/fs-extra": "^9.0.11", + "@types/lodash": "^4.14.170", "@types/markdown-it": "0.0.7", "@types/mocha": "^2.2.42", - "@types/node": "^7.0.43", + "@types/node": "^14.14.33", "@types/require-from-string": "^1.2.0", "@types/vscode": "1.42.0", - "tslint": "^5.9.1", - "typescript": "^2.6.1" + "tslint": "^5.20.1", + "typescript": "^4.3.2" }, "dependencies": { - "fs-extra": "^6.0.1", - "highlight.js": "^9.15.6", - "lodash": "^4.17.19", + "fs-extra": "^10.0.0", + "highlight.js": "^10.7.2", + "lodash": "^4.17.21", "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", - "unescape-js": "^1.1.1", + "unescape-js": "^1.1.4", "vsc-leetcode-cli": "2.8.0" } } diff --git a/src/leetCodeManager.ts b/src/leetCodeManager.ts index 44be87a9..089390d3 100644 --- a/src/leetCodeManager.ts +++ b/src/leetCodeManager.ts @@ -83,7 +83,7 @@ class LeetCodeManager extends EventEmitter { env: createEnvOption(), }); - childProc.stdout.on("data", async (data: string | Buffer) => { + childProc.stdout?.on("data", async (data: string | Buffer) => { data = data.toString(); leetCodeChannel.append(data); if (data.includes("twoFactorCode")) { @@ -96,19 +96,19 @@ class LeetCodeManager extends EventEmitter { childProc.kill(); return resolve(undefined); } - childProc.stdin.write(`${twoFactor}\n`); + childProc.stdin?.write(`${twoFactor}\n`); } const successMatch: RegExpMatchArray | null = data.match(this.successRegex); if (successMatch && successMatch[1]) { - childProc.stdin.end(); + childProc.stdin?.end(); return resolve(successMatch[1]); } else if (data.match(this.failRegex)) { - childProc.stdin.end(); + childProc.stdin?.end(); return reject(new Error("Faile to login")); } }); - childProc.stderr.on("data", (data: string | Buffer) => leetCodeChannel.append(data.toString())); + childProc.stderr?.on("data", (data: string | Buffer) => leetCodeChannel.append(data.toString())); childProc.on("error", reject); const name: string | undefined = await vscode.window.showInputBox({ @@ -120,7 +120,7 @@ class LeetCodeManager extends EventEmitter { childProc.kill(); return resolve(undefined); } - childProc.stdin.write(`${name}\n`); + childProc.stdin?.write(`${name}\n`); const pwd: string | undefined = await vscode.window.showInputBox({ prompt: isByCookie ? "Enter cookie" : "Enter password.", password: true, @@ -131,7 +131,7 @@ class LeetCodeManager extends EventEmitter { childProc.kill(); return resolve(undefined); } - childProc.stdin.write(`${pwd}\n`); + childProc.stdin?.write(`${pwd}\n`); }); if (userName) { vscode.window.showInformationMessage(`Successfully ${inMessage}.`); diff --git a/src/utils/cpUtils.ts b/src/utils/cpUtils.ts index 59e907b6..c71ae61c 100644 --- a/src/utils/cpUtils.ts +++ b/src/utils/cpUtils.ts @@ -15,13 +15,13 @@ export async function executeCommand(command: string, args: string[], options: c const childProc: cp.ChildProcess = cp.spawn(command, args, { ...options, env: createEnvOption() }); - childProc.stdout.on("data", (data: string | Buffer) => { + childProc.stdout?.on("data", (data: string | Buffer) => { data = data.toString(); result = result.concat(data); leetCodeChannel.append(data); }); - childProc.stderr.on("data", (data: string | Buffer) => leetCodeChannel.append(data.toString())); + childProc.stderr?.on("data", (data: string | Buffer) => leetCodeChannel.append(data.toString())); childProc.on("error", reject); @@ -42,7 +42,7 @@ export async function executeCommand(command: string, args: string[], options: c export async function executeCommandWithProgress(message: string, command: string, args: string[], options: cp.SpawnOptions = { shell: true }): Promise<string> { let result: string = ""; await vscode.window.withProgress({ location: vscode.ProgressLocation.Notification }, async (p: vscode.Progress<{}>) => { - return new Promise(async (resolve: () => void, reject: (e: Error) => void): Promise<void> => { + return new Promise<void>(async (resolve: () => void, reject: (e: Error) => void): Promise<void> => { p.report({ message }); try { result = await executeCommand(command, args, options); diff --git a/src/webview/leetCodePreviewProvider.ts b/src/webview/leetCodePreviewProvider.ts index fba17728..78b40991 100644 --- a/src/webview/leetCodePreviewProvider.ts +++ b/src/webview/leetCodePreviewProvider.ts @@ -130,8 +130,6 @@ class LeetCodePreviewProvider extends LeetCodeWebview { protected onDidDisposeWebview(): void { super.onDidDisposeWebview(); - delete this.node; - delete this.description; this.sideMode = false; } diff --git a/src/webview/leetCodeSolutionProvider.ts b/src/webview/leetCodeSolutionProvider.ts index d888b3bd..1fad6e22 100644 --- a/src/webview/leetCodeSolutionProvider.ts +++ b/src/webview/leetCodeSolutionProvider.ts @@ -64,7 +64,6 @@ class LeetCodeSolutionProvider extends LeetCodeWebview { protected onDidDisposeWebview(): void { super.onDidDisposeWebview(); - delete this.solution; } private parseSolution(raw: string): Solution { diff --git a/src/webview/leetCodeSubmissionProvider.ts b/src/webview/leetCodeSubmissionProvider.ts index f4f18fd4..62d07291 100644 --- a/src/webview/leetCodeSubmissionProvider.ts +++ b/src/webview/leetCodeSubmissionProvider.ts @@ -59,7 +59,6 @@ class LeetCodeSubmissionProvider extends LeetCodeWebview { protected onDidDisposeWebview(): void { super.onDidDisposeWebview(); - delete this.result; } private async showKeybindingsHint(): Promise<void> { From ce928666ef555a95394b9bca661bfb47d74a06c0 Mon Sep 17 00:00:00 2001 From: Peng-Yu Chen <walkccray@gmail.com> Date: Wed, 2 Jun 2021 22:34:21 -0400 Subject: [PATCH 75/92] docs: Update README.md (#637) Co-authored-by: Sheng Chen <sheche@microsoft.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 35fd0cad..173371f6 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ Recently we observed that [the extension cannot login to leetcode.com endpoint a Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround which can somehow mitigate this. Now you can simply click the `Sign In` button and then select `Third Party` login or `Cookie` login. -> Note: If you want to use third-party login(**Recommended**), please make sure your account has been connected to the thrid-party. If you want to use `Cookie` login, click [here](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/478#issuecomment-564757098) to see the steps. +> Note: If you want to use third-party login(**Recommended**), please make sure your account has been connected to the third-party. If you want to use `Cookie` login, click [here](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/478#issuecomment-564757098) to see the steps. ## Requirements - [VS Code 1.30.1+](https://code.visualstudio.com/) From 45ae2451a51f3f5475952200475fb8ff6655b9f2 Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Tue, 8 Jun 2021 13:50:58 +0800 Subject: [PATCH 76/92] feat: Move leetcode commands into submenu (#712) --- package-lock.json | 6 +++--- package.json | 15 +++++++++++++-- src/explorer/LeetCodeTreeDataProvider.ts | 2 +- src/utils/workspaceUtils.ts | 5 ++--- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index e4980605..f29605ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -79,9 +79,9 @@ "dev": true }, "@types/vscode": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.42.0.tgz", - "integrity": "sha512-ds6TceMsh77Fs0Mq0Vap6Y72JbGWB8Bay4DrnJlf5d9ui2RSe1wis13oQm+XhguOeH1HUfLGzaDAoupTUtgabw==", + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.50.0.tgz", + "integrity": "sha512-QnIeyi4L2DiD9M2bAQKRzT/EQvc80qP9UL6JD5TiLlNRL1khIDg4ej4mDSRbtFrDAsRntFI1RhMvdomUThMsqg==", "dev": true }, "abab": { diff --git a/package.json b/package.json index 22e91b40..ea24e2dd 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "license": "MIT", "icon": "resources/LeetCode.png", "engines": { - "vscode": "^1.42.0" + "vscode": "^1.50.0" }, "repository": { "type": "git", @@ -243,6 +243,11 @@ } ], "editor/context": [ + { + "submenu": "leetcode.editorAction" + } + ], + "leetcode.editorAction": [ { "command": "leetcode.testSolution", "group": "leetcode@1" @@ -261,6 +266,12 @@ } ] }, + "submenus": [ + { + "id": "leetcode.editorAction", + "label": "LeetCode" + } + ], "configuration": [ { "title": "LeetCode", @@ -678,7 +689,7 @@ "@types/mocha": "^2.2.42", "@types/node": "^14.14.33", "@types/require-from-string": "^1.2.0", - "@types/vscode": "1.42.0", + "@types/vscode": "1.50.0", "tslint": "^5.20.1", "typescript": "^4.3.2" }, diff --git a/src/explorer/LeetCodeTreeDataProvider.ts b/src/explorer/LeetCodeTreeDataProvider.ts index 69445bbb..2bfbe497 100644 --- a/src/explorer/LeetCodeTreeDataProvider.ts +++ b/src/explorer/LeetCodeTreeDataProvider.ts @@ -23,7 +23,7 @@ export class LeetCodeTreeDataProvider implements vscode.TreeDataProvider<LeetCod public async refresh(): Promise<void> { await explorerNodeManager.refreshCache(); - this.onDidChangeTreeDataEvent.fire(); + this.onDidChangeTreeDataEvent.fire(null); } public getTreeItem(element: LeetCodeNode): vscode.TreeItem | Thenable<vscode.TreeItem> { diff --git a/src/utils/workspaceUtils.ts b/src/utils/workspaceUtils.ts index c129f8db..81072be7 100644 --- a/src/utils/workspaceUtils.ts +++ b/src/utils/workspaceUtils.ts @@ -18,9 +18,8 @@ export async function selectWorkspaceFolder(): Promise<string> { return workspaceFolderSetting; } } - const workspaceFolders: vscode.WorkspaceFolder[] = vscode.workspace.workspaceFolders || []; let needAsk: boolean = true; - for (const folder of workspaceFolders) { + for (const folder of vscode.workspace.workspaceFolders || []) { if (isSubFolder(folder.uri.fsPath, workspaceFolderSetting)) { needAsk = false; } @@ -47,7 +46,7 @@ export async function selectWorkspaceFolder(): Promise<string> { await vscode.commands.executeCommand("vscode.openFolder", vscode.Uri.file(workspaceFolderSetting), true); return ""; case OpenOption.addToWorkspace: - vscode.workspace.updateWorkspaceFolders(workspaceFolders.length, 0, { uri: vscode.Uri.file(workspaceFolderSetting) }); + vscode.workspace.updateWorkspaceFolders(vscode.workspace.workspaceFolders?.length ?? 0, 0, { uri: vscode.Uri.file(workspaceFolderSetting) }); break; default: return ""; From 802dc405aa061d5dc286de86088bb2f7a332db3f Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Tue, 8 Jun 2021 14:18:56 +0800 Subject: [PATCH 77/92] fix: Folder not exist when select the workspace folder (#713) --- src/utils/workspaceUtils.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/utils/workspaceUtils.ts b/src/utils/workspaceUtils.ts index 81072be7..48105d5a 100644 --- a/src/utils/workspaceUtils.ts +++ b/src/utils/workspaceUtils.ts @@ -1,6 +1,7 @@ // Copyright (c) jdneo. All rights reserved. // Licensed under the MIT license. +import * as fse from "fs-extra"; import * as os from "os"; import * as path from "path"; import * as vscode from "vscode"; @@ -19,6 +20,7 @@ export async function selectWorkspaceFolder(): Promise<string> { } } let needAsk: boolean = true; + await fse.ensureDir(workspaceFolderSetting); for (const folder of vscode.workspace.workspaceFolders || []) { if (isSubFolder(folder.uri.fsPath, workspaceFolderSetting)) { needAsk = false; @@ -36,6 +38,7 @@ export async function selectWorkspaceFolder(): Promise<string> { { placeHolder: "The LeetCode workspace folder is not opened in VS Code, would you like to open it?" }, ); + // Todo: generate file first switch (choice) { case OpenOption.justOpenFile: return workspaceFolderSetting; From adf255c5dbb6e440536697ef3e436a6c484385fe Mon Sep 17 00:00:00 2001 From: Sheng Chen <sheche@microsoft.com> Date: Tue, 8 Jun 2021 14:49:24 +0800 Subject: [PATCH 78/92] chore: Prepare for 0.18.0 (#714) --- CHANGELOG.md | 11 +++++++++++ README.md | 1 + docs/README_zh-CN.md | 1 + package-lock.json | 2 +- package.json | 2 +- 5 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 22a3fc38..0de174fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to the "leetcode" extension will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +## [0.18.0] +### Added +- Add `star` command in shortcuts [PR#601](https://github.com/LeetCode-OpenSource/vscode-leetcode/pull/601) +- Add an option to disable endpoint translation [#389](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/389) + +### Changed +- LeetCode actions are moved into sub-menu: `LeetCode` in the editor context menu. [PR#712](https://github.com/LeetCode-OpenSource/vscode-leetcode/pull/712) + +### Fixed +[Bugs fixed](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues?q=is%3Aissue+milestone%3A0.18.0+is%3Aclosed+label%3Abug) + ## [0.17.0] ### Added - Add TypeScript support [#560](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/560) diff --git a/README.md b/README.md index 173371f6..249e20bd 100644 --- a/README.md +++ b/README.md @@ -133,6 +133,7 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh | `leetcode.enableSideMode` | Specify whether `preview`, `solution` and `submission` tab should be grouped into the second editor column when solving a problem. | `true` | | `leetcode.nodePath` | Specify the `Node.js` executable path. for example, C:\Program Files\nodejs\node.exe | `node` | | `leetcode.showCommentDescription` | Specify whether to include the problem description in the comments | `false` | +| `leetcode.useEndpointTranslation` | Use endpoint's translation (if available) | `true` | ## Want Help? diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index e4760015..71ed04b6 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -134,6 +134,7 @@ | `leetcode.enableSideMode` | 指定在解决一道题时,是否将`问题预览`、`高票答案`与`提交结果`窗口集中在编辑器的第二栏。 | `true` | | `leetcode.nodePath` | 指定 `Node.js` 可执行文件的路径。如:C:\Program Files\nodejs\node.exe | `node` | | `leetcode.showCommentDescription` | 指定是否要在注释中显示题干。 | `false` | +| `leetcode.useEndpointTranslation` | 是否显示翻译版本内容。 | `true` | ## 需要帮助? 在遇到任何问题时,可以先查看一下[疑难解答](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/%E7%96%91%E9%9A%BE%E8%A7%A3%E7%AD%94)以及[常见问题](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98)寻求帮助。 diff --git a/package-lock.json b/package-lock.json index f29605ac..75694f3b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "vscode-leetcode", - "version": "0.17.0", + "version": "0.18.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index ea24e2dd..cad81253 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-leetcode", "displayName": "LeetCode", "description": "Solve LeetCode problems in VS Code", - "version": "0.17.0", + "version": "0.18.0", "author": "Sheng Chen", "publisher": "LeetCode", "license": "MIT", From e93bb6e4cb46b1019d1624c313d93cad2598b27d Mon Sep 17 00:00:00 2001 From: Abhishek Kathuria <anshkathuria@gmail.com> Date: Thu, 19 Aug 2021 21:43:28 -0700 Subject: [PATCH 79/92] feat: Add difficulty badge to problems in explorer tree (#727) --- README.md | 32 ++++++++------- package-lock.json | 6 +-- package.json | 10 ++++- src/explorer/LeetCodeNode.ts | 11 ++++- src/explorer/LeetCodeTreeDataProvider.ts | 1 + .../LeetCodeTreeItemDecorationProvider.ts | 40 +++++++++++++++++++ src/extension.ts | 2 + 7 files changed, 81 insertions(+), 21 deletions(-) create mode 100644 src/explorer/LeetCodeTreeItemDecorationProvider.ts diff --git a/README.md b/README.md index 249e20bd..8292a79f 100644 --- a/README.md +++ b/README.md @@ -119,21 +119,23 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh ## Settings -| Setting Name | Description | Default Value | -| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | -| `leetcode.hideSolved` | Specify to hide the solved problems or not | `false` | -| `leetcode.showLocked` | Specify to show the locked problems or not. Only Premium users could open the locked problems | `false` | -| `leetcode.defaultLanguage` | Specify the default language used to solve the problem. Supported languages are: `bash`, `c`, `cpp`, `csharp`, `golang`, `java`, `javascript`, `kotlin`, `mysql`, `php`, `python`,`python3`,`ruby`,`rust`, `scala`, `swift`, `typescript` | `N/A` | -| `leetcode.useWsl` | Specify whether to use WSL or not | `false` | -| `leetcode.endpoint` | Specify the active endpoint. Supported endpoints are: `leetcode`, `leetcode-cn` | `leetcode` | -| `leetcode.workspaceFolder` | Specify the path of the workspace folder to store the problem files. | `""` | -| `leetcode.filePath` | Specify the relative path under the workspace and the file name to save the problem files. More details can be found [here](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/Customize-the-Relative-Folder-and-the-File-Name-of-the-Problem-File). | | -| `leetcode.enableStatusBar` | Specify whether the LeetCode status bar will be shown or not. | `true` | -| `leetcode.editor.shortcuts` | Specify the customized shortcuts in editors. Supported values are: `submit`, `test`, `star`, `solution` and `description`. | `["submit, test"]` | -| `leetcode.enableSideMode` | Specify whether `preview`, `solution` and `submission` tab should be grouped into the second editor column when solving a problem. | `true` | -| `leetcode.nodePath` | Specify the `Node.js` executable path. for example, C:\Program Files\nodejs\node.exe | `node` | -| `leetcode.showCommentDescription` | Specify whether to include the problem description in the comments | `false` | -| `leetcode.useEndpointTranslation` | Use endpoint's translation (if available) | `true` | + +| Setting Name | Description | Default Value | +| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | +| `leetcode.hideSolved` | Specify to hide the solved problems or not | `false` | +| `leetcode.showLocked` | Specify to show the locked problems or not. Only Premium users could open the locked problems | `false` | +| `leetcode.defaultLanguage` | Specify the default language used to solve the problem. Supported languages are: `bash`, `c`, `cpp`, `csharp`, `golang`, `java`, `javascript`, `kotlin`, `mysql`, `php`, `python`,`python3`,`ruby`,`rust`, `scala`, `swift`, `typescript` | `N/A` | +| `leetcode.useWsl` | Specify whether to use WSL or not | `false` | +| `leetcode.endpoint` | Specify the active endpoint. Supported endpoints are: `leetcode`, `leetcode-cn` | `leetcode` | +| `leetcode.workspaceFolder` | Specify the path of the workspace folder to store the problem files. | `""` | +| `leetcode.filePath` | Specify the relative path under the workspace and the file name to save the problem files. More details can be found [here](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/Customize-the-Relative-Folder-and-the-File-Name-of-the-Problem-File). | | +| `leetcode.enableStatusBar` | Specify whether the LeetCode status bar will be shown or not. | `true` | +| `leetcode.editor.shortcuts` | Specify the customized shortcuts in editors. Supported values are: `submit`, `test`, `star`, `solution` and `description`. | `["submit, test"]` | +| `leetcode.enableSideMode` | Specify whether `preview`, `solution` and `submission` tab should be grouped into the second editor column when solving a problem. | `true` | +| `leetcode.nodePath` | Specify the `Node.js` executable path. for example, C:\Program Files\nodejs\node.exe | `node` | +| `leetcode.showCommentDescription` | Specify whether to include the problem description in the comments | `false` | +| `leetcode.useEndpointTranslation` | Use endpoint's translation (if available) | `true` | +| `leetcode.colorizeProblems` | Add difficulty badge and colorize problems files in explorer tree | `true` | ## Want Help? diff --git a/package-lock.json b/package-lock.json index 75694f3b..4ab065af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -79,9 +79,9 @@ "dev": true }, "@types/vscode": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.50.0.tgz", - "integrity": "sha512-QnIeyi4L2DiD9M2bAQKRzT/EQvc80qP9UL6JD5TiLlNRL1khIDg4ej4mDSRbtFrDAsRntFI1RhMvdomUThMsqg==", + "version": "1.57.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.57.0.tgz", + "integrity": "sha512-FeznBFtIDCWRluojTsi9c3LLcCHOXP5etQfBK42+ixo1CoEAchkw39tuui9zomjZuKfUVL33KZUDIwHZ/xvOkQ==", "dev": true }, "abab": { diff --git a/package.json b/package.json index cad81253..7ecd780a 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "license": "MIT", "icon": "resources/LeetCode.png", "engines": { - "vscode": "^1.50.0" + "vscode": "^1.57.0" }, "repository": { "type": "git", @@ -671,6 +671,12 @@ "default": "node", "scope": "application", "description": "The Node.js executable path. for example, C:\\Program Files\\nodejs\\node.exe" + }, + "leetcode.colorizeProblems": { + "type": "boolean", + "default": true, + "scope": "application", + "description": "Add difficulty badge and colorize problems files in explorer tree." } } } @@ -689,7 +695,7 @@ "@types/mocha": "^2.2.42", "@types/node": "^14.14.33", "@types/require-from-string": "^1.2.0", - "@types/vscode": "1.50.0", + "@types/vscode": "1.57.0", "tslint": "^5.20.1", "typescript": "^4.3.2" }, diff --git a/src/explorer/LeetCodeNode.ts b/src/explorer/LeetCodeNode.ts index 67aad324..c8540887 100644 --- a/src/explorer/LeetCodeNode.ts +++ b/src/explorer/LeetCodeNode.ts @@ -1,7 +1,7 @@ // Copyright (c) jdneo. All rights reserved. // Licensed under the MIT license. -import { Command } from "vscode"; +import { Command, Uri } from "vscode"; import { IProblem, ProblemState } from "../shared"; export class LeetCodeNode { @@ -55,4 +55,13 @@ export class LeetCodeNode { }; } + public get uri(): Uri { + return Uri.from({ + scheme: "leetcode", + authority: this.isProblem ? "problems" : "tree-node", + path: `/${this.id}`, // path must begin with slash / + query: `difficulty=${this.difficulty}`, + }); + } + } diff --git a/src/explorer/LeetCodeTreeDataProvider.ts b/src/explorer/LeetCodeTreeDataProvider.ts index 2bfbe497..4764934a 100644 --- a/src/explorer/LeetCodeTreeDataProvider.ts +++ b/src/explorer/LeetCodeTreeDataProvider.ts @@ -51,6 +51,7 @@ export class LeetCodeTreeDataProvider implements vscode.TreeDataProvider<LeetCod collapsibleState: element.isProblem ? vscode.TreeItemCollapsibleState.None : vscode.TreeItemCollapsibleState.Collapsed, iconPath: this.parseIconPathFromProblemState(element), command: element.isProblem ? element.previewCommand : undefined, + resourceUri: element.uri, contextValue, }; } diff --git a/src/explorer/LeetCodeTreeItemDecorationProvider.ts b/src/explorer/LeetCodeTreeItemDecorationProvider.ts new file mode 100644 index 00000000..103ce2d9 --- /dev/null +++ b/src/explorer/LeetCodeTreeItemDecorationProvider.ts @@ -0,0 +1,40 @@ +import { URLSearchParams } from "url"; +import { FileDecoration, FileDecorationProvider, ProviderResult, ThemeColor, Uri, workspace, WorkspaceConfiguration } from "vscode"; + +export class LeetCodeTreeItemDecorationProvider implements FileDecorationProvider { + private readonly DIFFICULTY_BADGE_LABEL: { [key: string]: string } = { + easy: "E", + medium: "M", + hard: "H", + }; + + private readonly ITEM_COLOR: { [key: string]: ThemeColor } = { + easy: new ThemeColor("charts.green"), + medium: new ThemeColor("charts.yellow"), + hard: new ThemeColor("charts.red"), + }; + + public provideFileDecoration(uri: Uri): ProviderResult<FileDecoration> { + if (!this.isDifficultyBadgeEnabled()) { + return; + } + + if (uri.scheme !== "leetcode" && uri.authority !== "problems") { + return; + } + + const params: URLSearchParams = new URLSearchParams(uri.query); + const difficulty: string = params.get("difficulty")!.toLowerCase(); + return { + badge: this.DIFFICULTY_BADGE_LABEL[difficulty], + color: this.ITEM_COLOR[difficulty], + }; + } + + private isDifficultyBadgeEnabled(): boolean { + const configuration: WorkspaceConfiguration = workspace.getConfiguration(); + return configuration.get<boolean>("leetcode.colorizeProblems", false); + } +} + +export const leetCodeTreeItemDecorationProvider: LeetCodeTreeItemDecorationProvider = new LeetCodeTreeItemDecorationProvider(); diff --git a/src/extension.ts b/src/extension.ts index 5bd026f1..102c245f 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -14,6 +14,7 @@ import * as test from "./commands/test"; import { explorerNodeManager } from "./explorer/explorerNodeManager"; import { LeetCodeNode } from "./explorer/LeetCodeNode"; import { leetCodeTreeDataProvider } from "./explorer/LeetCodeTreeDataProvider"; +import { leetCodeTreeItemDecorationProvider } from "./explorer/LeetCodeTreeItemDecorationProvider"; import { leetCodeChannel } from "./leetCodeChannel"; import { leetCodeExecutor } from "./leetCodeExecutor"; import { leetCodeManager } from "./leetCodeManager"; @@ -47,6 +48,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<void> markdownEngine, codeLensController, explorerNodeManager, + vscode.window.registerFileDecorationProvider(leetCodeTreeItemDecorationProvider), vscode.window.createTreeView("leetCodeExplorer", { treeDataProvider: leetCodeTreeDataProvider, showCollapseAll: true }), vscode.commands.registerCommand("leetcode.deleteCache", () => cache.deleteCache()), vscode.commands.registerCommand("leetcode.toggleLeetCodeCn", () => plugin.switchEndpoint()), From de1dc4161b497b4f76faad2363abab0104a75373 Mon Sep 17 00:00:00 2001 From: Abhishek Kathuria <anshkathuria@gmail.com> Date: Fri, 20 Aug 2021 19:42:58 -0700 Subject: [PATCH 80/92] feat: Add support for sorting problems by acceptance rate (#728) --- README.md | 1 + package.json | 23 ++++++++++++++++++ src/commands/plugin.ts | 36 ++++++++++++++++++++++++++++- src/explorer/LeetCodeNode.ts | 4 ++++ src/explorer/explorerNodeManager.ts | 20 ++++++++++++---- src/extension.ts | 1 + src/shared.ts | 8 +++++++ 7 files changed, 88 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 8292a79f..ac752c73 100644 --- a/README.md +++ b/README.md @@ -136,6 +136,7 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh | `leetcode.showCommentDescription` | Specify whether to include the problem description in the comments | `false` | | `leetcode.useEndpointTranslation` | Use endpoint's translation (if available) | `true` | | `leetcode.colorizeProblems` | Add difficulty badge and colorize problems files in explorer tree | `true` | +| `leetcode.problems.sortStrategy` | Specify sorting strategy for problems list | `None` | ## Want Help? diff --git a/package.json b/package.json index 7ecd780a..bcdb5c02 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "onCommand:leetcode.testSolution", "onCommand:leetcode.submitSolution", "onCommand:leetcode.switchDefaultLanguage", + "onCommand:leetcode.problems.sort", "onView:leetCodeExplorer" ], "main": "./out/src/extension", @@ -134,6 +135,12 @@ "command": "leetcode.switchDefaultLanguage", "title": "Switch Default Language", "category": "LeetCode" + }, + { + "command": "leetcode.problems.sort", + "title": "Sort Problems", + "category": "LeetCode", + "icon": "$(sort-precedence)" } ], "viewsContainers": { @@ -179,6 +186,11 @@ "command": "leetcode.pickOne", "when": "view == leetCodeExplorer", "group": "overflow@0" + }, + { + "command": "leetcode.problems.sort", + "when": "view == leetCodeExplorer", + "group": "overflow@1" } ], "view/item/context": [ @@ -677,6 +689,17 @@ "default": true, "scope": "application", "description": "Add difficulty badge and colorize problems files in explorer tree." + }, + "leetcode.problems.sortStrategy": { + "type": "string", + "default": "None", + "scope": "application", + "enum": [ + "None", + "Acceptance Rate (Ascending)", + "Acceptance Rate (Descending)" + ], + "description": "Sorting strategy for problems list." } } } diff --git a/src/commands/plugin.ts b/src/commands/plugin.ts index 481bd6dd..040f8321 100644 --- a/src/commands/plugin.ts +++ b/src/commands/plugin.ts @@ -2,9 +2,10 @@ // Licensed under the MIT license. import * as vscode from "vscode"; +import { leetCodeTreeDataProvider } from "../explorer/LeetCodeTreeDataProvider"; import { leetCodeExecutor } from "../leetCodeExecutor"; import { IQuickItemEx } from "../shared"; -import { Endpoint } from "../shared"; +import { Endpoint, SortingStrategy } from "../shared"; import { DialogType, promptForOpenOutputChannel, promptForSignIn } from "../utils/uiUtils"; import { deleteCache } from "./cache"; @@ -52,3 +53,36 @@ export function getLeetCodeEndpoint(): string { const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode"); return leetCodeConfig.get<string>("endpoint", Endpoint.LeetCode); } + +const SORT_ORDER: SortingStrategy[] = [ + SortingStrategy.None, + SortingStrategy.AcceptanceRateAsc, + SortingStrategy.AcceptanceRateDesc, +]; + +export async function switchSortingStrategy(): Promise<void> { + const currentStrategy: SortingStrategy = getSortingStrategy(); + const picks: Array<IQuickItemEx<string>> = []; + picks.push( + ...SORT_ORDER.map((s: SortingStrategy) => { + return { + label: `${currentStrategy === s ? "$(check)" : " "} ${s}`, + value: s, + }; + }), + ); + + const choice: IQuickItemEx<string> | undefined = await vscode.window.showQuickPick(picks); + if (!choice || choice.value === currentStrategy) { + return; + } + + const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode"); + await leetCodeConfig.update("problems.sortStrategy", choice.value, true); + await leetCodeTreeDataProvider.refresh(); +} + +export function getSortingStrategy(): SortingStrategy { + const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode"); + return leetCodeConfig.get<SortingStrategy>("problems.sortStrategy", SortingStrategy.None); +} diff --git a/src/explorer/LeetCodeNode.ts b/src/explorer/LeetCodeNode.ts index c8540887..3d2cc74f 100644 --- a/src/explorer/LeetCodeNode.ts +++ b/src/explorer/LeetCodeNode.ts @@ -55,6 +55,10 @@ export class LeetCodeNode { }; } + public get acceptanceRate(): number { + return Number(this.passRate.slice(0, -1).trim()); + } + public get uri(): Uri { return Uri.from({ scheme: "leetcode", diff --git a/src/explorer/explorerNodeManager.ts b/src/explorer/explorerNodeManager.ts index 95053263..a04ad55c 100644 --- a/src/explorer/explorerNodeManager.ts +++ b/src/explorer/explorerNodeManager.ts @@ -4,7 +4,8 @@ import * as _ from "lodash"; import { Disposable } from "vscode"; import * as list from "../commands/list"; -import { Category, defaultProblem, ProblemState } from "../shared"; +import { getSortingStrategy } from "../commands/plugin"; +import { Category, defaultProblem, ProblemState, SortingStrategy } from "../shared"; import { shouldHideSolvedProblem } from "../utils/settingUtils"; import { LeetCodeNode } from "./LeetCodeNode"; @@ -56,7 +57,9 @@ class ExplorerNodeManager implements Disposable { } public getAllNodes(): LeetCodeNode[] { - return Array.from(this.explorerNodeMap.values()); + return this.applySortingStrategy( + Array.from(this.explorerNodeMap.values()), + ); } public getAllDifficultyNodes(): LeetCodeNode[] { @@ -114,7 +117,7 @@ class ExplorerNodeManager implements Disposable { res.push(node); } } - return res; + return this.applySortingStrategy(res); } public getChildrenNodesById(id: string): LeetCodeNode[] { @@ -142,7 +145,7 @@ class ExplorerNodeManager implements Disposable { break; } } - return res; + return this.applySortingStrategy(res); } public dispose(): void { @@ -186,6 +189,15 @@ class ExplorerNodeManager implements Disposable { break; } } + + private applySortingStrategy(nodes: LeetCodeNode[]): LeetCodeNode[] { + const strategy: SortingStrategy = getSortingStrategy(); + switch (strategy) { + case SortingStrategy.AcceptanceRateAsc: return nodes.sort((x: LeetCodeNode, y: LeetCodeNode) => Number(x.acceptanceRate) - Number(y.acceptanceRate)); + case SortingStrategy.AcceptanceRateDesc: return nodes.sort((x: LeetCodeNode, y: LeetCodeNode) => Number(y.acceptanceRate) - Number(x.acceptanceRate)); + default: return nodes; + } + } } export const explorerNodeManager: ExplorerNodeManager = new ExplorerNodeManager(); diff --git a/src/extension.ts b/src/extension.ts index 102c245f..dfd91683 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -66,6 +66,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<void> vscode.commands.registerCommand("leetcode.switchDefaultLanguage", () => switchDefaultLanguage()), vscode.commands.registerCommand("leetcode.addFavorite", (node: LeetCodeNode) => star.addFavorite(node)), vscode.commands.registerCommand("leetcode.removeFavorite", (node: LeetCodeNode) => star.removeFavorite(node)), + vscode.commands.registerCommand("leetcode.problems.sort", () => plugin.switchSortingStrategy()), ); await leetCodeExecutor.switchEndpoint(plugin.getLeetCodeEndpoint()); diff --git a/src/shared.ts b/src/shared.ts index e09943f8..84b529cc 100644 --- a/src/shared.ts +++ b/src/shared.ts @@ -116,3 +116,11 @@ export enum DescriptionConfiguration { } export const leetcodeHasInited: string = "leetcode.hasInited"; + +export enum SortingStrategy { + None = "None", + AcceptanceRateAsc = "Acceptance Rate (Ascending)", + AcceptanceRateDesc = "Acceptance Rate (Descending)", + FrequencyAsc = "Frequency (Ascending)", + FrequencyDesc = "Frequency (Descending)", +} From b7638bb26308ebfc6c0ab9b655cbfe7ae9097f18 Mon Sep 17 00:00:00 2001 From: Miloas <0x9357@gmail.com> Date: Mon, 9 May 2022 18:06:56 +0800 Subject: [PATCH 81/92] fix: update cn domain (#800) * fix: update cn domain * fix(ci): upgrade node to 14 * chore: bump cli --- .github/workflows/build.yml | 70 +- README.md | 4 +- docs/README_zh-CN.md | 4 +- package-lock.json | 2353 +++++++++++++++++++++++++++++++++-- package.json | 2 +- src/commands/plugin.ts | 2 +- src/utils/uiUtils.ts | 2 +- 7 files changed, 2262 insertions(+), 175 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1df11a00..2bdeaa49 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,9 +2,9 @@ name: CI on: push: - branches: [ master ] + branches: [master] pull_request: - branches: [ master ] + branches: [master] jobs: linux: @@ -12,60 +12,60 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 30 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v2 - - name: Setup Node.js environment - uses: actions/setup-node@v2 - with: - node-version: 12 + - name: Setup Node.js environment + uses: actions/setup-node@v2 + with: + node-version: 14 - - name: Install Node.js modules - run: npm install + - name: Install Node.js modules + run: npm install - - name: Lint - run: npm run lint + - name: Lint + run: npm run lint - - name: VSCE Packge - run: npx vsce package + - name: VSCE Packge + run: npx vsce package windows: name: Windows runs-on: windows-latest timeout-minutes: 30 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v2 - - name: Setup Node.js environment - uses: actions/setup-node@v2 - with: - node-version: 12 + - name: Setup Node.js environment + uses: actions/setup-node@v2 + with: + node-version: 14 - - name: Install Node.js modules - run: npm install + - name: Install Node.js modules + run: npm install - - name: Lint - run: npm run lint + - name: Lint + run: npm run lint - - name: VSCE Packge - run: npx vsce package + - name: VSCE Packge + run: npx vsce package darwin: name: macOS runs-on: macos-latest timeout-minutes: 30 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v2 - - name: Setup Node.js environment - uses: actions/setup-node@v2 - with: - node-version: 12 + - name: Setup Node.js environment + uses: actions/setup-node@v2 + with: + node-version: 14 - - name: Install Node.js modules - run: npm install + - name: Install Node.js modules + run: npm install - - name: Lint - run: npm run lint + - name: Lint + run: npm run lint - - name: VSCE Packge - run: npx vsce package + - name: VSCE Packge + run: npx vsce package diff --git a/README.md b/README.md index ac752c73..cfe37701 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ - English Document | [中文文档](https://github.com/LeetCode-OpenSource/vscode-leetcode/blob/master/docs/README_zh-CN.md) ## ❗️ Attention ❗️- Workaround to login to LeetCode endpoint -> Note: If you are using `leetcode-cn.com`, you can just ignore this section. +> Note: If you are using `leetcode.cn`, you can just ignore this section. Recently we observed that [the extension cannot login to leetcode.com endpoint anymore](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/478). The root cause of this issue is that leetcode.com changed its login mechanism and so far there is no ideal way to fix that issue. @@ -63,7 +63,7 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh - The supported endpoints are: - **leetcode.com** - - **leetcode-cn.com** + - **leetcode.cn** > Note: The accounts of different endpoints are **not** shared. Please make sure you are using the right endpoint. The extension will use `leetcode.com` by default. diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index 71ed04b6..ad4c9a74 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -23,7 +23,7 @@ - [English Document](https://github.com/LeetCode-OpenSource/vscode-leetcode#requirements) | 中文文档 ## ❗️ 注意 ❗️- 无法登录 LeetCode 节点的临时解决办法 -> 注意:如果使用的是 `leetcode-cn.com` 账户,可以跳过此段落。 +> 注意:如果使用的是 `leetcode.cn` 账户,可以跳过此段落。 近期我们发现插件出现了[无法登录 leetcode.com 节点的问题](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/478)。原因是因为近期 leetcode.com 改变了登录机制,目前我们暂时没有找到解决该问题的完美解决方案。 @@ -64,7 +64,7 @@ - 目前可切换的版本有: - **leetcode.com** - - **leetcode-cn.com** + - **leetcode.cn** > 注意:两种版本的 LeetCode 账户并**不通用**,请确保当前激活的版本是正确的。插件默认激活的是**英文版**。 diff --git a/package-lock.json b/package-lock.json index 4ab065af..fe9c5d7f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,2132 @@ { "name": "vscode-leetcode", "version": "0.18.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "vscode-leetcode", + "version": "0.18.0", + "license": "MIT", + "dependencies": { + "fs-extra": "^10.0.0", + "highlight.js": "^10.7.2", + "lodash": "^4.17.21", + "markdown-it": "^8.4.2", + "require-from-string": "^2.0.2", + "unescape-js": "^1.1.4", + "vsc-leetcode-cli": "2.8.1" + }, + "devDependencies": { + "@types/fs-extra": "^9.0.11", + "@types/lodash": "^4.14.170", + "@types/markdown-it": "0.0.7", + "@types/mocha": "^2.2.42", + "@types/node": "^14.14.33", + "@types/require-from-string": "^1.2.0", + "@types/vscode": "1.57.0", + "tslint": "^5.20.1", + "typescript": "^4.3.2" + }, + "engines": { + "vscode": "^1.57.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "node_modules/@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@types/fs-extra": { + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.11.tgz", + "integrity": "sha512-mZsifGG4QeQ7hlkhO56u7zt/ycBgGxSVsFI/6lGTU34VtwkiqrrSDgw0+ygs8kFGWcXnFQWMrzF2h7TtDFNixA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/linkify-it": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.1.tgz", + "integrity": "sha512-pQv3Sygwxxh6jYQzXaiyWDAHevJqWtqDUv6t11Sa9CPGiXny66II7Pl6PR8QO5OVysD6HYOkHMeBgIjLnk9SkQ==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.170", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.170.tgz", + "integrity": "sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q==", + "dev": true + }, + "node_modules/@types/markdown-it": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-0.0.7.tgz", + "integrity": "sha512-WyL6pa76ollQFQNEaLVa41ZUUvDvPY+qAUmlsphnrpL6I9p1m868b26FyeoOmo7X3/Ta/S9WKXcEYXUSHnxoVQ==", + "dev": true, + "dependencies": { + "@types/linkify-it": "*" + } + }, + "node_modules/@types/mocha": { + "version": "2.2.48", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", + "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "14.17.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.1.tgz", + "integrity": "sha512-/tpUyFD7meeooTRwl3sYlihx2BrJE7q9XF71EguPFIySj9B7qgnRtHsHTho+0AUm4m1SvWGm6uSncrR94q6Vtw==", + "dev": true + }, + "node_modules/@types/require-from-string": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/require-from-string/-/require-from-string-1.2.0.tgz", + "integrity": "sha512-5vE9WoOOC9/DoD3Zj53UISpM+5tSvh8k0mL4fe2zFI6vO715/W4IQ3EdVUrWVMrFi1/NZhyMvm2iKsDFkEGddQ==", + "dev": true + }, + "node_modules/@types/vscode": { + "version": "1.57.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.57.0.tgz", + "integrity": "sha512-FeznBFtIDCWRluojTsi9c3LLcCHOXP5etQfBK42+ixo1CoEAchkw39tuui9zomjZuKfUVL33KZUDIwHZ/xvOkQ==", + "dev": true + }, + "node_modules/abab": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", + "optional": true + }, + "node_modules/acorn": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", + "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", + "optional": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", + "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", + "optional": true, + "dependencies": { + "acorn": "^2.1.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cheerio": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.20.0.tgz", + "integrity": "sha1-XHEPK6uVZTJyhCugHG6mGzVF7DU=", + "dependencies": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "~3.8.1", + "lodash": "^4.1.0" + }, + "engines": { + "node": ">= 0.6" + }, + "optionalDependencies": { + "jsdom": "^7.0.2" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-spinners": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dependencies": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "node_modules/css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "engines": { + "node": "*" + } + }, + "node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "optional": true + }, + "node_modules/cssstyle": { + "version": "0.2.37", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", + "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", + "optional": true, + "dependencies": { + "cssom": "0.3.x" + } + }, + "node_modules/cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-equal": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz", + "integrity": "sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0=" + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "optional": true + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dependencies": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/domhandler": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "optional": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "devOptional": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "optional": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", + "engines": { + "node": "> 0.1.90" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "optional": true + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/highlight.js": { + "version": "10.7.2", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.2.tgz", + "integrity": "sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg==", + "engines": { + "node": "*" + } + }, + "node_modules/htmlparser2": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", + "dependencies": { + "domelementtype": "1", + "domhandler": "2.3", + "domutils": "1.5", + "entities": "1.0", + "readable-stream": "1.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=" + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/i": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", + "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "node_modules/jsdom": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz", + "integrity": "sha1-QLQCdwwr2iNGkJa+6Rq2deOx/G4=", + "optional": true, + "dependencies": { + "abab": "^1.0.0", + "acorn": "^2.4.0", + "acorn-globals": "^1.0.4", + "cssom": ">= 0.3.0 < 0.4.0", + "cssstyle": ">= 0.2.29 < 0.3.0", + "escodegen": "^1.6.1", + "nwmatcher": ">= 1.3.7 < 2.0.0", + "parse5": "^1.5.1", + "request": "^2.55.0", + "sax": "^1.1.4", + "symbol-tree": ">= 3.1.0 < 4.0.0", + "tough-cookie": "^2.2.0", + "webidl-conversions": "^2.0.0", + "whatwg-url-compat": "~0.6.5", + "xml-name-validator": ">= 2.0.1 < 3.0.0" + } + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "optional": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/markdown-it": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", + "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", + "dependencies": { + "argparse": "^1.0.7", + "entities": "~1.1.1", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, + "node_modules/mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "dependencies": { + "mime-db": "1.47.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "node_modules/nconf": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.11.4.tgz", + "integrity": "sha512-YaDR846q11JnG1vTrhJ0QIlhiGY6+W1bgWtReG9SS3vkTl3AoNwFvUItdhG6/ZjGCfWpUVuRTNEBTDAQ3nWhGw==", + "dependencies": { + "async": "^1.4.0", + "ini": "^2.0.0", + "secure-keys": "^1.0.0", + "yargs": "^16.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/nconf/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "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" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nconf/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ncp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz", + "integrity": "sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY=", + "bin": { + "ncp": "bin/ncp" + } + }, + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/nwmatcher": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", + "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==", + "optional": true + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "optional": true, + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.0.0.tgz", + "integrity": "sha512-LBS97LFe2RV6GJmXBi6OKcETKyklHNMV0xw7BtsVn2MlsgsydyZetSCbCANr+PFLmDyv4KV88nn0eCKza665Mg==", + "dependencies": { + "chalk": "^2.3.1", + "cli-cursor": "^2.1.0", + "cli-spinners": "^1.1.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^4.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse5": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", + "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", + "optional": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "node_modules/pkginfo": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", + "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "optional": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prompt": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.0.0.tgz", + "integrity": "sha1-jlcSPDlquYiJf7Mn/Trtw+c15P4=", + "dependencies": { + "colors": "^1.1.2", + "pkginfo": "0.x.x", + "read": "1.0.x", + "revalidator": "0.1.x", + "utile": "0.3.x", + "winston": "2.1.x" + }, + "engines": { + "node": ">= 0.6.6" + } + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/request/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dependencies": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/revalidator": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", + "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "optional": true + }, + "node_modules/secure-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz", + "integrity": "sha1-8MgtmKOxOah3aogIBQuCRDEIf8o=" + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "engines": { + "node": "*" + } + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.fromcodepoint": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz", + "integrity": "sha1-jZeDM8C8klOPUPOD5IiPPlYZ1lM=" + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "optional": true + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "optional": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "optional": true + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tslint": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", + "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" + }, + "bin": { + "tslint": "bin/tslint" + }, + "engines": { + "node": ">=4.8.0" + }, + "peerDependencies": { + "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" + } + }, + "node_modules/tslint/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "peerDependencies": { + "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "optional": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", + "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, + "node_modules/underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + }, + "node_modules/unescape-js": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unescape-js/-/unescape-js-1.1.4.tgz", + "integrity": "sha512-42SD8NOQEhdYntEiUQdYq/1V/YHwr1HLwlHuTJB5InVVdOSbgI6xu8jK5q65yIzuFCfczzyDF/7hbGzVbyCw0g==", + "dependencies": { + "string.fromcodepoint": "^0.2.1" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utile": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/utile/-/utile-0.3.0.tgz", + "integrity": "sha1-E1LDQOuCDk2N26A5pPv6oy7U7zo=", + "dependencies": { + "async": "~0.9.0", + "deep-equal": "~0.2.1", + "i": "0.3.x", + "mkdirp": "0.x.x", + "ncp": "1.0.x", + "rimraf": "2.x.x" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/utile/node_modules/async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + }, + "node_modules/utile/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vsc-leetcode-cli": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.8.1.tgz", + "integrity": "sha512-C5q5wGeedHKJzs53/jrVWEeobRteB/libKrVHmLqE3zraKJBgteUN4LUNEYrAjU9O6yxgj/NPEWOLoEdRhwATw==", + "dependencies": { + "ansi-styles": "3.2.1", + "cheerio": "0.20.0", + "he": "1.2.0", + "mkdirp": "^1.0.4", + "moment": "^2.29.1", + "nconf": "^0.11.2", + "ora": "3.0.0", + "prompt": "1.0.0", + "request": "2.88.0", + "supports-color": "5.5.0", + "underscore": "1.9.1", + "wordwrap": "1.0.0", + "yargs": "^15.4.1" + }, + "bin": { + "leetcode": "bin/leetcode" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-2.0.1.tgz", + "integrity": "sha1-O/glj30xjHRDw28uFpQCoaZwNQY=", + "optional": true + }, + "node_modules/whatwg-url-compat": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz", + "integrity": "sha1-AImBEa9om7CXVBzVpFymyHmERb8=", + "optional": true, + "dependencies": { + "tr46": "~0.0.1" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "node_modules/winston": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.1.1.tgz", + "integrity": "sha1-PJNJ0ZYgf9G9/51LxD73JRDjoS4=", + "dependencies": { + "async": "~1.0.0", + "colors": "1.0.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "pkginfo": "0.3.x", + "stack-trace": "0.0.x" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/winston/node_modules/async": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", + "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" + }, + "node_modules/winston/node_modules/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/winston/node_modules/pkginfo": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", + "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/xml-name-validator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", + "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", + "optional": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/yargs/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/yargs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/yargs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/yargs/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + } + }, "dependencies": { "@babel/code-frame": { "version": "7.12.13", @@ -117,9 +2241,9 @@ } }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "3.2.1", @@ -203,11 +2327,6 @@ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" - }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -250,13 +2369,13 @@ "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==" }, "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, "clone": { @@ -264,11 +2383,6 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -440,6 +2554,11 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -461,7 +2580,8 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "devOptional": true }, "estraverse": { "version": "4.3.0", @@ -669,14 +2789,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" }, "is-core-module": { "version": "2.4.0", @@ -688,12 +2803,9 @@ } }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-typedarray": { "version": "1.0.0", @@ -789,14 +2901,6 @@ "verror": "1.10.0" } }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "^1.0.0" - } - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -900,29 +3004,34 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "nconf": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.10.0.tgz", - "integrity": "sha512-fKiXMQrpP7CYWJQzKkPPx9hPgmq+YLDyxcG9N8RpiE9FoCkCbzD0NyW0YhE3xn3Aupe7nnDeIx4PFzYehpHT9Q==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.11.4.tgz", + "integrity": "sha512-YaDR846q11JnG1vTrhJ0QIlhiGY6+W1bgWtReG9SS3vkTl3AoNwFvUItdhG6/ZjGCfWpUVuRTNEBTDAQ3nWhGw==", "requires": { "async": "^1.4.0", - "ini": "^1.3.0", + "ini": "^2.0.0", "secure-keys": "^1.0.0", - "yargs": "^3.19.0" + "yargs": "^16.1.1" }, "dependencies": { "yargs": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "requires": { - "camelcase": "^2.0.1", - "cliui": "^3.0.3", - "decamelize": "^1.1.1", - "os-locale": "^1.4.0", - "string-width": "^1.0.1", - "window-size": "^0.1.4", - "y18n": "^3.2.0" + "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" } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" } } }, @@ -939,11 +3048,6 @@ "boolbase": "~1.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, "nwmatcher": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", @@ -1013,14 +3117,6 @@ } } }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "requires": { - "lcid": "^1.0.0" - } - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -1286,14 +3382,19 @@ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "string.fromcodepoint": { @@ -1301,17 +3402,12 @@ "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz", "integrity": "sha1-jZeDM8C8klOPUPOD5IiPPlYZ1lM=" }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" } }, "supports-color": { @@ -1494,23 +3590,23 @@ } }, "vsc-leetcode-cli": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.8.0.tgz", - "integrity": "sha512-KcFzpk3OZ+wUCoeK1yjBK0hYpJItYd8WFC7pQfE1zxJGjQs4tUvadLI5imKfRjw5NicjNRFnVpVv6N7ig7ik4A==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.8.1.tgz", + "integrity": "sha512-C5q5wGeedHKJzs53/jrVWEeobRteB/libKrVHmLqE3zraKJBgteUN4LUNEYrAjU9O6yxgj/NPEWOLoEdRhwATw==", "requires": { "ansi-styles": "3.2.1", "cheerio": "0.20.0", "he": "1.2.0", "mkdirp": "^1.0.4", - "moment": "^2.20.1", - "nconf": "0.10.0", + "moment": "^2.29.1", + "nconf": "^0.11.2", "ora": "3.0.0", "prompt": "1.0.0", "request": "2.88.0", "supports-color": "5.5.0", "underscore": "1.9.1", "wordwrap": "1.0.0", - "yargs": "^15.3.1" + "yargs": "^15.4.1" } }, "wcwidth": { @@ -1541,11 +3637,6 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, - "window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" - }, "winston": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/winston/-/winston-2.1.1.tgz", @@ -1589,12 +3680,36 @@ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } } }, "wrappy": { @@ -1609,9 +3724,9 @@ "optional": true }, "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yargs": { "version": "15.4.1", @@ -1631,11 +3746,6 @@ "yargs-parser": "^18.1.2" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -1667,29 +3777,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", diff --git a/package.json b/package.json index bcdb5c02..1bb764f3 100644 --- a/package.json +++ b/package.json @@ -729,6 +729,6 @@ "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", "unescape-js": "^1.1.4", - "vsc-leetcode-cli": "2.8.0" + "vsc-leetcode-cli": "2.8.1" } } diff --git a/src/commands/plugin.ts b/src/commands/plugin.ts index 040f8321..d2ed4b6c 100644 --- a/src/commands/plugin.ts +++ b/src/commands/plugin.ts @@ -21,7 +21,7 @@ export async function switchEndpoint(): Promise<void> { }, { label: `${isCnEnabled ? "$(check) " : ""}力扣`, - description: "leetcode-cn.com", + description: "leetcode.cn", detail: `启用中国版 LeetCode`, value: Endpoint.LeetCodeCN, }, diff --git a/src/utils/uiUtils.ts b/src/utils/uiUtils.ts index 53275fa0..9e251a55 100644 --- a/src/utils/uiUtils.ts +++ b/src/utils/uiUtils.ts @@ -48,7 +48,7 @@ export async function promptForSignIn(): Promise<void> { break; case DialogOptions.singUp: if (getLeetCodeEndpoint()) { - openUrl("https://leetcode-cn.com"); + openUrl("https://leetcode.cn"); } else { openUrl("https://leetcode.com"); } From 8d191f96f826aaad5865593552cecb87b816ef41 Mon Sep 17 00:00:00 2001 From: Miloas <qiyu.null@gmail.com> Date: Mon, 9 May 2022 18:07:24 +0800 Subject: [PATCH 82/92] 0.18.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index fe9c5d7f..51c317cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vscode-leetcode", - "version": "0.18.0", + "version": "0.18.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "vscode-leetcode", - "version": "0.18.0", + "version": "0.18.1", "license": "MIT", "dependencies": { "fs-extra": "^10.0.0", diff --git a/package.json b/package.json index 1bb764f3..db0d475a 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-leetcode", "displayName": "LeetCode", "description": "Solve LeetCode problems in VS Code", - "version": "0.18.0", + "version": "0.18.1", "author": "Sheng Chen", "publisher": "LeetCode", "license": "MIT", From 4f8c777eab170636fa0869dc8c7f4af7a4be8d2d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 May 2022 18:18:42 +0800 Subject: [PATCH 83/92] chore(deps): bump ansi-regex from 3.0.0 to 3.0.1 (#805) Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 3.0.0 to 3.0.1. - [Release notes](https://github.com/chalk/ansi-regex/releases) - [Commits](https://github.com/chalk/ansi-regex/compare/v3.0.0...v3.0.1) --- updated-dependencies: - dependency-name: ansi-regex dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 51c317cb..27452c04 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1224,9 +1224,9 @@ } }, "node_modules/ora/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "engines": { "node": ">=4" } @@ -3103,9 +3103,9 @@ }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" }, "strip-ansi": { "version": "4.0.0", From a68f93551231f30ff5153d8588fbbe2db53410c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 May 2022 18:18:58 +0800 Subject: [PATCH 84/92] chore(deps): bump minimist from 1.2.5 to 1.2.6 (#788) 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] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 27452c04..72b2ae44 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1074,9 +1074,9 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "node_modules/mkdirp": { "version": "1.0.4", @@ -2984,9 +2984,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "mkdirp": { "version": "1.0.4", From 2afb9065f3de4a6bb94b3955c2c44fcb4a30bd32 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 May 2022 18:19:15 +0800 Subject: [PATCH 85/92] chore(deps): bump i from 0.3.6 to 0.3.7 (#743) Bumps [i](https://github.com/pksunkara/inflect) from 0.3.6 to 0.3.7. - [Release notes](https://github.com/pksunkara/inflect/releases) - [Commits](https://github.com/pksunkara/inflect/compare/v0.3.6...v0.3.7) --- updated-dependencies: - dependency-name: i dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 72b2ae44..667367a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -816,9 +816,9 @@ } }, "node_modules/i": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", - "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz", + "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==", "engines": { "node": ">=0.4" } @@ -2770,9 +2770,9 @@ } }, "i": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", - "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=" + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz", + "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==" }, "inflight": { "version": "1.0.6", From d713ad5ff5b12977a2cce485d7688f99966fb628 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 May 2022 18:22:22 +0800 Subject: [PATCH 86/92] chore(deps): bump moment from 2.29.1 to 2.29.3 (#806) Bumps [moment](https://github.com/moment/moment) from 2.29.1 to 2.29.3. - [Release notes](https://github.com/moment/moment/releases) - [Changelog](https://github.com/moment/moment/blob/2.29.3/CHANGELOG.md) - [Commits](https://github.com/moment/moment/compare/2.29.1...2.29.3) --- updated-dependencies: - dependency-name: moment dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 667367a3..76397db2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1090,9 +1090,9 @@ } }, "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", + "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==", "engines": { "node": "*" } @@ -2994,9 +2994,9 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", + "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==" }, "mute-stream": { "version": "0.0.8", From 71264faf1ed6de25e60a39efbf73239fd3434353 Mon Sep 17 00:00:00 2001 From: leo <467512138@qq.com> Date: Wed, 15 May 2024 16:36:57 +0800 Subject: [PATCH 87/92] feat: change login way and add tracking logic option (#944) fix: resolve UAT issues fix: update action feat: add login progress fix: change function name Co-authored-by: leo.zhao<zale0201@gmail.com> --- .vscode/settings.json | 7 +- README.md | 16 +- docs/README_zh-CN.md | 49 ++++--- package-lock.json | 74 ++++++++++ package.json | 26 ++-- src/commands/list.ts | 6 +- src/commands/show.ts | 93 +++++++----- src/explorer/LeetCodeTreeDataProvider.ts | 41 ++++-- src/extension.ts | 42 +++++- src/globalState.ts | 55 +++++++ src/leetCodeManager.ts | 177 ++++++++++------------- src/request/query-user-data.ts | 25 ++++ src/shared.ts | 40 ++++- src/utils/httpUtils.ts | 28 ++++ src/utils/toolUtils.ts | 26 ++++ src/utils/trackingUtils.ts | 130 +++++++++++++++++ src/webview/leetCodePreviewProvider.ts | 72 +++++---- 17 files changed, 670 insertions(+), 237 deletions(-) create mode 100644 src/globalState.ts create mode 100644 src/request/query-user-data.ts create mode 100644 src/utils/httpUtils.ts create mode 100644 src/utils/toolUtils.ts create mode 100644 src/utils/trackingUtils.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index a2d0a8b1..b5f72312 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,5 +10,8 @@ ".vscode-test": true }, "tslint.autoFixOnSave": true, - "tslint.ignoreDefinitionFiles": true -} \ No newline at end of file + "tslint.ignoreDefinitionFiles": true, + "prettier.tabWidth": 4, + "prettier.useTabs": false, + "prettier.printWidth": 150 +} diff --git a/README.md b/README.md index cfe37701..623e95f2 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ - English Document | [中文文档](https://github.com/LeetCode-OpenSource/vscode-leetcode/blob/master/docs/README_zh-CN.md) ## ❗️ Attention ❗️- Workaround to login to LeetCode endpoint + > Note: If you are using `leetcode.cn`, you can just ignore this section. Recently we observed that [the extension cannot login to leetcode.com endpoint anymore](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/478). The root cause of this issue is that leetcode.com changed its login mechanism and so far there is no ideal way to fix that issue. @@ -32,9 +33,10 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh > Note: If you want to use third-party login(**Recommended**), please make sure your account has been connected to the third-party. If you want to use `Cookie` login, click [here](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/478#issuecomment-564757098) to see the steps. ## Requirements + - [VS Code 1.30.1+](https://code.visualstudio.com/) - [Node.js 10+](https://nodejs.org) - > NOTE: Please make sure that `Node` is in your `PATH` environment variable. You can also use the setting `leetcode.nodePath` to specify the location of your `Node.js` executable. + > NOTE: Please make sure that `Node` is in your `PATH` environment variable. You can also use the setting `leetcode.nodePath` to specify the location of your `Node.js` executable. ## Quick Start @@ -43,6 +45,7 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh ## Features ### Sign In/Out + <p align="center"> <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/sign_in.png" alt="Sign in" /> </p> @@ -52,9 +55,11 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh - You can also use the following command to sign in/out: - **LeetCode: Sign in** - **LeetCode: Sign out** + --- ### Switch Endpoint + <p align="center"> <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/endpoint.png" alt="Switch Endpoint" /> </p> @@ -62,6 +67,7 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh - By clicking the button  at the **explorer's navigation bar**, you can switch between different endpoints. - The supported endpoints are: + - **leetcode.com** - **leetcode.cn** @@ -70,6 +76,7 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh --- ### Pick a Problem + <p align="center"> <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/pick_problem.png" alt="Pick a Problem" /> </p> @@ -86,11 +93,13 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh --- ### Editor Shortcuts + <p align="center"> <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/shortcuts.png" alt="Editor Shortcuts" /> </p> - The extension supports 5 editor shortcuts (aka Code Lens): + - `Submit`: Submit your answer to LeetCode. - `Test`: Test your answer with customized test cases. - `Star/Unstar`: Star or unstar the current problem. @@ -102,6 +111,7 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh --- ### Search problems by Keywords + <p align="center"> <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/search.png" alt="Search problems by Keywords" /> </p> @@ -111,19 +121,18 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh --- ### Manage Session + <p align="center"> <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/session.png" alt="Manage Session" /> </p> - To manage your LeetCode sessions, just clicking the `LeetCode: ***` at the bottom of the status bar. You can **switch** between sessions or **create**, **delete** a session. - ## Settings | Setting Name | Description | Default Value | | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | | `leetcode.hideSolved` | Specify to hide the solved problems or not | `false` | -| `leetcode.showLocked` | Specify to show the locked problems or not. Only Premium users could open the locked problems | `false` | | `leetcode.defaultLanguage` | Specify the default language used to solve the problem. Supported languages are: `bash`, `c`, `cpp`, `csharp`, `golang`, `java`, `javascript`, `kotlin`, `mysql`, `php`, `python`,`python3`,`ruby`,`rust`, `scala`, `swift`, `typescript` | `N/A` | | `leetcode.useWsl` | Specify whether to use WSL or not | `false` | | `leetcode.endpoint` | Specify the active endpoint. Supported endpoints are: `leetcode`, `leetcode-cn` | `leetcode` | @@ -137,6 +146,7 @@ Thanks for [@yihong0618](https://github.com/yihong0618) provided a workaround wh | `leetcode.useEndpointTranslation` | Use endpoint's translation (if available) | `true` | | `leetcode.colorizeProblems` | Add difficulty badge and colorize problems files in explorer tree | `true` | | `leetcode.problems.sortStrategy` | Specify sorting strategy for problems list | `None` | +| `leetcode.allowReportData` | Allow LeetCode to report anonymous usage data to improve the product. list | `true` | ## Want Help? diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index ad4c9a74..caf110bf 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -23,19 +23,20 @@ - [English Document](https://github.com/LeetCode-OpenSource/vscode-leetcode#requirements) | 中文文档 ## ❗️ 注意 ❗️- 无法登录 LeetCode 节点的临时解决办法 + > 注意:如果使用的是 `leetcode.cn` 账户,可以跳过此段落。 近期我们发现插件出现了[无法登录 leetcode.com 节点的问题](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/478)。原因是因为近期 leetcode.com 改变了登录机制,目前我们暂时没有找到解决该问题的完美解决方案。 感谢 [@yihong0618](https://github.com/yihong0618) 提供了一个临时解决办法。现在你可以直接点击登录按钮并选择第三方登录或者 `Cookie` 登录。 - > 注意:如果你希望使用第三方登录(**推荐**),请确保你的账户已经与第三方账户连接。如果你希望通过 `Cookie` 登录,请点击[该连接](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/478#issuecomment-564757098)查看登录步骤。 ## 运行条件 + - [VS Code 1.23.0+](https://code.visualstudio.com/) - [Node.js 10+](https://nodejs.org) - > 注意:请确保`Node`在`PATH`环境变量中。您也可以通过设定 `leetcode.nodePath` 选项来指定 `Node.js` 可执行文件的路径。 + > 注意:请确保`Node`在`PATH`环境变量中。您也可以通过设定 `leetcode.nodePath` 选项来指定 `Node.js` 可执行文件的路径。 ## 快速开始 @@ -44,18 +45,21 @@ ## 功能 ### 登入登出 + <p align="center"> <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/sign_in.png" alt="登入登出" /> </p> - 点击 `LeetCode Explorer` 中的 `Sign in to LeetCode` 即可登入。 -- 你也可以使用下来命令登入或利用cookie登入或登出: +- 你也可以使用下来命令登入或利用 cookie 登入或登出: - **LeetCode: Sign in** - **LeetCode: Sign out** + --- ### 切换 LeetCode 版本 + <p align="center"> <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/endpoint.png" alt="切换 LeetCode 版本" /> </p> @@ -63,6 +67,7 @@ - LeetCode 目前有**英文版**和**中文版**两种版本。点击 `LeetCode Explorer` 导航栏中的  按钮可切换版本。 - 目前可切换的版本有: + - **leetcode.com** - **leetcode.cn** @@ -71,6 +76,7 @@ --- ### 选择题目 + <p align="center"> <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/pick_problem.png" alt="选择题目" /> </p> @@ -87,11 +93,13 @@ --- ### 编辑器快捷方式 + <p align="center"> <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/shortcuts.png" alt="Editor Shortcuts" /> </p> - 插件会在编辑区域内支持五种不同的快捷方式(Code Lens): + - `Submit`: 提交你的答案至 LeetCode; - `Test`: 用给定的测试用例测试你的答案; - `Star`: 收藏或取消收藏该问题; @@ -103,6 +111,7 @@ --- ### 通过关键字搜索题目 + <p align="center"> <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/search.png" alt="通过关键字搜索题目" /> </p> @@ -112,31 +121,33 @@ --- ### 管理存档 + <p align="center"> <img src="https://raw.githubusercontent.com/LeetCode-OpenSource/vscode-leetcode/master/docs/imgs/session.png" alt="管理存档" /> </p> - 点击位于 VS Code 底部状态栏的 `LeetCode: ***` 管理 `LeetCode 存档`。你可以**切换**存档或者**创建**,**删除**存档。 - ## 插件配置项 -| 配置项名称 | 描述 | 默认值 | -| ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | -| `leetcode.hideSolved` | 指定是否要隐藏已解决的问题 | `false` | -| `leetcode.showLocked` | 指定是否显示付费题目,只有付费账户才可以打开付费题目 | `false` | -| `leetcode.defaultLanguage` | 指定答题时使用的默认语言,可选语言有:`bash`, `c`, `cpp`, `csharp`, `golang`, `java`, `javascript`, `kotlin`, `mysql`, `php`, `python`,`python3`,`ruby`, `rust`, `scala`, `swift`, `typescript` | `N/A` | -| `leetcode.useWsl` | 指定是否启用 WSL | `false` | -| `leetcode.endpoint` | 指定使用的终端,可用终端有:`leetcode`, `leetcode-cn` | `leetcode` | -| `leetcode.workspaceFolder` | 指定保存文件的工作区目录 | `""` | -| `leetcode.filePath` | 指定生成题目文件的相对文件夹路径名和文件名。点击查看[更多详细用法](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/%E8%87%AA%E5%AE%9A%E4%B9%89%E9%A2%98%E7%9B%AE%E6%96%87%E4%BB%B6%E7%9A%84%E7%9B%B8%E5%AF%B9%E6%96%87%E4%BB%B6%E5%A4%B9%E8%B7%AF%E5%BE%84%E5%92%8C%E6%96%87%E4%BB%B6%E5%90%8D)。 | | -| `leetcode.enableStatusBar` | 指定是否在 VS Code 下方显示插件状态栏。 | `true` | -| `leetcode.editor.shortcuts` | 指定在编辑器内所自定义的快捷方式。可用的快捷方式有: `submit`, `test`, `star`, `solution`, `description`。 | `["submit, test"]` | -| `leetcode.enableSideMode` | 指定在解决一道题时,是否将`问题预览`、`高票答案`与`提交结果`窗口集中在编辑器的第二栏。 | `true` | -| `leetcode.nodePath` | 指定 `Node.js` 可执行文件的路径。如:C:\Program Files\nodejs\node.exe | `node` | -| `leetcode.showCommentDescription` | 指定是否要在注释中显示题干。 | `false` | -| `leetcode.useEndpointTranslation` | 是否显示翻译版本内容。 | `true` | + +| 配置项名称 | 描述 | 默认值 | +| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | +| `leetcode.hideSolved` | 指定是否要隐藏已解决的问题 | `false` | +| `leetcode.defaultLanguage` | 指定答题时使用的默认语言,可选语言有:`bash`, `c`, `cpp`, `csharp`, `golang`, `java`, `javascript`, `kotlin`, `mysql`, `php`, `python`,`python3`,`ruby`, `rust`, `scala`, `swift`, `typescript` | `N/A` | +| `leetcode.useWsl` | 指定是否启用 WSL | `false` | +| `leetcode.endpoint` | 指定使用的终端,可用终端有:`leetcode`, `leetcode-cn` | `leetcode` | +| `leetcode.workspaceFolder` | 指定保存文件的工作区目录 | `""` | +| `leetcode.filePath` | 指定生成题目文件的相对文件夹路径名和文件名。点击查看[更多详细用法](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/%E8%87%AA%E5%AE%9A%E4%B9%89%E9%A2%98%E7%9B%AE%E6%96%87%E4%BB%B6%E7%9A%84%E7%9B%B8%E5%AF%B9%E6%96%87%E4%BB%B6%E5%A4%B9%E8%B7%AF%E5%BE%84%E5%92%8C%E6%96%87%E4%BB%B6%E5%90%8D)。 | | +| `leetcode.enableStatusBar` | 指定是否在 VS Code 下方显示插件状态栏。 | `true` | +| `leetcode.editor.shortcuts` | 指定在编辑器内所自定义的快捷方式。可用的快捷方式有: `submit`, `test`, `star`, `solution`, `description`。 | `["submit, test"]` | +| `leetcode.enableSideMode` | 指定在解决一道题时,是否将`问题预览`、`高票答案`与`提交结果`窗口集中在编辑器的第二栏。 | `true` | +| `leetcode.nodePath` | 指定 `Node.js` 可执行文件的路径。如:C:\Program Files\nodejs\node.exe | `node` | +| `leetcode.showCommentDescription` | 指定是否要在注释中显示题干。 | `false` | +| `leetcode.useEndpointTranslation` | 是否显示翻译版本内容。 | `true` | +| `leetcode.allowReportData` | 为了更好的产品体验允许上报用户埋数据 | `true` | ## 需要帮助? + 在遇到任何问题时,可以先查看一下[疑难解答](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/%E7%96%91%E9%9A%BE%E8%A7%A3%E7%AD%94)以及[常见问题](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98)寻求帮助。 如果您的问题依然没有解决,可以在 [Gitter Channel](https://gitter.im/vscode-leetcode/Lobby) 联系我们,或者您也可以[记录一个新的 issue](https://github.com/LeetCode-OpenSource/vscode-leetcode/issues/new/choose)。 diff --git a/package-lock.json b/package-lock.json index 76397db2..2ac17cf5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.18.1", "license": "MIT", "dependencies": { + "axios": "^1.6.8", "fs-extra": "^10.0.0", "highlight.js": "^10.7.2", "lodash": "^4.17.21", @@ -220,6 +221,29 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, + "node_modules/axios": { + "version": "1.6.8", + "resolved": "https://r.cnpmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://r2.cnpmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -642,6 +666,19 @@ "node": ">=8" } }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://r.cnpmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -1341,6 +1378,11 @@ "node": ">= 0.6.6" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://r2.cnpmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -2294,6 +2336,28 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, + "axios": { + "version": "1.6.8", + "resolved": "https://r.cnpmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "requires": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://r2.cnpmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2635,6 +2699,11 @@ "path-exists": "^4.0.0" } }, + "follow-redirects": { + "version": "1.15.6", + "resolved": "https://r.cnpmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -3189,6 +3258,11 @@ "winston": "2.1.x" } }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://r2.cnpmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", diff --git a/package.json b/package.json index db0d475a..702956c1 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,8 @@ "name": "vscode-leetcode", "displayName": "LeetCode", "description": "Solve LeetCode problems in VS Code", - "version": "0.18.1", - "author": "Sheng Chen", + "version": "0.18.2", + "author": "LeetCode", "publisher": "LeetCode", "license": "MIT", "icon": "resources/LeetCode.png", @@ -182,15 +182,20 @@ "when": "view == leetCodeExplorer", "group": "navigation@3" }, + { + "command": "leetcode.signout", + "when": "view == leetCodeExplorer", + "group": "overflow@1" + }, { "command": "leetcode.pickOne", "when": "view == leetCodeExplorer", - "group": "overflow@0" + "group": "overflow@2" }, { "command": "leetcode.problems.sort", "when": "view == leetCodeExplorer", - "group": "overflow@1" + "group": "overflow@3" } ], "view/item/context": [ @@ -294,12 +299,6 @@ "scope": "application", "description": "Hide solved problems." }, - "leetcode.showLocked": { - "type": "boolean", - "default": false, - "scope": "application", - "description": "Show locked problems." - }, "leetcode.defaultLanguage": { "type": "string", "enum": [ @@ -700,6 +699,12 @@ "Acceptance Rate (Descending)" ], "description": "Sorting strategy for problems list." + }, + "leetcode.allowReportData": { + "type": "boolean", + "default": true, + "scope": "application", + "description": "Allow LeetCode to report anonymous usage data to improve the product." } } } @@ -723,6 +728,7 @@ "typescript": "^4.3.2" }, "dependencies": { + "axios": "^1.6.8", "fs-extra": "^10.0.0", "highlight.js": "^10.7.2", "lodash": "^4.17.21", diff --git a/src/commands/list.ts b/src/commands/list.ts index 7e7b36a7..3ebe236a 100644 --- a/src/commands/list.ts +++ b/src/commands/list.ts @@ -1,7 +1,6 @@ // Copyright (c) jdneo. All rights reserved. // Licensed under the MIT license. -import * as vscode from "vscode"; import { leetCodeExecutor } from "../leetCodeExecutor"; import { leetCodeManager } from "../leetCodeManager"; import { IProblem, ProblemState, UserStatus } from "../shared"; @@ -13,10 +12,9 @@ export async function listProblems(): Promise<IProblem[]> { if (leetCodeManager.getStatus() === UserStatus.SignedOut) { return []; } - const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode"); - const showLocked: boolean = !!leetCodeConfig.get<boolean>("showLocked"); + const useEndpointTranslation: boolean = settingUtils.shouldUseEndpointTranslation(); - const result: string = await leetCodeExecutor.listProblems(showLocked, useEndpointTranslation); + const result: string = await leetCodeExecutor.listProblems(true, useEndpointTranslation); const problems: IProblem[] = []; const lines: string[] = result.split("\n"); const reg: RegExp = /^(.)\s(.{1,2})\s(.)\s\[\s*(\d*)\s*\]\s*(.*)\s*(Easy|Medium|Hard)\s*\((\s*\d+\.\d+ %)\)/; diff --git a/src/commands/show.ts b/src/commands/show.ts index 3aebce8f..eccf5571 100644 --- a/src/commands/show.ts +++ b/src/commands/show.ts @@ -10,19 +10,30 @@ import { LeetCodeNode } from "../explorer/LeetCodeNode"; import { leetCodeChannel } from "../leetCodeChannel"; import { leetCodeExecutor } from "../leetCodeExecutor"; import { leetCodeManager } from "../leetCodeManager"; -import { IProblem, IQuickItemEx, languages, ProblemState } from "../shared"; +import { Endpoint, IProblem, IQuickItemEx, languages, PREMIUM_URL_CN, PREMIUM_URL_GLOBAL, ProblemState } from "../shared"; import { genFileExt, genFileName, getNodeIdFromFile } from "../utils/problemUtils"; import * as settingUtils from "../utils/settingUtils"; import { IDescriptionConfiguration } from "../utils/settingUtils"; -import { DialogOptions, DialogType, openSettingsEditor, promptForOpenOutputChannel, promptForSignIn, promptHintMessage } from "../utils/uiUtils"; +import { + DialogOptions, + DialogType, + openSettingsEditor, + openUrl, + promptForOpenOutputChannel, + promptForSignIn, + promptHintMessage, +} from "../utils/uiUtils"; import { getActiveFilePath, selectWorkspaceFolder } from "../utils/workspaceUtils"; import * as wsl from "../utils/wslUtils"; import { leetCodePreviewProvider } from "../webview/leetCodePreviewProvider"; import { leetCodeSolutionProvider } from "../webview/leetCodeSolutionProvider"; import * as list from "./list"; +import { getLeetCodeEndpoint } from "./plugin"; +import { globalState } from "../globalState"; export async function previewProblem(input: IProblem | vscode.Uri, isSideMode: boolean = false): Promise<void> { let node: IProblem; + if (input instanceof vscode.Uri) { const activeFilePath: string = input.fsPath; const id: string = await getNodeIdFromFile(activeFilePath); @@ -40,7 +51,14 @@ export async function previewProblem(input: IProblem | vscode.Uri, isSideMode: b isSideMode = true; } else { node = input; + const { isPremium } = globalState.getUserStatus() ?? {}; + if (input.locked && !isPremium) { + const url = getLeetCodeEndpoint() === Endpoint.LeetCode ? PREMIUM_URL_GLOBAL : PREMIUM_URL_CN; + openUrl(url); + return; + } } + const needTranslation: boolean = settingUtils.shouldUseEndpointTranslation(); const descString: string = await leetCodeExecutor.getDescription(node.id, needTranslation); leetCodePreviewProvider.show(descString, node, isSideMode); @@ -64,13 +82,10 @@ export async function searchProblem(): Promise<void> { promptForSignIn(); return; } - const choice: IQuickItemEx<IProblem> | undefined = await vscode.window.showQuickPick( - parseProblemsToPicks(list.listProblems()), - { - matchOnDetail: true, - placeHolder: "Select one problem", - }, - ); + const choice: IQuickItemEx<IProblem> | undefined = await vscode.window.showQuickPick(parseProblemsToPicks(list.listProblems()), { + matchOnDetail: true, + placeHolder: "Select one problem", + }); if (!choice) { return; } @@ -79,11 +94,14 @@ export async function searchProblem(): Promise<void> { export async function showSolution(input: LeetCodeNode | vscode.Uri): Promise<void> { let problemInput: string | undefined; - if (input instanceof LeetCodeNode) { // Triggerred from explorer + if (input instanceof LeetCodeNode) { + // Triggerred from explorer problemInput = input.id; - } else if (input instanceof vscode.Uri) { // Triggerred from Code Lens/context menu + } else if (input instanceof vscode.Uri) { + // Triggerred from Code Lens/context menu problemInput = `"${input.fsPath}"`; - } else if (!input) { // Triggerred from command + } else if (!input) { + // Triggerred from command problemInput = await getActiveFilePath(); } @@ -112,7 +130,12 @@ async function fetchProblemLanguage(): Promise<string | undefined> { if (defaultLanguage && languages.indexOf(defaultLanguage) < 0) { defaultLanguage = undefined; } - const language: string | undefined = defaultLanguage || await vscode.window.showQuickPick(languages, { placeHolder: "Select the language you want to use", ignoreFocusOut: true }); + const language: string | undefined = + defaultLanguage || + (await vscode.window.showQuickPick(languages, { + placeHolder: "Select the language you want to use", + ignoreFocusOut: true, + })); // fire-and-forget default language query (async (): Promise<void> => { if (language && !defaultLanguage && leetCodeConfig.get<boolean>("hint.setDefaultLanguage")) { @@ -120,7 +143,7 @@ async function fetchProblemLanguage(): Promise<string | undefined> { `Would you like to set '${language}' as your default language?`, DialogOptions.yes, DialogOptions.no, - DialogOptions.never, + DialogOptions.never ); if (choice === DialogOptions.yes) { leetCodeConfig.update("defaultLanguage", language, true /* UserSetting */); @@ -149,10 +172,7 @@ async function showProblemInternal(node: IProblem): Promise<void> { .get<string>(`filePath.${language}.folder`, leetCodeConfig.get<string>(`filePath.default.folder`, "")) .trim(); const fileName: string = leetCodeConfig - .get<string>( - `filePath.${language}.filename`, - leetCodeConfig.get<string>(`filePath.default.filename`) || genFileName(node, language), - ) + .get<string>(`filePath.${language}.filename`, leetCodeConfig.get<string>(`filePath.default.filename`) || genFileName(node, language)) .trim(); let finalPath: string = path.join(workspaceFolder, fileFolder, fileName); @@ -172,12 +192,15 @@ async function showProblemInternal(node: IProblem): Promise<void> { await leetCodeExecutor.showProblem(node, language, finalPath, descriptionConfig.showInComment, needTranslation); const promises: any[] = [ - vscode.window.showTextDocument(vscode.Uri.file(finalPath), { preview: false, viewColumn: vscode.ViewColumn.One }), + vscode.window.showTextDocument(vscode.Uri.file(finalPath), { + preview: false, + viewColumn: vscode.ViewColumn.One, + }), promptHintMessage( "hint.commentDescription", 'You can config how to show the problem description through "leetcode.showDescription".', "Open settings", - (): Promise<any> => openSettingsEditor("leetcode.showDescription"), + (): Promise<any> => openSettingsEditor("leetcode.showDescription") ), ]; if (descriptionConfig.showInWebview) { @@ -195,12 +218,17 @@ async function showDescriptionView(node: IProblem): Promise<void> { } async function parseProblemsToPicks(p: Promise<IProblem[]>): Promise<Array<IQuickItemEx<IProblem>>> { return new Promise(async (resolve: (res: Array<IQuickItemEx<IProblem>>) => void): Promise<void> => { - const picks: Array<IQuickItemEx<IProblem>> = (await p).map((problem: IProblem) => Object.assign({}, { - label: `${parseProblemDecorator(problem.state, problem.locked)}${problem.id}.${problem.name}`, - description: "", - detail: `AC rate: ${problem.passRate}, Difficulty: ${problem.difficulty}`, - value: problem, - })); + const picks: Array<IQuickItemEx<IProblem>> = (await p).map((problem: IProblem) => + Object.assign( + {}, + { + label: `${parseProblemDecorator(problem.state, problem.locked)}${problem.id}.${problem.name}`, + description: "", + detail: `AC rate: ${problem.passRate}, Difficulty: ${problem.difficulty}`, + value: problem, + } + ) + ); resolve(picks); }); } @@ -266,14 +294,11 @@ async function resolveTagForProblem(problem: IProblem): Promise<string | undefin if (problem.tags.length === 1) { return problem.tags[0]; } - return await vscode.window.showQuickPick( - problem.tags, - { - matchOnDetail: true, - placeHolder: "Multiple tags available, please select one", - ignoreFocusOut: true, - }, - ); + return await vscode.window.showQuickPick(problem.tags, { + matchOnDetail: true, + placeHolder: "Multiple tags available, please select one", + ignoreFocusOut: true, + }); } async function resolveCompanyForProblem(problem: IProblem): Promise<string | undefined> { diff --git a/src/explorer/LeetCodeTreeDataProvider.ts b/src/explorer/LeetCodeTreeDataProvider.ts index 4764934a..9c298944 100644 --- a/src/explorer/LeetCodeTreeDataProvider.ts +++ b/src/explorer/LeetCodeTreeDataProvider.ts @@ -8,12 +8,14 @@ import { leetCodeManager } from "../leetCodeManager"; import { Category, defaultProblem, ProblemState } from "../shared"; import { explorerNodeManager } from "./explorerNodeManager"; import { LeetCodeNode } from "./LeetCodeNode"; +import { globalState } from "../globalState"; export class LeetCodeTreeDataProvider implements vscode.TreeDataProvider<LeetCodeNode> { - private context: vscode.ExtensionContext; - private onDidChangeTreeDataEvent: vscode.EventEmitter<LeetCodeNode | undefined | null> = new vscode.EventEmitter<LeetCodeNode | undefined | null>(); + private onDidChangeTreeDataEvent: vscode.EventEmitter<LeetCodeNode | undefined | null> = new vscode.EventEmitter< + LeetCodeNode | undefined | null + >(); // tslint:disable-next-line:member-ordering public readonly onDidChangeTreeData: vscode.Event<any> = this.onDidChangeTreeDataEvent.event; @@ -46,7 +48,7 @@ export class LeetCodeTreeDataProvider implements vscode.TreeDataProvider<LeetCod } return { - label: element.isProblem ? `[${element.id}] ${element.name}` : element.name, + label: element.isProblem ? `[${element.id}] ${element.name}` + this.parsePremiumUnLockIconPath(element) : element.name, tooltip: this.getSubCategoryTooltip(element), collapsibleState: element.isProblem ? vscode.TreeItemCollapsibleState.None : vscode.TreeItemCollapsibleState.Collapsed, iconPath: this.parseIconPathFromProblemState(element), @@ -59,16 +61,20 @@ export class LeetCodeTreeDataProvider implements vscode.TreeDataProvider<LeetCod public getChildren(element?: LeetCodeNode | undefined): vscode.ProviderResult<LeetCodeNode[]> { if (!leetCodeManager.getUser()) { return [ - new LeetCodeNode(Object.assign({}, defaultProblem, { - id: "notSignIn", - name: "Sign in to LeetCode", - }), false), + new LeetCodeNode( + Object.assign({}, defaultProblem, { + id: "notSignIn", + name: "Sign in to LeetCode", + }), + false + ), ]; } - if (!element) { // Root view + if (!element) { + // Root view return explorerNodeManager.getRootNodes(); } else { - switch (element.id) { // First-level + switch (element.id) { case Category.All: return explorerNodeManager.getAllNodes(); case Category.Favorite: @@ -92,13 +98,14 @@ export class LeetCodeTreeDataProvider implements vscode.TreeDataProvider<LeetCod if (!element.isProblem) { return ""; } + const { isPremium } = globalState.getUserStatus() ?? {}; switch (element.state) { case ProblemState.AC: return this.context.asAbsolutePath(path.join("resources", "check.png")); case ProblemState.NotAC: return this.context.asAbsolutePath(path.join("resources", "x.png")); case ProblemState.Unknown: - if (element.locked) { + if (element.locked && !isPremium) { return this.context.asAbsolutePath(path.join("resources", "lock.png")); } return this.context.asAbsolutePath(path.join("resources", "blank.png")); @@ -107,6 +114,14 @@ export class LeetCodeTreeDataProvider implements vscode.TreeDataProvider<LeetCod } } + private parsePremiumUnLockIconPath(element: LeetCodeNode): string { + const { isPremium } = globalState.getUserStatus() ?? {}; + if (isPremium && element.locked) { + return " 🔓"; + } + return ""; + } + private getSubCategoryTooltip(element: LeetCodeNode): string { // return '' unless it is a sub-category node if (element.isProblem || element.id === "ROOT" || element.id in Category) { @@ -130,11 +145,7 @@ export class LeetCodeTreeDataProvider implements vscode.TreeDataProvider<LeetCod } } - return [ - `AC: ${acceptedNum}`, - `Failed: ${failedNum}`, - `Total: ${childernNodes.length}`, - ].join(os.EOL); + return [`AC: ${acceptedNum}`, `Failed: ${failedNum}`, `Total: ${childernNodes.length}`].join(os.EOL); } } diff --git a/src/extension.ts b/src/extension.ts index dfd91683..439673f8 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -24,10 +24,12 @@ import { leetCodePreviewProvider } from "./webview/leetCodePreviewProvider"; import { leetCodeSolutionProvider } from "./webview/leetCodeSolutionProvider"; import { leetCodeSubmissionProvider } from "./webview/leetCodeSubmissionProvider"; import { markdownEngine } from "./webview/markdownEngine"; +import TrackData from "./utils/trackingUtils"; +import { globalState } from "./globalState"; export async function activate(context: vscode.ExtensionContext): Promise<void> { try { - if (!await leetCodeExecutor.meetRequirements(context)) { + if (!(await leetCodeExecutor.meetRequirements(context))) { throw new Error("The environment doesn't meet requirements."); } @@ -37,6 +39,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<void> }); leetCodeTreeDataProvider.initialize(context); + globalState.initialize(context); context.subscriptions.push( leetCodeStatusBarController, @@ -55,22 +58,51 @@ export async function activate(context: vscode.ExtensionContext): Promise<void> vscode.commands.registerCommand("leetcode.signin", () => leetCodeManager.signIn()), vscode.commands.registerCommand("leetcode.signout", () => leetCodeManager.signOut()), vscode.commands.registerCommand("leetcode.manageSessions", () => session.manageSessions()), - vscode.commands.registerCommand("leetcode.previewProblem", (node: LeetCodeNode) => show.previewProblem(node)), + vscode.commands.registerCommand("leetcode.previewProblem", (node: LeetCodeNode) => { + TrackData.report({ + event_key: `vscode_open_problem`, + type: "click", + extra: JSON.stringify({ + problem_id: node.id, + problem_name: node.name, + }), + }); + show.previewProblem(node); + }), vscode.commands.registerCommand("leetcode.showProblem", (node: LeetCodeNode) => show.showProblem(node)), vscode.commands.registerCommand("leetcode.pickOne", () => show.pickOne()), vscode.commands.registerCommand("leetcode.searchProblem", () => show.searchProblem()), vscode.commands.registerCommand("leetcode.showSolution", (input: LeetCodeNode | vscode.Uri) => show.showSolution(input)), vscode.commands.registerCommand("leetcode.refreshExplorer", () => leetCodeTreeDataProvider.refresh()), - vscode.commands.registerCommand("leetcode.testSolution", (uri?: vscode.Uri) => test.testSolution(uri)), - vscode.commands.registerCommand("leetcode.submitSolution", (uri?: vscode.Uri) => submit.submitSolution(uri)), + vscode.commands.registerCommand("leetcode.testSolution", (uri?: vscode.Uri) => { + TrackData.report({ + event_key: `vscode_runCode`, + type: "click", + extra: JSON.stringify({ + path: uri?.path, + }), + }); + return test.testSolution(uri); + }), + vscode.commands.registerCommand("leetcode.submitSolution", (uri?: vscode.Uri) => { + TrackData.report({ + event_key: `vscode_submit`, + type: "click", + extra: JSON.stringify({ + path: uri?.path, + }), + }); + return submit.submitSolution(uri); + }), vscode.commands.registerCommand("leetcode.switchDefaultLanguage", () => switchDefaultLanguage()), vscode.commands.registerCommand("leetcode.addFavorite", (node: LeetCodeNode) => star.addFavorite(node)), vscode.commands.registerCommand("leetcode.removeFavorite", (node: LeetCodeNode) => star.removeFavorite(node)), - vscode.commands.registerCommand("leetcode.problems.sort", () => plugin.switchSortingStrategy()), + vscode.commands.registerCommand("leetcode.problems.sort", () => plugin.switchSortingStrategy()) ); await leetCodeExecutor.switchEndpoint(plugin.getLeetCodeEndpoint()); await leetCodeManager.getLoginStatus(); + vscode.window.registerUriHandler({ handleUri: leetCodeManager.handleUriSignIn }); } catch (error) { leetCodeChannel.appendLine(error.toString()); promptForOpenOutputChannel("Extension initialization failed. Please open output channel for details.", DialogType.error); diff --git a/src/globalState.ts b/src/globalState.ts new file mode 100644 index 00000000..49d38421 --- /dev/null +++ b/src/globalState.ts @@ -0,0 +1,55 @@ +// Copyright (c) leo.zhao. All rights reserved. +// Licensed under the MIT license. + +import * as vscode from "vscode"; + +const CookieKey = "leetcode-cookie"; +const UserStatusKey = "leetcode-user-status"; + +export type UserDataType = { + isSignedIn: boolean; + isPremium: boolean; + username: string; + avatar: string; + isVerified?: boolean; +}; + +class GlobalState { + private context: vscode.ExtensionContext; + private _state: vscode.Memento; + private _cookie: string; + private _userStatus: UserDataType; + + public initialize(context: vscode.ExtensionContext): void { + this.context = context; + this._state = this.context.globalState; + } + + public setCookie(cookie: string): any { + this._cookie = cookie; + return this._state.update(CookieKey, this._cookie); + } + public getCookie(): string | undefined { + return this._cookie ?? this._state.get(CookieKey); + } + + public setUserStatus(userStatus: UserDataType): any { + this._userStatus = userStatus; + return this._state.update(UserStatusKey, this._userStatus); + } + + public getUserStatus(): UserDataType | undefined { + return this._userStatus ?? this._state.get(UserStatusKey); + } + + public removeCookie(): void { + this._state.update(CookieKey, undefined); + } + + public removeAll(): void { + this._state.update(CookieKey, undefined); + this._state.update(UserStatusKey, undefined); + } +} + +export const globalState: GlobalState = new GlobalState(); diff --git a/src/leetCodeManager.ts b/src/leetCodeManager.ts index 089390d3..1b2d4af2 100644 --- a/src/leetCodeManager.ts +++ b/src/leetCodeManager.ts @@ -6,10 +6,14 @@ import { EventEmitter } from "events"; import * as vscode from "vscode"; import { leetCodeChannel } from "./leetCodeChannel"; import { leetCodeExecutor } from "./leetCodeExecutor"; -import { IQuickItemEx, loginArgsMapping, UserStatus } from "./shared"; +import { Endpoint, loginArgsMapping, urls, urlsCn, UserStatus } from "./shared"; import { createEnvOption } from "./utils/cpUtils"; -import { DialogType, promptForOpenOutputChannel } from "./utils/uiUtils"; +import { DialogType, openUrl, promptForOpenOutputChannel } from "./utils/uiUtils"; import * as wsl from "./utils/wslUtils"; +import { getLeetCodeEndpoint } from "./commands/plugin"; +import { globalState } from "./globalState"; +import { queryUserData } from "./request/query-user-data"; +import { parseQuery, sleep } from "./utils/toolUtils"; class LeetCodeManager extends EventEmitter { private currentUser: string | undefined; @@ -21,6 +25,7 @@ class LeetCodeManager extends EventEmitter { super(); this.currentUser = undefined; this.userStatus = UserStatus.SignedOut; + this.handleUriSignIn = this.handleUriSignIn.bind(this); } public async getLoginStatus(): Promise<void> { @@ -31,118 +36,40 @@ class LeetCodeManager extends EventEmitter { } catch (error) { this.currentUser = undefined; this.userStatus = UserStatus.SignedOut; + globalState.removeAll(); } finally { this.emit("statusChanged"); } } - public async signIn(): Promise<void> { - const picks: Array<IQuickItemEx<string>> = []; - picks.push( - { - label: "LeetCode Account", - detail: "Use LeetCode account to login (US endpoint is not supported)", - value: "LeetCode", - }, - { - label: "Third-Party: GitHub", - detail: "Use GitHub account to login", - value: "GitHub", - }, - { - label: "Third-Party: LinkedIn", - detail: "Use LinkedIn account to login", - value: "LinkedIn", - }, - { - label: "LeetCode Cookie", - detail: "Use LeetCode cookie copied from browser to login", - value: "Cookie", - }, - ); - const choice: IQuickItemEx<string> | undefined = await vscode.window.showQuickPick(picks); - if (!choice) { - return; - } - const loginMethod: string = choice.value; - const commandArg: string | undefined = loginArgsMapping.get(loginMethod); - if (!commandArg) { - throw new Error(`The login method "${loginMethod}" is not supported.`); - } - const isByCookie: boolean = loginMethod === "Cookie"; - const inMessage: string = isByCookie ? "sign in by cookie" : "sign in"; + public async handleUriSignIn(uri: vscode.Uri): Promise<void> { try { - const userName: string | undefined = await new Promise(async (resolve: (res: string | undefined) => void, reject: (e: Error) => void): Promise<void> => { - - const leetCodeBinaryPath: string = await leetCodeExecutor.getLeetCodeBinaryPath(); - - const childProc: cp.ChildProcess = wsl.useWsl() - ? cp.spawn("wsl", [leetCodeExecutor.node, leetCodeBinaryPath, "user", commandArg], { shell: true }) - : cp.spawn(leetCodeExecutor.node, [leetCodeBinaryPath, "user", commandArg], { - shell: true, - env: createEnvOption(), - }); - - childProc.stdout?.on("data", async (data: string | Buffer) => { - data = data.toString(); - leetCodeChannel.append(data); - if (data.includes("twoFactorCode")) { - const twoFactor: string | undefined = await vscode.window.showInputBox({ - prompt: "Enter two-factor code.", - ignoreFocusOut: true, - validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "The input must not be empty", - }); - if (!twoFactor) { - childProc.kill(); - return resolve(undefined); - } - childProc.stdin?.write(`${twoFactor}\n`); - } - const successMatch: RegExpMatchArray | null = data.match(this.successRegex); - if (successMatch && successMatch[1]) { - childProc.stdin?.end(); - return resolve(successMatch[1]); - } else if (data.match(this.failRegex)) { - childProc.stdin?.end(); - return reject(new Error("Faile to login")); - } - }); - - childProc.stderr?.on("data", (data: string | Buffer) => leetCodeChannel.append(data.toString())); - - childProc.on("error", reject); - const name: string | undefined = await vscode.window.showInputBox({ - prompt: "Enter username or E-mail.", - ignoreFocusOut: true, - validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "The input must not be empty", - }); - if (!name) { - childProc.kill(); - return resolve(undefined); + await vscode.window.withProgress({ location: vscode.ProgressLocation.Notification }, async (progress: vscode.Progress<{}>) => { + progress.report({ message: "Fetching user data..." }); + const queryParams = parseQuery(uri.query); + const cookie = queryParams["cookie"]; + if (!cookie) { + promptForOpenOutputChannel(`Failed to get cookie. Please log in again`, DialogType.error); + return; } - childProc.stdin?.write(`${name}\n`); - const pwd: string | undefined = await vscode.window.showInputBox({ - prompt: isByCookie ? "Enter cookie" : "Enter password.", - password: true, - ignoreFocusOut: true, - validateInput: (s: string): string | undefined => s ? undefined : isByCookie ? "Cookie must not be empty" : "Password must not be empty", - }); - if (!pwd) { - childProc.kill(); - return resolve(undefined); + globalState.setCookie(cookie); + const data = await queryUserData(); + globalState.setUserStatus(data); + await this.setCookieToCli(cookie, data.username); + if (data.username) { + vscode.window.showInformationMessage(`Successfully ${data.username}.`); + this.currentUser = data.username; + this.userStatus = UserStatus.SignedIn; + this.emit("statusChanged"); } - childProc.stdin?.write(`${pwd}\n`); }); - if (userName) { - vscode.window.showInformationMessage(`Successfully ${inMessage}.`); - this.currentUser = userName; - this.userStatus = UserStatus.SignedIn; - this.emit("statusChanged"); - } } catch (error) { - promptForOpenOutputChannel(`Failed to ${inMessage}. Please open the output channel for details`, DialogType.error); + promptForOpenOutputChannel(`Failed to log in. Please open the output channel for details`, DialogType.error); } + } + public async signIn(): Promise<void> { + openUrl(this.getAuthLoginUrl()); } public async signOut(): Promise<void> { @@ -151,6 +78,7 @@ class LeetCodeManager extends EventEmitter { vscode.window.showInformationMessage("Successfully signed out."); this.currentUser = undefined; this.userStatus = UserStatus.SignedOut; + globalState.removeAll(); this.emit("statusChanged"); } catch (error) { // swallow the error when sign out. @@ -174,6 +102,51 @@ class LeetCodeManager extends EventEmitter { return "Unknown"; } + + public getAuthLoginUrl(): string { + switch (getLeetCodeEndpoint()) { + case Endpoint.LeetCodeCN: + return urlsCn.authLoginUrl; + case Endpoint.LeetCode: + default: + return urls.authLoginUrl; + } + } + + public setCookieToCli(cookie: string, name: string): Promise<void> { + return new Promise(async (resolve: (res: void) => void, reject: (e: Error) => void) => { + const leetCodeBinaryPath: string = await leetCodeExecutor.getLeetCodeBinaryPath(); + + const childProc: cp.ChildProcess = wsl.useWsl() + ? cp.spawn("wsl", [leetCodeExecutor.node, leetCodeBinaryPath, "user", loginArgsMapping.get("Cookie") ?? ""], { + shell: true, + }) + : cp.spawn(leetCodeExecutor.node, [leetCodeBinaryPath, "user", loginArgsMapping.get("Cookie") ?? ""], { + shell: true, + env: createEnvOption(), + }); + + childProc.stdout?.on("data", async (data: string | Buffer) => { + data = data.toString(); + leetCodeChannel.append(data); + const successMatch: RegExpMatchArray | null = data.match(this.successRegex); + if (successMatch && successMatch[1]) { + childProc.stdin?.end(); + return resolve(); + } else if (data.match(this.failRegex)) { + childProc.stdin?.end(); + return reject(new Error("Faile to login")); + } + }); + + childProc.stderr?.on("data", (data: string | Buffer) => leetCodeChannel.append(data.toString())); + + childProc.on("error", reject); + childProc.stdin?.write(`${name}\n`); + await sleep(800); + childProc.stdin?.write(`${cookie}\n`); + }); + } } export const leetCodeManager: LeetCodeManager = new LeetCodeManager(); diff --git a/src/request/query-user-data.ts b/src/request/query-user-data.ts new file mode 100644 index 00000000..ffcca1e1 --- /dev/null +++ b/src/request/query-user-data.ts @@ -0,0 +1,25 @@ +import { UserDataType } from "../globalState"; +import { getUrl } from "../shared"; +import { LcAxios } from "../utils/httpUtils"; + +const graphqlStr = ` + query globalData { + userStatus { + isPremium + isVerified + username + avatar + isSignedIn + } + } +`; + +export const queryUserData = async (): Promise<UserDataType> => { + return LcAxios(getUrl("userGraphql"), { + method: "POST", + data: { + query: graphqlStr, + variables: {}, + }, + }).then((res) => res.data.data.userStatus); +}; diff --git a/src/shared.ts b/src/shared.ts index 84b529cc..8c6a825a 100644 --- a/src/shared.ts +++ b/src/shared.ts @@ -63,6 +63,7 @@ export enum ProblemState { AC = 1, NotAC = 2, Unknown = 3, + Locked = 4, } export enum Endpoint { @@ -102,11 +103,7 @@ export enum Category { Favorite = "Favorite", } -export const supportedPlugins: string[] = [ - "company", - "solution.discuss", - "leetcode.cn", -]; +export const supportedPlugins: string[] = ["company", "solution.discuss", "leetcode.cn"]; export enum DescriptionConfiguration { InWebView = "In Webview", @@ -124,3 +121,36 @@ export enum SortingStrategy { FrequencyAsc = "Frequency (Ascending)", FrequencyDesc = "Frequency (Descending)", } + +export const PREMIUM_URL_CN = "https://leetcode.cn/premium-payment/?source=vscode"; +export const PREMIUM_URL_GLOBAL = "https://leetcode.com/subscribe/?ref=lp_pl&source=vscode"; + +export const urls = { + // base urls + base: "https://leetcode.com", + graphql: "https://leetcode.com/graphql", + userGraphql: "https://leetcode.com/graphql", + login: "https://leetcode.com/accounts/login/", + authLoginUrl: "https://leetcode.com/authorize-login/vscode/?path=leetcode.vscode-leetcode", +}; + +export const urlsCn = { + // base urls + base: "https://leetcode.cn", + graphql: "https://leetcode.cn/graphql", + userGraphql: "https://leetcode.cn/graphql/noj-go/", + login: "https://leetcode.cn/accounts/login/", + authLoginUrl: "https://leetcode.cn/authorize-login/vscode/?path=leetcode.vscode-leetcode", +}; + +export const getUrl = (key: string) => { + const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode"); + const point = leetCodeConfig.get<string>("endpoint", Endpoint.LeetCode); + switch (point) { + case Endpoint.LeetCodeCN: + return urlsCn[key]; + case Endpoint.LeetCode: + default: + return urls[key]; + } +}; diff --git a/src/utils/httpUtils.ts b/src/utils/httpUtils.ts new file mode 100644 index 00000000..aa6e205d --- /dev/null +++ b/src/utils/httpUtils.ts @@ -0,0 +1,28 @@ +import axios, { AxiosRequestConfig, AxiosPromise } from "axios"; +import { omit } from "lodash"; +import { globalState } from "../globalState"; +import { DialogType, promptForOpenOutputChannel } from "./uiUtils"; + +const referer = "vscode-lc-extension"; + +export function LcAxios<T = any>(path: string, settings?: AxiosRequestConfig): AxiosPromise<T> { + const cookie = globalState.getCookie(); + if (!cookie) { + promptForOpenOutputChannel( + `Failed to obtain the cookie. Please log in again.`, + DialogType.error + ); + return Promise.reject("Failed to obtain the cookie."); + } + return axios(path, { + headers: { + referer: referer, + "content-type": "application/json", + cookie, + ...(settings && settings.headers), + }, + xsrfCookieName: "csrftoken", + xsrfHeaderName: "X-CSRFToken", + ...(settings && omit(settings, "headers")), + }); +} diff --git a/src/utils/toolUtils.ts b/src/utils/toolUtils.ts new file mode 100644 index 00000000..6437226d --- /dev/null +++ b/src/utils/toolUtils.ts @@ -0,0 +1,26 @@ +export function sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +export function parseQuery(query: string): { [key: string]: string } { + const queryObject: { [key: string]: string } = {}; + + if (!query) { + return queryObject; + } + + let keyValuePairs = query.split("&"); + keyValuePairs.forEach((pair) => { + const firstEqualsIndex = pair.indexOf("="); + if (firstEqualsIndex !== -1) { + const key = pair.substring(0, firstEqualsIndex); + const value = pair.substring(firstEqualsIndex + 1); + queryObject[decodeURIComponent(key)] = decodeURIComponent(value); + } else { + // If no equals sign is found, treat the whole string as key with empty value + queryObject[decodeURIComponent(pair)] = ""; + } + }); + + return queryObject; +} diff --git a/src/utils/trackingUtils.ts b/src/utils/trackingUtils.ts new file mode 100644 index 00000000..4333bfae --- /dev/null +++ b/src/utils/trackingUtils.ts @@ -0,0 +1,130 @@ +import * as vscode from "vscode"; +import axios from "axios"; +import { getLeetCodeEndpoint } from "../commands/plugin"; +import { Endpoint } from "../shared"; +import { leetCodeManager } from "../leetCodeManager"; + +const getTimeZone = (): string => { + const endPoint: string = getLeetCodeEndpoint(); + if (endPoint === Endpoint.LeetCodeCN) { + return "Asia/Shanghai"; + } else { + return "UTC"; + } +}; + +interface IReportData { + event_key: string; + type?: "click" | "expose" | string; + anonymous_id?: string; + tid?: number; + ename?: string; // event name + href?: string; + referer?: string; + extra?: string; + target?: string; +} + +interface ITrackData { + reportCache: IReportData[]; + isSubmit: boolean; + report: (reportItems: IReportData | IReportData[]) => void; + submitReport: (useSendBeason: boolean) => Promise<void>; + reportUrl: string; +} + +const testReportUrl = "https://analysis.lingkou.xyz/i/event"; +const prodReportUrl = "https://analysis.leetcode.cn/i/event"; + +function getReportUrl() { + if (process.env.NODE_ENV === "production") { + return prodReportUrl; + } else { + return testReportUrl; + } +} + +const _charStr = "abacdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+="; + +function RandomIndex(min: number, max: number, i: number) { + let index = Math.floor(Math.random() * (max - min + 1) + min); + const numStart = _charStr.length - 10; + if (i === 0 && index >= numStart) { + index = RandomIndex(min, max, i); + } + return index; +} + +function getRandomString(len: number) { + const min = 0; + const max = _charStr.length - 1; + let _str = ""; + len = len || 15; + for (let i = 0, index; i < len; i++) { + index = RandomIndex(min, max, i); + _str += _charStr[index]; + } + return _str; +} + +function getAllowReportDataConfig() { + const leetCodeConfig = vscode.workspace.getConfiguration("leetcode"); + const allowReportData = !!leetCodeConfig.get<boolean>("allowReportData"); + return allowReportData; +} + +class TrackData implements ITrackData { + public reportCache: IReportData[] = []; + + public isSubmit: boolean = false; + + public reportUrl: string = getReportUrl(); + + private sendTimer: NodeJS.Timeout | undefined; + + public report = (reportItems: IReportData | IReportData[]) => { + if (!getAllowReportDataConfig()) return; + + this.sendTimer && clearTimeout(this.sendTimer); + + if (!Array.isArray(reportItems)) { + reportItems = [reportItems]; + } + let randomId = getRandomString(60); + reportItems.forEach((item) => { + this.reportCache.push({ + ...item, + referer: "vscode", + target: leetCodeManager.getUser() ?? "", + anonymous_id: item.anonymous_id ?? (randomId as string), + }); + }); + this.sendTimer = setTimeout(this.submitReport, 800); + }; + + public submitReport = async () => { + if (!getAllowReportDataConfig()) return; + const dataList = JSON.stringify(this.reportCache); + + if (!this.reportCache.length || this.isSubmit) { + return; + } + this.reportCache = []; + try { + this.isSubmit = true; + axios.defaults.withCredentials = true; + await axios.post(this.reportUrl, `dataList=${encodeURIComponent(dataList)}`, { + headers: { + "Content-Type": "application/x-www-form-urlencoded", + "x-timezone": getTimeZone(), + }, + }); + } catch (e) { + this.reportCache = this.reportCache.concat(JSON.parse(dataList)); + } finally { + this.isSubmit = false; + } + }; +} + +export default new TrackData(); diff --git a/src/webview/leetCodePreviewProvider.ts b/src/webview/leetCodePreviewProvider.ts index 78b40991..86060de5 100644 --- a/src/webview/leetCodePreviewProvider.ts +++ b/src/webview/leetCodePreviewProvider.ts @@ -8,7 +8,6 @@ import { ILeetCodeWebviewOption, LeetCodeWebview } from "./LeetCodeWebview"; import { markdownEngine } from "./markdownEngine"; class LeetCodePreviewProvider extends LeetCodeWebview { - protected readonly viewType: string = "leetcode.preview"; private node: IProblem; private description: IDescription; @@ -23,11 +22,6 @@ class LeetCodePreviewProvider extends LeetCodeWebview { this.node = node; this.sideMode = isSideMode; this.showWebviewInternal(); - // Comment out this operation since it sometimes may cause the webview become empty. - // Waiting for the progress of the VS Code side issue: https://github.com/microsoft/vscode/issues/3742 - // if (this.sideMode) { - // this.hideSideBar(); // For better view area - // } } protected getWebviewOption(): ILeetCodeWebviewOption { @@ -46,7 +40,7 @@ class LeetCodePreviewProvider extends LeetCodeWebview { } protected getWebviewContent(): string { - const button: { element: string, script: string, style: string } = { + const button: { element: string; script: string; style: string } = { element: `<button id="solve">Code Now</button>`, script: `const button = document.getElementById('solve'); button.onclick = () => vscode.postMessage({ @@ -73,32 +67,26 @@ class LeetCodePreviewProvider extends LeetCodeWebview { }; const { title, url, category, difficulty, likes, dislikes, body } = this.description; const head: string = markdownEngine.render(`# [${title}](${url})`); - const info: string = markdownEngine.render([ - `| Category | Difficulty | Likes | Dislikes |`, - `| :------: | :--------: | :---: | :------: |`, - `| ${category} | ${difficulty} | ${likes} | ${dislikes} |`, - ].join("\n")); + const info: string = markdownEngine.render( + [ + `| Category | Difficulty | Likes | Dislikes |`, + `| :------: | :--------: | :---: | :------: |`, + `| ${category} | ${difficulty} | ${likes} | ${dislikes} |`, + ].join("\n") + ); const tags: string = [ `<details>`, `<summary><strong>Tags</strong></summary>`, - markdownEngine.render( - this.description.tags - .map((t: string) => `[\`${t}\`](https://leetcode.com/tag/${t})`) - .join(" | "), - ), + markdownEngine.render(this.description.tags.map((t: string) => `[\`${t}\`](${this.getTagLink(t)})`).join(" | ")), `</details>`, ].join("\n"); const companies: string = [ `<details>`, `<summary><strong>Companies</strong></summary>`, - markdownEngine.render( - this.description.companies - .map((c: string) => `\`${c}\``) - .join(" | "), - ), + markdownEngine.render(this.description.companies.map((c: string) => `\`${c}\``).join(" | ")), `</details>`, ].join("\n"); - const links: string = markdownEngine.render(`[Discussion](${this.getDiscussionLink(url)}) | [Solution](${this.getSolutionLink(url)})`); + const links: string = markdownEngine.render(`[Submissions](${this.getSubmissionsLink(url)}) | [Solution](${this.getSolutionsLink(url)})`); return ` <!DOCTYPE html> <html> @@ -149,18 +137,23 @@ class LeetCodePreviewProvider extends LeetCodeWebview { private parseDescription(descString: string, problem: IProblem): IDescription { const [ - /* title */, , - url, , - /* tags */, , - /* langs */, , - category, + , + , + /* title */ url, + , + , + , + , + , + /* tags */ /* langs */ category, difficulty, likes, dislikes, - /* accepted */, - /* submissions */, - /* testcase */, , - ...body + , + , + , + , + /* accepted */ /* submissions */ /* testcase */ ...body ] = descString.split("\n"); return { title: problem.name, @@ -175,19 +168,22 @@ class LeetCodePreviewProvider extends LeetCodeWebview { }; } - private getDiscussionLink(url: string): string { + private getTagLink(tag: string): string { const endPoint: string = getLeetCodeEndpoint(); if (endPoint === Endpoint.LeetCodeCN) { - return url.replace("/description/", "/comments/"); + return `https://leetcode.cn/tag/${tag}?source=vscode`; } else if (endPoint === Endpoint.LeetCode) { - return url.replace("/description/", "/discuss/?currentPage=1&orderBy=most_votes&query="); + return `https://leetcode.com/tag/${tag}?source=vscode`; } - return "https://leetcode.com"; + return "https://leetcode.com?source=vscode"; } - private getSolutionLink(url: string): string { - return url.replace("/description/", "/solution/"); + private getSolutionsLink(url: string): string { + return url.replace("/description/", "/solutions/") + "?source=vscode"; + } + private getSubmissionsLink(url: string): string { + return url.replace("/description/", "/submissions/") + "?source=vscode"; } } From b495812689351b5bdd043187ed143968510d799a Mon Sep 17 00:00:00 2001 From: tomoyachen <42526054+tomoyachen@users.noreply.github.com> Date: Fri, 26 Jul 2024 15:43:28 +0800 Subject: [PATCH 88/92] fix: fix login issue in VS Code Insiders (#966) (#968) ogin issue on VS Code Insiders #968 --- src/shared.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/shared.ts b/src/shared.ts index 8c6a825a..2301f7f6 100644 --- a/src/shared.ts +++ b/src/shared.ts @@ -125,13 +125,15 @@ export enum SortingStrategy { export const PREMIUM_URL_CN = "https://leetcode.cn/premium-payment/?source=vscode"; export const PREMIUM_URL_GLOBAL = "https://leetcode.com/subscribe/?ref=lp_pl&source=vscode"; +const protocol = vscode.env.appName.includes('Insiders') ? "vscode-insiders" : "vscode" + export const urls = { // base urls base: "https://leetcode.com", graphql: "https://leetcode.com/graphql", userGraphql: "https://leetcode.com/graphql", login: "https://leetcode.com/accounts/login/", - authLoginUrl: "https://leetcode.com/authorize-login/vscode/?path=leetcode.vscode-leetcode", + authLoginUrl: `https://leetcode.com/authorize-login/${protocol}/?path=leetcode.vscode-leetcode`, }; export const urlsCn = { @@ -140,7 +142,7 @@ export const urlsCn = { graphql: "https://leetcode.cn/graphql", userGraphql: "https://leetcode.cn/graphql/noj-go/", login: "https://leetcode.cn/accounts/login/", - authLoginUrl: "https://leetcode.cn/authorize-login/vscode/?path=leetcode.vscode-leetcode", + authLoginUrl: `https://leetcode.cn/authorize-login/${protocol}/?path=leetcode.vscode-leetcode`, }; export const getUrl = (key: string) => { From bbc041da250ccd2032d36318de2e71bc76e60ca6 Mon Sep 17 00:00:00 2001 From: tomoyachen <42526054+tomoyachen@users.noreply.github.com> Date: Tue, 30 Jul 2024 14:15:10 +0800 Subject: [PATCH 89/92] feat: re-add cookie-based login method (#969) * feat: re-add cookie-based login method * chore: optimize tslint config * chore : change build.yml --------- Co-authored-by: leo.zhao <zale0201@gmail.com> --- .github/workflows/build.yml | 21 ---------- .vscode/settings.json | 2 +- src/leetCodeManager.ts | 83 ++++++++++++++++++++++++++++++------- src/utils/httpUtils.ts | 2 +- src/utils/toolUtils.ts | 2 +- src/utils/trackingUtils.ts | 2 +- tslint.json | 44 ++++++++------------ 7 files changed, 89 insertions(+), 67 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2bdeaa49..dd9a1c24 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -48,24 +48,3 @@ jobs: - name: VSCE Packge run: npx vsce package - - darwin: - name: macOS - runs-on: macos-latest - timeout-minutes: 30 - steps: - - uses: actions/checkout@v2 - - - name: Setup Node.js environment - uses: actions/setup-node@v2 - with: - node-version: 14 - - - name: Install Node.js modules - run: npm install - - - name: Lint - run: npm run lint - - - name: VSCE Packge - run: npx vsce package diff --git a/.vscode/settings.json b/.vscode/settings.json index b5f72312..5e5ca483 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,5 @@ { - "editor.formatOnSave": true, + "editor.formatOnSave": false, "editor.insertSpaces": true, "editor.tabSize": 4, "files.insertFinalNewline": true, diff --git a/src/leetCodeManager.ts b/src/leetCodeManager.ts index 1b2d4af2..16ec3782 100644 --- a/src/leetCodeManager.ts +++ b/src/leetCodeManager.ts @@ -6,14 +6,14 @@ import { EventEmitter } from "events"; import * as vscode from "vscode"; import { leetCodeChannel } from "./leetCodeChannel"; import { leetCodeExecutor } from "./leetCodeExecutor"; -import { Endpoint, loginArgsMapping, urls, urlsCn, UserStatus } from "./shared"; +import { Endpoint, IQuickItemEx, loginArgsMapping, urls, urlsCn, UserStatus } from "./shared"; import { createEnvOption } from "./utils/cpUtils"; import { DialogType, openUrl, promptForOpenOutputChannel } from "./utils/uiUtils"; import * as wsl from "./utils/wslUtils"; import { getLeetCodeEndpoint } from "./commands/plugin"; import { globalState } from "./globalState"; import { queryUserData } from "./request/query-user-data"; -import { parseQuery, sleep } from "./utils/toolUtils"; +import { parseQuery } from "./utils/toolUtils"; class LeetCodeManager extends EventEmitter { private currentUser: string | undefined; @@ -42,6 +42,19 @@ class LeetCodeManager extends EventEmitter { } } + private async updateUserStatusWithCookie(cookie: string): Promise<void> { + globalState.setCookie(cookie); + const data = await queryUserData(); + globalState.setUserStatus(data); + await this.setCookieToCli(cookie, data.username); + if (data.username) { + vscode.window.showInformationMessage(`Successfully ${data.username}.`); + this.currentUser = data.username; + this.userStatus = UserStatus.SignedIn; + this.emit("statusChanged"); + } + } + public async handleUriSignIn(uri: vscode.Uri): Promise<void> { try { await vscode.window.withProgress({ location: vscode.ProgressLocation.Notification }, async (progress: vscode.Progress<{}>) => { @@ -52,24 +65,61 @@ class LeetCodeManager extends EventEmitter { promptForOpenOutputChannel(`Failed to get cookie. Please log in again`, DialogType.error); return; } - globalState.setCookie(cookie); - const data = await queryUserData(); - globalState.setUserStatus(data); - await this.setCookieToCli(cookie, data.username); - if (data.username) { - vscode.window.showInformationMessage(`Successfully ${data.username}.`); - this.currentUser = data.username; - this.userStatus = UserStatus.SignedIn; - this.emit("statusChanged"); - } + + await this.updateUserStatusWithCookie(cookie) + }); } catch (error) { promptForOpenOutputChannel(`Failed to log in. Please open the output channel for details`, DialogType.error); } } + public async handleInputCookieSignIn(): Promise<void> { + const cookie: string | undefined = await vscode.window.showInputBox({ + prompt: 'Enter LeetCode Cookie', + password: true, + ignoreFocusOut: true, + validateInput: (s: string): string | undefined => + s ? undefined : 'Cookie must not be empty', + }) + + await this.updateUserStatusWithCookie(cookie || '') + } + public async signIn(): Promise<void> { - openUrl(this.getAuthLoginUrl()); + const picks: Array<IQuickItemEx<string>> = [] + picks.push( + { + label: 'Web Authorization', + detail: 'Open browser to authorize login on the website', + value: 'WebAuth', + description: '[Recommended]' + }, + { + label: 'LeetCode Cookie', + detail: 'Use LeetCode cookie copied from browser to login', + value: 'Cookie', + } + ) + + const choice: IQuickItemEx<string> | undefined = await vscode.window.showQuickPick(picks) + if (!choice) { + return + } + const loginMethod: string = choice.value + + if (loginMethod === 'WebAuth') { + openUrl(this.getAuthLoginUrl()) + return + } + + try { + await vscode.window.withProgress({ location: vscode.ProgressLocation.Notification, title: "Fetching user data..." }, async () => { + await this.handleInputCookieSignIn() + }); + } catch (error) { + promptForOpenOutputChannel(`Failed to log in. Please open the output channel for details`, DialogType.error); + } } public async signOut(): Promise<void> { @@ -136,15 +186,16 @@ class LeetCodeManager extends EventEmitter { } else if (data.match(this.failRegex)) { childProc.stdin?.end(); return reject(new Error("Faile to login")); + } else if (data.match(/login: /)) { + childProc.stdin?.write(`${name}\n`); + } else if (data.match(/cookie: /)) { + childProc.stdin?.write(`${cookie}\n`); } }); childProc.stderr?.on("data", (data: string | Buffer) => leetCodeChannel.append(data.toString())); childProc.on("error", reject); - childProc.stdin?.write(`${name}\n`); - await sleep(800); - childProc.stdin?.write(`${cookie}\n`); }); } } diff --git a/src/utils/httpUtils.ts b/src/utils/httpUtils.ts index aa6e205d..b7771734 100644 --- a/src/utils/httpUtils.ts +++ b/src/utils/httpUtils.ts @@ -16,7 +16,7 @@ export function LcAxios<T = any>(path: string, settings?: AxiosRequestConfig): A } return axios(path, { headers: { - referer: referer, + referer, "content-type": "application/json", cookie, ...(settings && settings.headers), diff --git a/src/utils/toolUtils.ts b/src/utils/toolUtils.ts index 6437226d..ce37e185 100644 --- a/src/utils/toolUtils.ts +++ b/src/utils/toolUtils.ts @@ -9,7 +9,7 @@ export function parseQuery(query: string): { [key: string]: string } { return queryObject; } - let keyValuePairs = query.split("&"); + const keyValuePairs = query.split("&"); keyValuePairs.forEach((pair) => { const firstEqualsIndex = pair.indexOf("="); if (firstEqualsIndex !== -1) { diff --git a/src/utils/trackingUtils.ts b/src/utils/trackingUtils.ts index 4333bfae..56b1a6fb 100644 --- a/src/utils/trackingUtils.ts +++ b/src/utils/trackingUtils.ts @@ -90,7 +90,7 @@ class TrackData implements ITrackData { if (!Array.isArray(reportItems)) { reportItems = [reportItems]; } - let randomId = getRandomString(60); + const randomId = getRandomString(60); reportItems.forEach((item) => { this.reportCache.push({ ...item, diff --git a/tslint.json b/tslint.json index 34776be7..a686a2c7 100644 --- a/tslint.json +++ b/tslint.json @@ -1,36 +1,28 @@ { "defaultSeverity": "error", - "extends": [ - "tslint:recommended" - ], + "extends": ["tslint:recommended"], "jsRules": {}, "rules": { - "forin": false, "object-literal-sort-keys": false, - "indent": [ - true, - "spaces" - ], + "ordered-imports": [false], + "indent": [true, "spaces"], "no-string-literal": false, "no-namespace": false, - "max-line-length": [ - false, - 120 - ], - "typedef": [ - true, - "call-signature", - "arrow-call-signature", - "parameter", - "arrow-parameter", - "property-declaration", - "variable-declaration", - "member-variable-declaration" - ], - "variable-name": [ - true, - "allow-leading-underscore" - ] + "max-line-length": [false, 120], + "typedef": false, + "no-implicit-dependencies": [true, ["vscode"]], + "trailing-comma": false, + "no-any": false, + "object-literal-key-quotes": [true, "consistent-as-needed"], + "prefer-object-spread": false, + "no-unnecessary-await": false, + "semicolon": [false], + "quotemark": [false], + "member-ordering": [false], + "variable-name": [false], + "curly": false, + "interface-over-type-literal": [false], + "no-unused-expression": false }, "rulesDirectory": [] } From 67101c96dc41feee1700bee854642037734511b1 Mon Sep 17 00:00:00 2001 From: "leo.zhao" <zale0201@gmail.com> Date: Tue, 30 Jul 2024 14:34:46 +0800 Subject: [PATCH 90/92] chore(package.json): add build and publish for vscode in scripts config --- package.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 702956c1..b270a2d3 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-leetcode", "displayName": "LeetCode", "description": "Solve LeetCode problems in VS Code", - "version": "0.18.2", + "version": "0.18.3", "author": "LeetCode", "publisher": "LeetCode", "license": "MIT", @@ -714,7 +714,9 @@ "vscode:prepublish": "npm run compile", "compile": "tsc -p ./", "watch": "tsc -watch -p ./", - "lint": "tslint --project tsconfig.json -e src/*.d.ts -t verbose" + "lint": "tslint --project tsconfig.json -e src/*.d.ts -t verbose", + "build": "vsce package", + "vs-publish": "vsce publish" }, "devDependencies": { "@types/fs-extra": "^9.0.11", From 6f4292544185b0406673bf2669747aa72dcdc49a Mon Sep 17 00:00:00 2001 From: "leo.zhao" <zale0201@gmail.com> Date: Tue, 30 Jul 2024 15:18:15 +0800 Subject: [PATCH 91/92] chore: add change log --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0de174fc..a7d482aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to the "leetcode" extension will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +## [0.18.3] +### Added +- re-add cookie-based login method [PR#969](https://github.com/LeetCode-OpenSource/vscode-leetcode/pull/969) + +## [0.18.2] +### Fixed +- fix login issue on VS Code Insiders [PR#968](https://github.com/LeetCode-OpenSource/vscode-leetcode/pull/968) + +## [0.18.1] +### Changed +- change login way and add tracking logic option [PR#944](https://github.com/LeetCode-OpenSource/vscode-leetcode/pull/944) + ## [0.18.0] ### Added - Add `star` command in shortcuts [PR#601](https://github.com/LeetCode-OpenSource/vscode-leetcode/pull/601) From 586b3e45fe0af299775436f2e8ea2a6ed5cdb8c6 Mon Sep 17 00:00:00 2001 From: "leo.zhao" <zale0201@gmail.com> Date: Fri, 13 Sep 2024 14:47:56 +0800 Subject: [PATCH 92/92] fix: change graphql api path --- CHANGELOG.md | 4 ++++ package.json | 2 +- src/shared.ts | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a7d482aa..b9d7d46e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to the "leetcode" extension will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +## [0.18.4] +### Added +- change graphql path + ## [0.18.3] ### Added - re-add cookie-based login method [PR#969](https://github.com/LeetCode-OpenSource/vscode-leetcode/pull/969) diff --git a/package.json b/package.json index b270a2d3..53552b74 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-leetcode", "displayName": "LeetCode", "description": "Solve LeetCode problems in VS Code", - "version": "0.18.3", + "version": "0.18.4", "author": "LeetCode", "publisher": "LeetCode", "license": "MIT", diff --git a/src/shared.ts b/src/shared.ts index 2301f7f6..e8b59d89 100644 --- a/src/shared.ts +++ b/src/shared.ts @@ -140,7 +140,7 @@ export const urlsCn = { // base urls base: "https://leetcode.cn", graphql: "https://leetcode.cn/graphql", - userGraphql: "https://leetcode.cn/graphql/noj-go/", + userGraphql: "https://leetcode.cn/graphql/", login: "https://leetcode.cn/accounts/login/", authLoginUrl: `https://leetcode.cn/authorize-login/${protocol}/?path=leetcode.vscode-leetcode`, };