diff --git a/editors/code/src/installation/download_artifact.ts b/editors/code/src/installation/download_artifact.ts index 8ed99bf0a0..97e4d67c21 100644 --- a/editors/code/src/installation/download_artifact.ts +++ b/editors/code/src/installation/download_artifact.ts @@ -1,10 +1,10 @@ import * as vscode from "vscode"; import * as path from "path"; import { promises as fs } from "fs"; -import { strict as assert } from "assert"; import { ArtifactReleaseInfo } from "./interfaces"; import { downloadFile } from "./download_file"; +import { assert } from "../util"; /** * Downloads artifact from given `downloadUrl`. @@ -19,11 +19,10 @@ export async function downloadArtifact( installationDir: string, displayName: string, ) { - await fs.mkdir(installationDir).catch(err => assert.strictEqual( - err?.code, - "EEXIST", + await fs.mkdir(installationDir).catch(err => assert( + err?.code === "EEXIST", `Couldn't create directory "${installationDir}" to download ` + - `${artifactFileName} artifact: ${err.message}` + `${artifactFileName} artifact: ${err?.message}` )); const installationPath = path.join(installationDir, artifactFileName); diff --git a/editors/code/src/installation/download_file.ts b/editors/code/src/installation/download_file.ts index 319cb995c4..ee8949d61c 100644 --- a/editors/code/src/installation/download_file.ts +++ b/editors/code/src/installation/download_file.ts @@ -2,8 +2,7 @@ import fetch from "node-fetch"; import * as fs from "fs"; import * as stream from "stream"; import * as util from "util"; -import { strict as assert } from "assert"; -import { log } from "../util"; +import { log, assert } from "../util"; const pipeline = util.promisify(stream.pipeline); diff --git a/editors/code/src/installation/server.ts b/editors/code/src/installation/server.ts index cb5e568448..6a6cf4f8c3 100644 --- a/editors/code/src/installation/server.ts +++ b/editors/code/src/installation/server.ts @@ -1,13 +1,12 @@ import * as vscode from "vscode"; import * as path from "path"; -import { strict as assert } from "assert"; import { promises as dns } from "dns"; import { spawnSync } from "child_process"; import { BinarySource } from "./interfaces"; import { fetchArtifactReleaseInfo } from "./fetch_artifact_release_info"; import { downloadArtifact } from "./download_artifact"; -import { log } from "../util"; +import { log, assert } from "../util"; export async function ensureServerBinary(source: null | BinarySource): Promise { if (!source) { diff --git a/editors/code/src/util.ts b/editors/code/src/util.ts index 68c2a94d04..f56c6badaf 100644 --- a/editors/code/src/util.ts +++ b/editors/code/src/util.ts @@ -1,22 +1,31 @@ import * as lc from "vscode-languageclient"; import * as vscode from "vscode"; +import { strict as nativeAssert } from "assert"; -let enabled: boolean = false; +export function assert(condition: boolean, explanation: string): asserts condition { + try { + nativeAssert(condition, explanation); + } catch (err) { + log.error(`Assertion failed:`, explanation); + throw err; + } +} export const log = { + enabled: true, debug(message?: any, ...optionalParams: any[]): void { - if (!enabled) return; + if (!log.enabled) return; // eslint-disable-next-line no-console console.log(message, ...optionalParams); }, error(message?: any, ...optionalParams: any[]): void { - if (!enabled) return; + if (!log.enabled) return; debugger; // eslint-disable-next-line no-console console.error(message, ...optionalParams); }, setEnabled(yes: boolean): void { - enabled = yes; + log.enabled = yes; } };