mirror of
https://github.com/cdr/code-server.git
synced 2025-12-06 16:34:35 +01:00
* Implement last opened functionality Fixes https://github.com/cdr/code-server/issues/4619 * Fix test temp dirs not being cleaned up * Mock logger everywhere This suppresses all the error and debug output we generate which makes it hard to actually find which test has failed. It also gives us a standard way to test logging for the few places we do that. * Use separate data directories for unit test instances Exactly as we do for the e2e tests. * Add integration tests for vscode route * Make settings use --user-data-dir Without this test instances step on each other feet and they also clobber your own non-test settings. * Make redirects consistent They will preserve the trailing slash if there is one. * Remove compilation check If you do a regular non-watch build there are no compilation stats so this bricks VS Code in CI when running the unit tests. I am not sure how best to fix this for the case where you have a build that has not been packaged yet so I just removed it for now and added a message to check if VS Code is compiling when in dev mode. * Update code-server update endpoint name
56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
import { logger } from "@coder/logger"
|
|
import { Query } from "express-serve-static-core"
|
|
import { promises as fs } from "fs"
|
|
|
|
export type Settings = { [key: string]: Settings | string | boolean | number }
|
|
|
|
/**
|
|
* Provides read and write access to settings.
|
|
*/
|
|
export class SettingsProvider<T> {
|
|
public constructor(private readonly settingsPath: string) {}
|
|
|
|
/**
|
|
* Read settings from the file. On a failure return last known settings and
|
|
* log a warning.
|
|
*/
|
|
public async read(): Promise<T> {
|
|
try {
|
|
const raw = (await fs.readFile(this.settingsPath, "utf8")).trim()
|
|
return raw ? JSON.parse(raw) : {}
|
|
} catch (error: any) {
|
|
if (error.code !== "ENOENT") {
|
|
logger.warn(error.message)
|
|
}
|
|
}
|
|
return {} as T
|
|
}
|
|
|
|
/**
|
|
* Write settings combined with current settings. On failure log a warning.
|
|
* Settings will be merged shallowly.
|
|
*/
|
|
public async write(settings: Partial<T>): Promise<void> {
|
|
try {
|
|
const oldSettings = await this.read()
|
|
const nextSettings = { ...oldSettings, ...settings }
|
|
await fs.writeFile(this.settingsPath, JSON.stringify(nextSettings, null, 2))
|
|
} catch (error: any) {
|
|
logger.warn(error.message)
|
|
}
|
|
}
|
|
}
|
|
|
|
export interface UpdateSettings {
|
|
update: {
|
|
checked: number
|
|
version: string
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Global code-server settings.
|
|
*/
|
|
export interface CoderSettings extends UpdateSettings {
|
|
query?: Query
|
|
}
|