diff --git a/src/node/socket.ts b/src/node/socket.ts index 1a28188d5aad..1651046d02b2 100644 --- a/src/node/socket.ts +++ b/src/node/socket.ts @@ -76,7 +76,7 @@ export class SocketProxyProvider { .then((pipe) => { this.proxyPipe = pipe return Promise.all([ - fs.mkdir(path.dirname(this.proxyPath), { recursive: true }), + fs.mkdir(path.dirname(this.proxyPipe), { recursive: true }), fs.rmdir(this.proxyPipe, { recursive: true }), ]) }) diff --git a/src/node/util.ts b/src/node/util.ts index 4fdca5263a82..f1882471d969 100644 --- a/src/node/util.ts +++ b/src/node/util.ts @@ -7,7 +7,6 @@ import * as os from "os" import * as path from "path" import * as util from "util" import xdgBasedir from "xdg-basedir" -import { tmpdir } from "./constants" export interface Paths { data: string @@ -23,26 +22,33 @@ export const paths = getEnvPaths() * ones. Most CLIs do this as in practice only GUI apps use the standard macOS directories. */ export function getEnvPaths(): Paths { - let paths: Paths - if (process.platform === "win32") { - paths = { - ...envPaths("code-server", { - suffix: "", - }), - runtime: tmpdir, - } - } else { - if (xdgBasedir.data === undefined || xdgBasedir.config === undefined) { - throw new Error("No home folder?") - } - paths = { - data: path.join(xdgBasedir.data, "code-server"), - config: path.join(xdgBasedir.config, "code-server"), - runtime: xdgBasedir.runtime ? path.join(xdgBasedir.runtime, "code-server") : tmpdir, - } + const paths = envPaths("code-server", { suffix: "" }) + const append = (p: string): string => path.join(p, "code-server") + switch (process.platform) { + case "darwin": + return { + // envPaths uses native directories so force Darwin to use the XDG spec + // to align with other CLI tools. + data: xdgBasedir.data ? append(xdgBasedir.data) : paths.data, + config: xdgBasedir.config ? append(xdgBasedir.config) : paths.config, + // Fall back to temp if there is no runtime dir. + runtime: xdgBasedir.runtime ? append(xdgBasedir.runtime) : paths.temp, + } + case "win32": + return { + data: paths.data, + config: paths.config, + // Windows doesn't have a runtime dir. + runtime: paths.temp, + } + default: + return { + data: paths.data, + config: paths.config, + // Fall back to temp if there is no runtime dir. + runtime: xdgBasedir.runtime ? append(xdgBasedir.runtime) : paths.temp, + } } - - return paths } /** diff --git a/test/unit/register.test.ts b/test/unit/register.test.ts index de682f5c67e0..da69f21d8c76 100644 --- a/test/unit/register.test.ts +++ b/test/unit/register.test.ts @@ -9,7 +9,7 @@ describe("register", () => { beforeAll(() => { const { window } = new JSDOM() - global.window = window as unknown as Window & typeof globalThis + global.window = (window as unknown) as Window & typeof globalThis global.document = window.document global.navigator = window.navigator global.location = window.location @@ -35,10 +35,10 @@ describe("register", () => { jest.restoreAllMocks() // We don't want these to stay around because it can affect other tests - global.window = undefined as unknown as Window & typeof globalThis - global.document = undefined as unknown as Document & typeof globalThis - global.navigator = undefined as unknown as Navigator & typeof globalThis - global.location = undefined as unknown as Location & typeof globalThis + global.window = (undefined as unknown) as Window & typeof globalThis + global.document = (undefined as unknown) as Document & typeof globalThis + global.navigator = (undefined as unknown) as Navigator & typeof globalThis + global.location = (undefined as unknown) as Location & typeof globalThis }) it("test should have access to browser globals from beforeAll", () => { @@ -110,7 +110,7 @@ describe("register", () => { origin: "http://localhost:8080", } const { window } = new JSDOM() - global.window = window as unknown as Window & typeof globalThis + global.window = (window as unknown) as Window & typeof globalThis global.document = window.document global.navigator = window.navigator global.location = location as Location @@ -131,10 +131,10 @@ describe("register", () => { jest.restoreAllMocks() // We don't want these to stay around because it can affect other tests - global.window = undefined as unknown as Window & typeof globalThis - global.document = undefined as unknown as Document & typeof globalThis - global.navigator = undefined as unknown as Navigator & typeof globalThis - global.location = undefined as unknown as Location & typeof globalThis + global.window = (undefined as unknown) as Window & typeof globalThis + global.document = (undefined as unknown) as Document & typeof globalThis + global.navigator = (undefined as unknown) as Navigator & typeof globalThis + global.location = (undefined as unknown) as Location & typeof globalThis }) it("should register when options.base is undefined", async () => { // Mock getElementById