Replace assistant names in source
This commit is contained in:
parent
6a8393ed9d
commit
cc35fd3380
@ -1,5 +1,6 @@
|
|||||||
import * as vscode from "vscode";
|
import * as vscode from "vscode";
|
||||||
import { collapseFileExculdeSelectRange } from "./codecomplete/ast/collapseBlock";
|
import { collapseFileExculdeSelectRange } from "./codecomplete/ast/collapseBlock";
|
||||||
|
import { ASSISTANT_NAME_EN } from "../util/constants";
|
||||||
|
|
||||||
class DevChatQuickFixProvider implements vscode.CodeActionProvider {
|
class DevChatQuickFixProvider implements vscode.CodeActionProvider {
|
||||||
public static readonly providedCodeActionKinds = [
|
public static readonly providedCodeActionKinds = [
|
||||||
@ -18,13 +19,13 @@ class DevChatQuickFixProvider implements vscode.CodeActionProvider {
|
|||||||
|
|
||||||
const diagnostic = context.diagnostics[0];
|
const diagnostic = context.diagnostics[0];
|
||||||
const quickFix = new vscode.CodeAction(
|
const quickFix = new vscode.CodeAction(
|
||||||
"Ask DevChat",
|
`Ask ${ASSISTANT_NAME_EN}`,
|
||||||
vscode.CodeActionKind.QuickFix,
|
vscode.CodeActionKind.QuickFix,
|
||||||
);
|
);
|
||||||
quickFix.isPreferred = false;
|
quickFix.isPreferred = false;
|
||||||
|
|
||||||
const fixUsingDevChat = new vscode.CodeAction(
|
const fixUsingDevChat = new vscode.CodeAction(
|
||||||
"Fix using DevChat",
|
`Fix using ${ASSISTANT_NAME_EN}`,
|
||||||
vscode.CodeActionKind.QuickFix,
|
vscode.CodeActionKind.QuickFix,
|
||||||
);
|
);
|
||||||
fixUsingDevChat.isPreferred = true;
|
fixUsingDevChat.isPreferred = true;
|
||||||
@ -32,7 +33,7 @@ class DevChatQuickFixProvider implements vscode.CodeActionProvider {
|
|||||||
return new Promise(async (resolve) => {
|
return new Promise(async (resolve) => {
|
||||||
quickFix.command = {
|
quickFix.command = {
|
||||||
command: "DevChat.quickFixAskDevChat",
|
command: "DevChat.quickFixAskDevChat",
|
||||||
title: "Ask DevChat",
|
title: `Ask ${ASSISTANT_NAME_EN}`,
|
||||||
arguments: [
|
arguments: [
|
||||||
document,
|
document,
|
||||||
range,
|
range,
|
||||||
@ -42,7 +43,7 @@ class DevChatQuickFixProvider implements vscode.CodeActionProvider {
|
|||||||
|
|
||||||
fixUsingDevChat.command = {
|
fixUsingDevChat.command = {
|
||||||
command: "DevChat.quickFixUsingDevChat",
|
command: "DevChat.quickFixUsingDevChat",
|
||||||
title: "Fix using DevChat",
|
title: `Fix using ${ASSISTANT_NAME_EN}`,
|
||||||
arguments: [
|
arguments: [
|
||||||
document,
|
document,
|
||||||
range,
|
range,
|
||||||
|
@ -35,6 +35,7 @@ import { InlineCompletionProvider, registerCodeCompleteCallbackCommand } from ".
|
|||||||
import { indexDir } from "./contributes/codecomplete/astIndex";
|
import { indexDir } from "./contributes/codecomplete/astIndex";
|
||||||
import registerQuickFixProvider from "./contributes/quickFixProvider";
|
import registerQuickFixProvider from "./contributes/quickFixProvider";
|
||||||
import { stopLocalService } from './util/localService';
|
import { stopLocalService } from './util/localService';
|
||||||
|
import { updateNames } from "./util/constants";
|
||||||
|
|
||||||
|
|
||||||
async function migrateConfig() {
|
async function migrateConfig() {
|
||||||
@ -129,6 +130,8 @@ export async function fixDevChatApiBase() {
|
|||||||
|
|
||||||
async function activate(context: vscode.ExtensionContext) {
|
async function activate(context: vscode.ExtensionContext) {
|
||||||
ExtensionContextHolder.context = context;
|
ExtensionContextHolder.context = context;
|
||||||
|
const assistantNames = context.extension.packageJSON.assistantNames
|
||||||
|
updateNames(assistantNames.ASSISTANT_NAME_EN, assistantNames.ASSISTANT_NAME_ZH)
|
||||||
|
|
||||||
logger.init(LoggerChannelVscode.getInstance());
|
logger.init(LoggerChannelVscode.getInstance());
|
||||||
UiUtilWrapper.init(new UiUtilVscode());
|
UiUtilWrapper.init(new UiUtilVscode());
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { ASSISTANT_NAME_EN } from '../util/constants';
|
||||||
import { UiUtilWrapper } from '../util/uiUtil';
|
import { UiUtilWrapper } from '../util/uiUtil';
|
||||||
import { MessageHandler } from './messageHandler';
|
import { MessageHandler } from './messageHandler';
|
||||||
import { isSending } from './sendMessage';
|
import { isSending } from './sendMessage';
|
||||||
@ -6,7 +7,7 @@ import { isSending } from './sendMessage';
|
|||||||
export async function chatWithDevChat(panel, message: string) {
|
export async function chatWithDevChat(panel, message: string) {
|
||||||
if (isSending()) {
|
if (isSending()) {
|
||||||
// already sending, show error
|
// already sending, show error
|
||||||
UiUtilWrapper.showErrorMessage("DevChat: A command is already being sent, please try again later.");
|
UiUtilWrapper.showErrorMessage(`${ASSISTANT_NAME_EN}: A command is already being sent, please try again later.`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
MessageHandler.sendMessage(panel!, { command: 'chatWithDevChat', 'message': message });
|
MessageHandler.sendMessage(panel!, { command: 'chatWithDevChat', 'message': message });
|
||||||
|
@ -18,42 +18,6 @@ export interface LoadHistoryMessages {
|
|||||||
entries: Array<LogEntry>;
|
entries: Array<LogEntry>;
|
||||||
}
|
}
|
||||||
|
|
||||||
function welcomeMessage(): LogEntry {
|
|
||||||
// create default logEntry to show welcome message
|
|
||||||
return {
|
|
||||||
hash: 'message',
|
|
||||||
parent: '',
|
|
||||||
user: 'system',
|
|
||||||
date: '',
|
|
||||||
request: 'How do I use DevChat?',
|
|
||||||
response: `
|
|
||||||
Do you want to write some code or have a question about the project? Simply right-click on your chosen files or code snippets and add them to DevChat. Feel free to ask me anything or let me help you with coding.
|
|
||||||
|
|
||||||
Don't forget to check out the "+" button on the left of the input to add more context. To see a list of workflows you can run in the context, just type "/". Happy prompting!
|
|
||||||
`,
|
|
||||||
context: []
|
|
||||||
} as LogEntry;
|
|
||||||
}
|
|
||||||
|
|
||||||
function apiKeyMissedMessage(): LogEntry {
|
|
||||||
// create default logEntry to show welcome message
|
|
||||||
return {
|
|
||||||
hash: 'message',
|
|
||||||
parent: '',
|
|
||||||
user: 'system',
|
|
||||||
date: '',
|
|
||||||
request: 'Is OPENAI_API_KEY (or DevChat Access Key) ready?',
|
|
||||||
response: `
|
|
||||||
OPENAI_API_KEY is missing from your environment or settings. Kindly input your OpenAI or DevChat key, and I'll ensure DevChat is all set for you.
|
|
||||||
|
|
||||||
<button value="get_devchat_key" href="https://web.devchat.ai" component="a">Register DevChat key</button>
|
|
||||||
<button value="setting_devchat_key">Set DevChat key</button>
|
|
||||||
<button value="setting_openai_key">Set OpenAI key</button>
|
|
||||||
`,
|
|
||||||
context: []
|
|
||||||
} as LogEntry;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function loadTopicHistoryLogs(topicId: string | undefined): Promise<Array<LogEntry> | undefined> {
|
async function loadTopicHistoryLogs(topicId: string | undefined): Promise<Array<LogEntry> | undefined> {
|
||||||
if (!topicId) {
|
if (!topicId) {
|
||||||
return undefined;
|
return undefined;
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
import * as vscode from "vscode";
|
import * as vscode from "vscode";
|
||||||
import * as fs from "fs";
|
|
||||||
import * as path from "path";
|
|
||||||
import { logger } from "../util/logger";
|
import { logger } from "../util/logger";
|
||||||
import { log } from "console";
|
import { ASSISTANT_NAME_ZH } from "../util/constants";
|
||||||
|
import { ExtensionContextHolder } from "../util/extensionContext";
|
||||||
|
|
||||||
interface FunctionDefinition {
|
interface FunctionDefinition {
|
||||||
name: string;
|
name: string;
|
||||||
@ -19,42 +18,10 @@ type CodeLensRegistration = {
|
|||||||
|
|
||||||
export class CodeLensManager {
|
export class CodeLensManager {
|
||||||
private static instance: CodeLensManager;
|
private static instance: CodeLensManager;
|
||||||
private registrations: CodeLensRegistration[] = [];
|
private registrations: CodeLensRegistration[] = [
|
||||||
private configFilePath: string;
|
|
||||||
|
|
||||||
private constructor() {
|
|
||||||
this.configFilePath = path.join(
|
|
||||||
process.env.HOME || process.env.USERPROFILE || ".",
|
|
||||||
".chat/ideconfig.json"
|
|
||||||
);
|
|
||||||
this.loadConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static getInstance(): CodeLensManager {
|
|
||||||
if (!CodeLensManager.instance) {
|
|
||||||
CodeLensManager.instance = new CodeLensManager();
|
|
||||||
}
|
|
||||||
return CodeLensManager.instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
private loadConfig(): void {
|
|
||||||
if (!fs.existsSync(this.configFilePath)) {
|
|
||||||
this.initializeConfig();
|
|
||||||
} else {
|
|
||||||
const data = fs.readFileSync(this.configFilePath, "utf-8");
|
|
||||||
this.registrations = JSON.parse(data);
|
|
||||||
|
|
||||||
if (this.registrations.length === 0) {
|
|
||||||
this.initializeConfig();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private initializeConfig(): void {
|
|
||||||
this.registrations = [
|
|
||||||
{
|
{
|
||||||
elementType: "function",
|
elementType: "function",
|
||||||
objectName: "DevChat: unit tests",
|
objectName: `${ExtensionContextHolder.context?.extension.packageJSON.assistantNames.ASSISTANT_NAME_ZH}: unit tests`,
|
||||||
promptGenerator:
|
promptGenerator:
|
||||||
"/unit_tests {__filename__}:::{__functionName__}:::{__functionStartLine__}:::{__functionEndLine__}:::{__containerStartLine__}:::{__containerEndLine__}",
|
"/unit_tests {__filename__}:::{__functionName__}:::{__functionStartLine__}:::{__functionEndLine__}:::{__containerStartLine__}:::{__containerEndLine__}",
|
||||||
},
|
},
|
||||||
@ -68,36 +35,17 @@ export class CodeLensManager {
|
|||||||
objectName: "docstring",
|
objectName: "docstring",
|
||||||
promptGenerator: "/docstring",
|
promptGenerator: "/docstring",
|
||||||
},
|
},
|
||||||
// {
|
|
||||||
// elementType: 'function',
|
|
||||||
// objectName: 'generate unit tests',
|
|
||||||
// promptGenerator: '/test generate unit tests for {__filename__} {__functionName__}'
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// elementType: 'inner_function',
|
|
||||||
// objectName: 'generate comment',
|
|
||||||
// promptGenerator: 'generate comment for \n ```code\n{__functionCode__}\n```\n'
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// elementType: 'function',
|
|
||||||
// objectName: 'generate comment',
|
|
||||||
// promptGenerator: 'generate comment for \n ```code\n{__functionCode__}\n```\n'
|
|
||||||
// }
|
|
||||||
];
|
];
|
||||||
this.saveConfig();
|
|
||||||
|
private constructor() {}
|
||||||
|
|
||||||
|
public static getInstance(): CodeLensManager {
|
||||||
|
if (!CodeLensManager.instance) {
|
||||||
|
CodeLensManager.instance = new CodeLensManager();
|
||||||
|
}
|
||||||
|
return CodeLensManager.instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
private saveConfig(): void {
|
|
||||||
const configDir = path.dirname(this.configFilePath);
|
|
||||||
if (!fs.existsSync(configDir)) {
|
|
||||||
fs.mkdirSync(configDir, { recursive: true });
|
|
||||||
}
|
|
||||||
fs.writeFileSync(
|
|
||||||
this.configFilePath,
|
|
||||||
JSON.stringify(this.registrations, null, 2),
|
|
||||||
"utf8"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public getRegistrations(): CodeLensRegistration[] {
|
public getRegistrations(): CodeLensRegistration[] {
|
||||||
return this.registrations;
|
return this.registrations;
|
||||||
|
@ -2,16 +2,15 @@ import * as vscode from 'vscode';
|
|||||||
|
|
||||||
import { dependencyCheck } from './statusBarViewBase';
|
import { dependencyCheck } from './statusBarViewBase';
|
||||||
import { ProgressBar } from '../util/progressBar';
|
import { ProgressBar } from '../util/progressBar';
|
||||||
import { logger } from '../util/logger';
|
import { ASSISTANT_NAME_EN } from '../util/constants';
|
||||||
import { DevChatConfig } from '../util/config';
|
|
||||||
|
|
||||||
|
|
||||||
export function createStatusBarItem(context: vscode.ExtensionContext): vscode.StatusBarItem {
|
export function createStatusBarItem(context: vscode.ExtensionContext): vscode.StatusBarItem {
|
||||||
const statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 100);
|
const statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 100);
|
||||||
|
|
||||||
// Set the status bar item properties
|
// Set the status bar item properties
|
||||||
statusBarItem.text = `$(warning)DevChat`;
|
statusBarItem.text = `$(warning)${ASSISTANT_NAME_EN}`;
|
||||||
statusBarItem.tooltip = 'DevChat is checking ..., please wait';
|
statusBarItem.tooltip = `${ASSISTANT_NAME_EN} is checking ..., please wait`;
|
||||||
// when statsBarItem.command is '', then there is "command '' not found" error.
|
// when statsBarItem.command is '', then there is "command '' not found" error.
|
||||||
statusBarItem.command = undefined;
|
statusBarItem.command = undefined;
|
||||||
|
|
||||||
@ -27,8 +26,8 @@ export function createStatusBarItem(context: vscode.ExtensionContext): vscode.St
|
|||||||
progressBar.update("Checking dependencies", 0);
|
progressBar.update("Checking dependencies", 0);
|
||||||
|
|
||||||
const devchatStatus = await dependencyCheck();
|
const devchatStatus = await dependencyCheck();
|
||||||
if (devchatStatus !== 'has statisfied the dependency' && devchatStatus !== 'DevChat has been installed') {
|
if (devchatStatus !== 'has statisfied the dependency' && devchatStatus !== `${ASSISTANT_NAME_EN} has been installed`) {
|
||||||
statusBarItem.text = `$(warning)DevChat`;
|
statusBarItem.text = `$(warning)${ASSISTANT_NAME_EN}`;
|
||||||
statusBarItem.tooltip = `${devchatStatus}`;
|
statusBarItem.tooltip = `${devchatStatus}`;
|
||||||
|
|
||||||
if (devchatStatus === 'Missing required dependency: Python3') {
|
if (devchatStatus === 'Missing required dependency: Python3') {
|
||||||
@ -42,7 +41,7 @@ export function createStatusBarItem(context: vscode.ExtensionContext): vscode.St
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
statusBarItem.text = `$(pass)DevChat`;
|
statusBarItem.text = `$(pass)${ASSISTANT_NAME_EN}`;
|
||||||
statusBarItem.tooltip = `ready to chat`;
|
statusBarItem.tooltip = `ready to chat`;
|
||||||
statusBarItem.command = 'devcaht.onStatusBarClick';
|
statusBarItem.command = 'devcaht.onStatusBarClick';
|
||||||
progressBar.update(`Checking dependencies: Success`, 0);
|
progressBar.update(`Checking dependencies: Success`, 0);
|
||||||
@ -58,7 +57,7 @@ export function createStatusBarItem(context: vscode.ExtensionContext): vscode.St
|
|||||||
|
|
||||||
clearInterval(timer);
|
clearInterval(timer);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
statusBarItem.text = `$(warning)DevChat`;
|
statusBarItem.text = `$(warning)${ASSISTANT_NAME_EN}`;
|
||||||
statusBarItem.tooltip = `Error: ${error}`;
|
statusBarItem.tooltip = `Error: ${error}`;
|
||||||
statusBarItem.command = undefined;
|
statusBarItem.command = undefined;
|
||||||
progressBar.endWithError(`Checking dependencies: Fail with exception.`);
|
progressBar.endWithError(`Checking dependencies: Fail with exception.`);
|
||||||
|
@ -1,14 +1,10 @@
|
|||||||
import * as fs from 'fs';
|
|
||||||
import * as path from 'path';
|
|
||||||
import { logger } from "../util/logger";
|
import { logger } from "../util/logger";
|
||||||
|
|
||||||
import { UiUtilWrapper } from "../util/uiUtil";
|
|
||||||
import { ApiKeyManager } from '../util/apiKey';
|
|
||||||
import { installDevchat } from '../util/python_installer/install_devchat';
|
import { installDevchat } from '../util/python_installer/install_devchat';
|
||||||
|
import { ASSISTANT_NAME_EN } from '../util/constants';
|
||||||
|
|
||||||
|
|
||||||
let devchatStatus = '';
|
let devchatStatus = '';
|
||||||
let apiKeyStatus = '';
|
|
||||||
|
|
||||||
let preDevchatStatus = '';
|
let preDevchatStatus = '';
|
||||||
|
|
||||||
@ -27,26 +23,31 @@ export async function dependencyCheck(): Promise<string> {
|
|||||||
|
|
||||||
// define subfunction to check devchat dependency
|
// define subfunction to check devchat dependency
|
||||||
const getDevChatStatus = async (): Promise<string> => {
|
const getDevChatStatus = async (): Promise<string> => {
|
||||||
|
const statuses = {
|
||||||
|
installing: `installing ${ASSISTANT_NAME_EN}`,
|
||||||
|
installed: `${ASSISTANT_NAME_EN} has been installed`,
|
||||||
|
error: `An error occurred during the installation of ${ASSISTANT_NAME_EN}`
|
||||||
|
}
|
||||||
if (devchatStatus === '') {
|
if (devchatStatus === '') {
|
||||||
devchatStatus = 'installing devchat';
|
devchatStatus = statuses.installing;
|
||||||
const devchatCommandEnv = await installDevchat();
|
const devchatCommandEnv = await installDevchat();
|
||||||
if (devchatCommandEnv) {
|
if (devchatCommandEnv) {
|
||||||
logger.channel()?.info(`Python: ${devchatCommandEnv}`);
|
logger.channel()?.info(`Python: ${devchatCommandEnv}`);
|
||||||
devchatStatus = 'DevChat has been installed';
|
devchatStatus = statuses.installed;
|
||||||
return devchatStatus;
|
return devchatStatus;
|
||||||
} else {
|
} else {
|
||||||
logger.channel()?.info(`Python: undefined`);
|
logger.channel()?.info(`Python: undefined`);
|
||||||
|
|
||||||
devchatStatus = 'An error occurred during the installation of DevChat';
|
devchatStatus = statuses.error;
|
||||||
return devchatStatus;
|
return devchatStatus;
|
||||||
}
|
}
|
||||||
} else if (devchatStatus === 'has statisfied the dependency') {
|
} else if (devchatStatus === 'has statisfied the dependency') {
|
||||||
return devchatStatus;
|
return devchatStatus;
|
||||||
} else if (devchatStatus === 'installing devchat') {
|
} else if (devchatStatus === statuses.installing) {
|
||||||
return devchatStatus;
|
return devchatStatus;
|
||||||
} else if (devchatStatus === 'DevChat has been installed') {
|
} else if (devchatStatus === statuses.installed) {
|
||||||
return devchatStatus;
|
return devchatStatus;
|
||||||
} else if (devchatStatus === 'An error occurred during the installation of DevChat') {
|
} else if (devchatStatus === statuses.error) {
|
||||||
return devchatStatus;
|
return devchatStatus;
|
||||||
}
|
}
|
||||||
return "";
|
return "";
|
||||||
@ -55,7 +56,7 @@ export async function dependencyCheck(): Promise<string> {
|
|||||||
const devchatPackageStatus = await getDevChatStatus();
|
const devchatPackageStatus = await getDevChatStatus();
|
||||||
|
|
||||||
if (devchatPackageStatus !== preDevchatStatus) {
|
if (devchatPackageStatus !== preDevchatStatus) {
|
||||||
logger.channel()?.info(`devchat status: ${devchatPackageStatus}`);
|
logger.channel()?.info(`${ASSISTANT_NAME_EN} status: ${devchatPackageStatus}`);
|
||||||
preDevchatStatus = devchatPackageStatus;
|
preDevchatStatus = devchatPackageStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
9
src/util/constants.ts
Normal file
9
src/util/constants.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import { ExtensionContextHolder } from "./extensionContext";
|
||||||
|
|
||||||
|
export let ASSISTANT_NAME_EN = "DevChat";
|
||||||
|
export let ASSISTANT_NAME_ZH = "DevChat";
|
||||||
|
|
||||||
|
export function updateNames(nameEN, nameZH) {
|
||||||
|
ASSISTANT_NAME_EN = nameEN;
|
||||||
|
ASSISTANT_NAME_ZH = nameZH;
|
||||||
|
}
|
@ -1,3 +1,4 @@
|
|||||||
|
import { ASSISTANT_NAME_ZH } from "./constants";
|
||||||
import { LogChannel } from "./logger";
|
import { LogChannel } from "./logger";
|
||||||
import * as vscode from 'vscode';
|
import * as vscode from 'vscode';
|
||||||
|
|
||||||
@ -7,7 +8,7 @@ export class LoggerChannelVscode implements LogChannel {
|
|||||||
private static _instance: LoggerChannelVscode;
|
private static _instance: LoggerChannelVscode;
|
||||||
|
|
||||||
private constructor() {
|
private constructor() {
|
||||||
this._channel = vscode.window.createOutputChannel('DevChat', { log: true });
|
this._channel = vscode.window.createOutputChannel(ASSISTANT_NAME_ZH, { log: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
public static getInstance(): LoggerChannelVscode {
|
public static getInstance(): LoggerChannelVscode {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
import * as vscode from 'vscode';
|
import * as vscode from 'vscode';
|
||||||
|
import { ASSISTANT_NAME_ZH } from './constants';
|
||||||
|
|
||||||
export class ProgressBar {
|
export class ProgressBar {
|
||||||
private message: string;
|
private message: string;
|
||||||
@ -13,7 +14,7 @@ export class ProgressBar {
|
|||||||
init() {
|
init() {
|
||||||
vscode.window.withProgress({
|
vscode.window.withProgress({
|
||||||
location: vscode.ProgressLocation.Notification,
|
location: vscode.ProgressLocation.Notification,
|
||||||
title: 'DevChat',
|
title: ASSISTANT_NAME_ZH,
|
||||||
cancellable: false
|
cancellable: false
|
||||||
}, (progress, token) => {
|
}, (progress, token) => {
|
||||||
return new Promise<void>((resolve) => {
|
return new Promise<void>((resolve) => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user