diff --git a/app/server/lib/config.ts b/app/server/lib/config.ts index 3bc495fa..490cddcf 100644 --- a/app/server/lib/config.ts +++ b/app/server/lib/config.ts @@ -56,15 +56,15 @@ export class FileConfig { * @param validator - Validates the contents are in the correct format, and converts to the correct type. * Should throw an error or return null if not valid. */ - public static async create( + public static create( configPath: string, validator: FileContentsValidator - ): Promise> { + ): FileConfig { // Start with empty object, as it can be upgraded to a full config. let rawFileContents: any = {}; - if (await Deps.pathExists(configPath)) { - rawFileContents = JSON.parse(await Deps.readFile(configPath, 'utf8')); + if (Deps.pathExists(configPath)) { + rawFileContents = JSON.parse(Deps.readFile(configPath, 'utf8')); } let fileContents = null; @@ -97,7 +97,7 @@ export class FileConfig { await this.persistToDisk(); } - public async persistToDisk(): Promise { + public async persistToDisk() { await Deps.writeFile(this._filePath, JSON.stringify(this._rawConfig, null, 2)); } } diff --git a/app/server/lib/configCore.ts b/app/server/lib/configCore.ts index 884e2cf7..58ddf627 100644 --- a/app/server/lib/configCore.ts +++ b/app/server/lib/configCore.ts @@ -15,8 +15,8 @@ export interface IGristCoreConfig { edition: IWritableConfigValue; } -export async function loadGristCoreConfigFile(configPath?: string): Promise { - const fileConfig = configPath ? await FileConfig.create(configPath, convertToCoreFileContents) : undefined; +export function loadGristCoreConfigFile(configPath?: string): IGristCoreConfig { + const fileConfig = configPath ? FileConfig.create(configPath, convertToCoreFileContents) : undefined; return loadGristCoreConfig(fileConfig); } diff --git a/app/server/mergedServerMain.ts b/app/server/mergedServerMain.ts index f4e4a4a6..466eddaf 100644 --- a/app/server/mergedServerMain.ts +++ b/app/server/mergedServerMain.ts @@ -71,7 +71,7 @@ export async function main(port: number, serverTypes: ServerType[], const includeStatic = serverTypes.includes("static"); const includeApp = serverTypes.includes("app"); - options.settings ??= await getGlobalConfig(); + options.settings ??= getGlobalConfig(); const server = new FlexServer(port, `server(${serverTypes.join(",")})`, options); diff --git a/stubs/app/server/lib/globalConfig.ts b/stubs/app/server/lib/globalConfig.ts index 0c62d855..9b9c6d4c 100644 --- a/stubs/app/server/lib/globalConfig.ts +++ b/stubs/app/server/lib/globalConfig.ts @@ -9,10 +9,10 @@ let cachedGlobalConfig: IGristCoreConfig | undefined = undefined; /** * Retrieves the cached grist config, or loads it from the default global path. */ -export async function getGlobalConfig(): Promise { +export function getGlobalConfig(): IGristCoreConfig { if (!cachedGlobalConfig) { log.info(`Loading config file from ${globalConfigPath}`); - cachedGlobalConfig = await loadGristCoreConfigFile(globalConfigPath); + cachedGlobalConfig = loadGristCoreConfigFile(globalConfigPath); } return cachedGlobalConfig; diff --git a/test/server/lib/config.ts b/test/server/lib/config.ts index 711e75ec..1c7fe237 100644 --- a/test/server/lib/config.ts +++ b/test/server/lib/config.ts @@ -18,7 +18,7 @@ describe('FileConfig', () => { const useFakeConfigFile = (contents: string) => { const fakeFile = { contents }; sinon.replace(Deps, 'pathExists', sinon.fake.resolves(true)); - sinon.replace(Deps, 'readFile', sinon.fake((path, encoding: string) => Promise.resolve(fakeFile.contents)) as any); + sinon.replace(Deps, 'readFile', sinon.fake((path, encoding: string) => fakeFile.contents) as any); sinon.replace(Deps, 'writeFile', sinon.fake((path, newContents) => { fakeFile.contents = newContents; return Promise.resolve(); @@ -31,17 +31,17 @@ describe('FileConfig', () => { sinon.restore(); }); - it('throws an error from create if the validator does not return a value', async () => { + it('throws an error from create if the validator does not return a value', () => { useFakeConfigFile(testFileContentsJSON); const validator = () => null; - await assert.isRejected(FileConfig.create("anypath.json", validator)); + assert.throws(() => FileConfig.create("anypath.json", validator)); }); it('persists changes when values are assigned', async () => { const fakeFile = useFakeConfigFile(testFileContentsJSON); // Don't validate - this is guaranteed to be valid above. const validator = (input: any) => input as TestFileContents; - const fileConfig = await FileConfig.create("anypath.json", validator); + const fileConfig = FileConfig.create("anypath.json", validator); await fileConfig.set("myNum", 999); assert.equal(fileConfig.get("myNum"), 999); @@ -58,7 +58,7 @@ describe('FileConfig', () => { const fakeFile = useFakeConfigFile(JSON.stringify(configWithExtraProperties)); // It's entirely possible the validator can damage the extra properties, but that's not in scope for this test. const validator = (input: any) => input as TestFileContents; - const fileConfig = await FileConfig.create("anypath.json", validator); + const fileConfig = FileConfig.create("anypath.json", validator); // Triggering a write to the file await fileConfig.set("myNum", 999); await fileConfig.set("myStr", "Something"); @@ -94,7 +94,7 @@ describe('createConfigValue', () => { assert.equal(accessors.get(), 2); }); - it('initialises with the persistent value if available', async () => { + it('initialises with the persistent value if available', () => { const accessors = makeInMemoryAccessors(22); const configValue = createConfigValue(1, accessors); assert.equal(configValue.get(), 22); diff --git a/test/server/lib/configCore.ts b/test/server/lib/configCore.ts index 3d82ec68..50259e76 100644 --- a/test/server/lib/configCore.ts +++ b/test/server/lib/configCore.ts @@ -15,12 +15,12 @@ describe('loadGristCoreConfig', () => { }); it('will function correctly when no config file is present', async () => { - sinon.replace(Deps, 'pathExists', sinon.fake.resolves(false)); - sinon.replace(Deps, 'readFile', sinon.fake.resolves("")); + sinon.replace(Deps, 'pathExists', sinon.fake.returns(false)); + sinon.replace(Deps, 'readFile', sinon.fake.returns("" as any)); const writeFileFake = sinon.fake.resolves(undefined); sinon.replace(Deps, 'writeFile', writeFileFake); - const config = await loadGristCoreConfigFile("doesntmatter.json"); + const config = loadGristCoreConfigFile("doesntmatter.json"); assert.exists(config.edition.get()); await config.edition.set("enterprise"); diff --git a/test/server/lib/configCoreFileFormats.ts b/test/server/lib/configCoreFileFormats.ts index cf05c8ad..5cb99786 100644 --- a/test/server/lib/configCoreFileFormats.ts +++ b/test/server/lib/configCoreFileFormats.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { convertToCoreFileContents, IGristCoreConfigFileLatest } from "app/server/lib/configCoreFileFormats"; describe('convertToCoreFileContents', () => { - it('fails with a malformed config', async () => { + it('fails with a malformed config', () => { const badConfig = { version: "This is a random version number that will never exist", };