From c130279be2c272f28b87879b6048ced10a6bfb07 Mon Sep 17 00:00:00 2001 From: Daniel Nalborczyk Date: Sun, 30 Jan 2022 13:33:37 -0500 Subject: [PATCH] refactor: move mkdir to writeoutputfile --- browser/fs.ts | 6 +++--- src/rollup/rollup.ts | 12 ++++++++---- src/utils/fs.ts | 8 -------- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/browser/fs.ts b/browser/fs.ts index 4f6ce519593..61c07e2dee8 100644 --- a/browser/fs.ts +++ b/browser/fs.ts @@ -1,7 +1,7 @@ import { throwNoFileSystem } from './error'; export const promises = { - readFile: throwNoFileSystem('fs.readFile') + mkdir: throwNoFileSystem('fs.mkdir'), + readFile: throwNoFileSystem('fs.readFile'), + writeFile: throwNoFileSystem('fs.writeFile') }; - -export const writeFile = throwNoFileSystem('fs.writeFile'); diff --git a/src/rollup/rollup.ts b/src/rollup/rollup.ts index fc9eacf5028..037986872e4 100644 --- a/src/rollup/rollup.ts +++ b/src/rollup/rollup.ts @@ -4,7 +4,7 @@ import Graph from '../Graph'; import type { PluginDriver } from '../utils/PluginDriver'; import { ensureArray } from '../utils/ensureArray'; import { errAlreadyClosed, errCannotEmitFromOptionsHook, error } from '../utils/error'; -import { writeFile } from '../utils/fs'; +import { promises as fs } from '../utils/fs'; import { normalizeInputOptions } from '../utils/options/normalizeInputOptions'; import { normalizeOutputOptions } from '../utils/options/normalizeOutputOptions'; import type { GenericConfigObject } from '../utils/options/options'; @@ -259,11 +259,15 @@ function getSortingFileType(file: OutputAsset | OutputChunk): SortingFileType { return SortingFileType.SECONDARY_CHUNK; } -function writeOutputFile( +async function writeOutputFile( outputFile: OutputAsset | OutputChunk, outputOptions: NormalizedOutputOptions ): Promise { const fileName = resolve(outputOptions.dir || dirname(outputOptions.file!), outputFile.fileName); + + // 'recursive: true' does not throw if the folder structure, or parts of it, already exist + await fs.mkdir(dirname(fileName), { recursive: true }); + let writeSourceMapPromise: Promise | undefined; let source: string | Uint8Array; if (outputFile.type === 'asset') { @@ -276,7 +280,7 @@ function writeOutputFile( url = outputFile.map.toUrl(); } else { url = `${basename(outputFile.fileName)}.map`; - writeSourceMapPromise = writeFile(`${fileName}.map`, outputFile.map.toString()); + writeSourceMapPromise = fs.writeFile(`${fileName}.map`, outputFile.map.toString()); } if (outputOptions.sourcemap !== 'hidden') { source += `//# ${SOURCEMAPPING_URL}=${url}\n`; @@ -284,7 +288,7 @@ function writeOutputFile( } } - return Promise.all([writeFile(fileName, source), writeSourceMapPromise]); + return Promise.all([fs.writeFile(fileName, source), writeSourceMapPromise]); } /** diff --git a/src/utils/fs.ts b/src/utils/fs.ts index 42b3535756a..b301bda0b0a 100644 --- a/src/utils/fs.ts +++ b/src/utils/fs.ts @@ -1,9 +1 @@ -import { promises as fs } from 'fs'; -import { dirname } from './path'; - export * from 'fs'; - -export async function writeFile(dest: string, data: string | Uint8Array): Promise { - await fs.mkdir(dirname(dest), { recursive: true }); - await fs.writeFile(dest, data); -}