diff --git a/lib/fs.js b/lib/fs.js index 8761ab4f9f00a2..e1a959bae4804d 100644 --- a/lib/fs.js +++ b/lib/fs.js @@ -2343,6 +2343,8 @@ function writeFileSync(path, data, options) { validateBoolean(flush, 'options.flush'); + const flag = options.flag || 'w'; + // C++ fast path for string data and UTF8 encoding if (typeof data === 'string' && (options.encoding === 'utf8' || options.encoding === 'utf-8')) { if (!isInt32(path)) { @@ -2351,7 +2353,7 @@ function writeFileSync(path, data, options) { return binding.writeFileUtf8( path, data, - stringToFlags(options.flag), + stringToFlags(flag), parseFileMode(options.mode, 'mode', 0o666), ); } @@ -2361,8 +2363,6 @@ function writeFileSync(path, data, options) { data = Buffer.from(data, options.encoding || 'utf8'); } - const flag = options.flag || 'w'; - const isUserFd = isFd(path); // File descriptor ownership const fd = isUserFd ? path : fs.openSync(path, flag, options.mode); diff --git a/test/parallel/test-fs-write-file-sync.js b/test/parallel/test-fs-write-file-sync.js index 26aa819a8107f0..4ead91530bb748 100644 --- a/test/parallel/test-fs-write-file-sync.js +++ b/test/parallel/test-fs-write-file-sync.js @@ -101,6 +101,22 @@ tmpdir.refresh(); assert.strictEqual(content, 'hello world!'); } +// Test writeFileSync with no flags +{ + const utf8Data = 'hello world!'; + for (const test of [ + { data: utf8Data }, + { data: utf8Data, options: { encoding: 'utf8' } }, + { data: Buffer.from(utf8Data, 'utf8').toString('hex'), options: { encoding: 'hex' } }, + ]) { + const file = tmpdir.resolve(`testWriteFileSyncNewFile_${Math.random()}.txt`); + fs.writeFileSync(file, test.data, test.options); + + const content = fs.readFileSync(file, { encoding: 'utf-8' }); + assert.strictEqual(content, utf8Data); + } +} + // Test writeFileSync with an invalid input { const file = tmpdir.resolve('testWriteFileSyncInvalid.txt');