Add mkdirp utility to avoid verbose fs.mkdir calls

Added mkdirp() helper to app/common/fs.mjs that wraps
fs.mkdir(dir, { recursive: true }). Updated all call sites to use it.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Matt Isenhower 2026-02-15 11:09:02 -08:00
parent 8780463c66
commit 7adb9c313e
7 changed files with 16 additions and 7 deletions

View File

@ -1,5 +1,6 @@
import fs from 'fs/promises';
import path from 'path';
import { mkdirp } from './fs.mjs';
export default class ValueCache
{
constructor(key) {
@ -47,7 +48,7 @@ export default class ValueCache
let cachedAt = new Date;
let serialized = JSON.stringify({ expires, data, cachedAt }, undefined, 2);
await fs.mkdir(path.dirname(this.path), { recursive: true });
await mkdirp(path.dirname(this.path));
await fs.writeFile(this.path, serialized);
}
}

View File

@ -1,5 +1,9 @@
import fs from 'fs/promises';
export function mkdirp(dir) {
return fs.mkdir(dir, { recursive: true });
}
export async function exists(file) {
try {
await fs.access(file);

View File

@ -3,7 +3,7 @@ import path from 'path';
import PQueue from 'p-queue';
import prefixedConsole from '../common/prefixedConsole.mjs';
import { normalizeSplatnetResourcePath } from '../common/util.mjs';
import { exists } from '../common/fs.mjs';
import { exists, mkdirp } from '../common/fs.mjs';
const queue = new PQueue({ concurrency: 4 });
@ -69,7 +69,7 @@ export default class ImageProcessor
throw new Error(`Invalid image response code: ${result.status}`);
}
await fs.mkdir(path.dirname(this.localPath(destination)), { recursive: true });
await mkdirp(path.dirname(this.localPath(destination)));
await fs.writeFile(this.localPath(destination), result.body);
} catch (e) {
this.console.error(`Image download failed for ${destination}`, e);

View File

@ -1,5 +1,6 @@
import fs from 'fs/promises';
import path from 'path';
import { mkdirp } from '../common/fs.mjs';
import { jsonpathQuery } from '../common/util.mjs';
import get from 'lodash/get.js';
import set from 'lodash/set.js';
@ -91,7 +92,7 @@ export class LocalizationProcessor {
data = JSON.stringify(data, undefined, space);
await fs.mkdir(path.dirname(this.filename), { recursive: true });
await mkdirp(path.dirname(this.filename));
await fs.writeFile(this.filename, data);
}

View File

@ -1,6 +1,7 @@
import fs from 'fs/promises';
import path from 'path';
import { Console } from 'node:console';
import { mkdirp } from '../../common/fs.mjs';
import ical from 'ical-generator';
import pFilter from 'p-filter';
import prefixedConsole from '../../common/prefixedConsole.mjs';
@ -215,7 +216,7 @@ export default class DataUpdater
}
async writeFile(file, data) {
await fs.mkdir(path.dirname(file), { recursive: true });
await mkdirp(path.dirname(file));
await fs.writeFile(file, data);
}

View File

@ -1,4 +1,5 @@
import fs from 'fs/promises';
import { mkdirp } from '../../common/fs.mjs';
import Client from './Client.mjs';
export default class FileWriter extends Client {
@ -8,7 +9,7 @@ export default class FileWriter extends Client {
dir = 'temp';
async send(status, generator) {
await fs.mkdir(this.dir, { recursive: true });
await mkdirp(this.dir);
if (status.media?.length > 0) {
let imgFilename = `${this.dir}/${generator.key}.png`;

View File

@ -1,4 +1,5 @@
import fs from 'fs/promises';
import { mkdirp } from '../../common/fs.mjs';
import Client from './Client.mjs';
export default class ImageWriter extends Client {
@ -12,7 +13,7 @@ export default class ImageWriter extends Client {
return;
}
await fs.mkdir(this.dir, { recursive: true });
await mkdirp(this.dir);
let imgFilename = `${this.dir}/${generator.key}.png`;
await fs.writeFile(imgFilename, status.media[0].file);