Current Dev State

This commit is contained in:
Tim Lorsbach
2025-06-23 20:13:54 +02:00
parent b4f9bb277d
commit ded50edaa2
22617 changed files with 4345095 additions and 174 deletions

View File

@ -0,0 +1,61 @@
'use strict';
var defaults = require('defaults');
var path = require('path');
var through2 = require('through2');
var mkdirp = require('mkdirp');
var fs = require('graceful-fs');
var writeContents = require('./writeContents');
function dest(outFolder, opt) {
opt = opt || {};
if (typeof outFolder !== 'string' && typeof outFolder !== 'function') {
throw new Error('Invalid output folder');
}
var options = defaults(opt, {
cwd: process.cwd()
});
if (typeof options.mode === 'string') {
options.mode = parseInt(options.mode, 8);
}
var cwd = path.resolve(options.cwd);
function saveFile (file, enc, cb) {
var basePath;
if (typeof outFolder === 'string') {
basePath = path.resolve(cwd, outFolder);
}
if (typeof outFolder === 'function') {
basePath = path.resolve(cwd, outFolder(file));
}
var writePath = path.resolve(basePath, file.relative);
var writeFolder = path.dirname(writePath);
// wire up new properties
file.stat = file.stat ? file.stat : new fs.Stats();
file.stat.mode = (options.mode || file.stat.mode);
file.cwd = cwd;
file.base = basePath;
file.path = writePath;
// mkdirp the folder the file is going in
mkdirp(writeFolder, function(err){
if (err) {
return cb(err);
}
writeContents(writePath, file, cb);
});
}
var stream = through2.obj(saveFile);
// TODO: option for either backpressure or lossy
stream.resume();
return stream;
}
module.exports = dest;

View File

@ -0,0 +1,59 @@
'use strict';
var fs = require('fs');
var writeDir = require('./writeDir');
var writeStream = require('./writeStream');
var writeBuffer = require('./writeBuffer');
function writeContents(writePath, file, cb) {
var written = function(err) {
var done = function(err) {
cb(err, file);
};
if (err) {
return done(err);
}
if (!file.stat || typeof file.stat.mode !== 'number') {
return done();
}
fs.stat(writePath, function(err, st) {
if (err) {
return done(err);
}
// octal 7777 = decimal 4095
var currentMode = (st.mode & 4095);
if (currentMode === file.stat.mode) {
return done();
}
fs.chmod(writePath, file.stat.mode, done);
});
};
// if directory then mkdirp it
if (file.isDirectory()) {
writeDir(writePath, file, written);
return;
}
// stream it to disk yo
if (file.isStream()) {
writeStream(writePath, file, written);
return;
}
// write it like normal
if (file.isBuffer()) {
writeBuffer(writePath, file, written);
return;
}
// if no contents then do nothing
if (file.isNull()) {
cb(null, file);
return;
}
}
module.exports = writeContents;

View File

@ -0,0 +1,13 @@
'use strict';
var fs = require('graceful-fs');
function writeBuffer(writePath, file, cb) {
var opt = {
mode: file.stat.mode
};
fs.writeFile(writePath, file.contents, opt, cb);
}
module.exports = writeBuffer;

View File

@ -0,0 +1,9 @@
'use strict';
var mkdirp = require('mkdirp');
function writeDir (writePath, file, cb) {
mkdirp(writePath, file.stat.mode, cb);
}
module.exports = writeDir;

View File

@ -0,0 +1,22 @@
'use strict';
var streamFile = require('../../src/getContents/streamFile');
var fs = require('graceful-fs');
function writeStream (writePath, file, cb) {
var opt = {
mode: file.stat.mode
};
var outStream = fs.createWriteStream(writePath, opt);
file.contents.once('error', cb);
outStream.once('error', cb);
outStream.once('finish', function() {
streamFile(file, cb);
});
file.contents.pipe(outStream);
}
module.exports = writeStream;