type-graphql
Version:
Create GraphQL schema and resolvers with TypeScript, using classes and decorators!
65 lines (64 loc) • 1.83 kB
JavaScript
import fs from "node:fs";
import path from "node:path";
import { promisify } from "node:util";
export const fsMkdir = promisify(fs.mkdir);
export const fsWriteFile = promisify(fs.writeFile);
export function parsePath(targetPath) {
const directories = [];
const parsedPath = path.parse(path.resolve(targetPath));
const splitPath = parsedPath.dir.split(path.sep);
if (parsedPath.root === "/") {
splitPath[0] = `/${splitPath[0]}`;
}
splitPath.reduce((previous, next) => {
const directory = path.join(previous, next);
directories.push(directory);
return path.join(directory);
});
return directories;
}
export async function mkdirRecursive(filePath) {
const directories = parsePath(filePath);
for (const directory of directories) {
try {
await fsMkdir(directory);
}
catch (err) {
if (err.code !== "EEXIST") {
throw err;
}
}
}
}
export function mkdirRecursiveSync(filePath) {
const directories = parsePath(filePath);
for (const directory of directories) {
if (!fs.existsSync(directory)) {
fs.mkdirSync(directory);
}
}
}
export async function outputFile(filePath, fileContent) {
try {
await fsWriteFile(filePath, fileContent);
}
catch (err) {
if (err.code !== "ENOENT") {
throw err;
}
await mkdirRecursive(filePath);
await fsWriteFile(filePath, fileContent);
}
}
export function outputFileSync(filePath, fileContent) {
try {
fs.writeFileSync(filePath, fileContent);
}
catch (err) {
if (err.code !== "ENOENT") {
throw err;
}
mkdirRecursiveSync(filePath);
fs.writeFileSync(filePath, fileContent);
}
}