tools/vscode-azurewebpubsub/src/utils.ts (61 lines of code) (raw):
import { type ExtensionContext } from "vscode";
import * as vscode from "vscode";
import * as nls from 'vscode-nls';
import * as fs from "fs";
import { WebPubSubManagementClient } from "@azure/arm-webpubsub";
import { type AzExtClientContext} from "@microsoft/vscode-azext-azureutils";
import { createAzureClient } from "@microsoft/vscode-azext-azureutils";
import { type IActionContext} from "@microsoft/vscode-azext-utils";
import { type ExecuteActivityContext} from "@microsoft/vscode-azext-utils";
import { createSubscriptionContext } from "@microsoft/vscode-azext-utils";
import { type AzureSubscription } from "@microsoft/vscode-azureresources-api";
import { type AzureResourcesExtensionApiWithActivity } from "@microsoft/vscode-azext-utils/activity";
import { ext } from "./extensionVariables";
export const localize: nls.LocalizeFunc = nls.loadMessageBundle();
export async function createAzureApiClient(context: AzExtClientContext): Promise<WebPubSubManagementClient> {
return createAzureClient(context, WebPubSubManagementClient);
}
export async function createWebPubSubAPIClient(context: IActionContext, subscription: AzureSubscription): Promise<WebPubSubManagementClient> {
return createAzureApiClient([context, createSubscriptionContext(subscription)]);
}
export async function createActivityContext(): Promise<ExecuteActivityContext> {
return {
registerActivity: async (activity) => (ext.rgApiV2 as AzureResourcesExtensionApiWithActivity).activity.registerActivity(activity),
};
}
export function showError(commandName: string, error: Error): void {
void vscode.window.showErrorMessage(`Command "${commandName}" fails. ${error.message}`);
}
export function getHealthApiUrl(endpoint: string): string {
return `${endpoint}/api/health`;
}
export function createEndpointFromHostName(hostName: string): string {
return `https://${hostName}`;
}
export function isUrlValid(url: string): boolean {
try {
new URL(url);
return true;
} catch (_err) {
return false;
}
}
export async function loadPackageInfo(context: ExtensionContext) {
const raw = await fs.promises.readFile(context.asAbsolutePath("./package.json"), { encoding: 'utf-8' });
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
const { publisher, name, version, aiKey } = JSON.parse(raw);
return {
publisher: publisher as string,
name: name as string,
version: version as string,
applicationInsightKey: aiKey as string,
extensionId: `${publisher}.${name}`
};
}
export function createTerminalForTunnel(serviceName: string, hubName: string, ifShow: boolean = false): vscode.Terminal {
const name = `AWPS Tunnel: ${serviceName} - ${hubName}`;
const sameNameTerminal = vscode.window.terminals.filter((t) => t.name === name) ?.[0] ?? undefined;
sameNameTerminal && sameNameTerminal.dispose();
const terminal = vscode.window.createTerminal({ name });
ifShow && terminal.show();
return terminal;
}