diff --git a/src/common/fs/write-json-file.injectable.ts b/src/common/fs/write-json-file.injectable.ts index a7079d7f84..5491487849 100644 --- a/src/common/fs/write-json-file.injectable.ts +++ b/src/common/fs/write-json-file.injectable.ts @@ -3,11 +3,10 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import type { JsonValue } from "type-fest"; import getDirnameOfPathInjectable from "../path/get-dirname.injectable"; import fsInjectable from "./fs.injectable"; -export type WriteJson = (filePath: string, contents: JsonValue) => Promise; +export type WriteJson = (filePath: string, contents: unknown) => Promise; const writeJsonFileInjectable = getInjectable({ id: "write-json-file", diff --git a/src/common/fs/write-json-sync.injectable.ts b/src/common/fs/write-json-sync.injectable.ts index 25c1933bb5..eb4abc3936 100644 --- a/src/common/fs/write-json-sync.injectable.ts +++ b/src/common/fs/write-json-sync.injectable.ts @@ -3,11 +3,29 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; +import getDirnameOfPathInjectable from "../path/get-dirname.injectable"; import fsInjectable from "./fs.injectable"; +export type WriteJsonSync = (filePath: string, contents: unknown) => void; + const writeJsonSyncInjectable = getInjectable({ id: "write-json-sync", - instantiate: (di) => di.inject(fsInjectable).writeJsonSync, + instantiate: (di): WriteJsonSync => { + const { + writeJsonSync, + ensureDirSync, + } = di.inject(fsInjectable); + const getDirnameOfPath = di.inject(getDirnameOfPathInjectable); + + return (filePath, content) => { + ensureDirSync(getDirnameOfPath(filePath), { mode: 0o755 }); + + writeJsonSync(filePath, content, { + encoding: "utf-8", + spaces: 2, + }); + }; + }, }); export default writeJsonSyncInjectable;