From 2ab54bd94ca877197aec79cc2a1129eb9198e36a Mon Sep 17 00:00:00 2001 From: Roman Usherenko Date: Fri, 29 Oct 2021 12:25:25 +0300 Subject: [PATCH] autocreate --output-file directory --- lib/__tests__/writeOutputFile.test.js | 27 +++++++++++++++++++++++++++ lib/writeOutputFile.js | 5 ++++- 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 lib/__tests__/writeOutputFile.test.js diff --git a/lib/__tests__/writeOutputFile.test.js b/lib/__tests__/writeOutputFile.test.js new file mode 100644 index 0000000000..87a8710254 --- /dev/null +++ b/lib/__tests__/writeOutputFile.test.js @@ -0,0 +1,27 @@ +'use strict'; + +const path = require('path'); +const fs = require('fs').promises; +const writeOutputFile = require('../writeOutputFile'); + +describe('writeOutputFile', () => { + it('creates a file', async () => { + const filePath = path.resolve(__dirname, 'tmpfile'); + + await writeOutputFile('test content', filePath); + + expect((await fs.readFile(filePath)).toString()).toEqual('test content'); + + await fs.unlink(filePath); + }); + + it('creates a directory if it does not exist', async () => { + const filePath = path.resolve(__dirname, 'tmpdir/tmpfile'); + + await writeOutputFile('test content', filePath); + + expect((await fs.readFile(filePath)).toString()).toEqual('test content'); + + await fs.rmdir(path.dirname(filePath), { recursive: true }); + }); +}); diff --git a/lib/writeOutputFile.js b/lib/writeOutputFile.js index a495f45a1e..40590d7e0b 100644 --- a/lib/writeOutputFile.js +++ b/lib/writeOutputFile.js @@ -1,6 +1,7 @@ 'use strict'; const path = require('path'); +const { mkdir } = require('fs').promises; const stripAnsi = require('strip-ansi'); const writeFileAtomic = require('write-file-atomic'); @@ -10,4 +11,6 @@ const writeFileAtomic = require('write-file-atomic'); * @returns {Promise} */ module.exports = (content, filePath) => - writeFileAtomic(path.normalize(filePath), stripAnsi(content)); + mkdir(path.dirname(filePath), { recursive: true }).then(() => + writeFileAtomic(path.normalize(filePath), stripAnsi(content)), + );