123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- 'use strict';
- const {promisify} = require('util');
- const path = require('path');
- const fs = require('graceful-fs');
- const isStream = require('is-stream');
- const makeDir = require('make-dir');
- const uuid = require('uuid');
- const tempDir = require('temp-dir');
- const writeFileP = promisify(fs.writeFile);
- const tempfile = filePath => path.join(tempDir, uuid.v4(), (filePath || ''));
- const writeStream = async (filePath, fileContent) => new Promise((resolve, reject) => {
- const writable = fs.createWriteStream(filePath);
- fileContent
- .on('error', error => {
- // Be careful to reject before writable.end(), otherwise the writable's
- // 'finish' event will fire first and we will resolve the promise
- // before we reject it.
- reject(error);
- fileContent.unpipe(writable);
- writable.end();
- })
- .pipe(writable)
- .on('error', reject)
- .on('finish', resolve);
- });
- module.exports = async (fileContent, filePath) => {
- const tempPath = tempfile(filePath);
- const write = isStream(fileContent) ? writeStream : writeFileP;
- await makeDir(path.dirname(tempPath));
- await write(tempPath, fileContent);
- return tempPath;
- };
- module.exports.sync = (fileContent, filePath) => {
- const tempPath = tempfile(filePath);
- makeDir.sync(path.dirname(tempPath));
- fs.writeFileSync(tempPath, fileContent);
- return tempPath;
- };
|