nodejs-tpkg-builder
Version:
a build tool for node apps using tpkg (http://tpkg.github.io/)
113 lines (81 loc) • 3.05 kB
JavaScript
;
var fs = require('fs');
var path = require('path');
var async = require('async');
var Applause = require('applause');
var _ = require('lodash');
var createFilesFromTemplates = function (config, directories, callback) {
async.waterfall([
// get file names for all files in template directory
function (readCallback) {
fs.readdir(directories.templatesDir, readCallback);
},
//
//function( filenames, readCallback ) {
// fs.readdir( path.join(directories.projectDir, 'tpkg'), readCallback);
//},
// check for any project tpkg files to override defaults
function (filenames, overrideCallback) {
var overrideDir = path.join(directories.projectDir, 'tpkg');
var updatedFilenames;
if (fs.existsSync(overrideDir)) {
updatedFilenames = filenames.map(function (filename) {
if (fs.existsSync(path.join(overrideDir, filename))) {
return path.join(overrideDir, filename);
}
else {
return path.join(directories.templatesDir, filename);
}
});
//overrideCallback(null, updatedFilenames);
}
else {
updatedFilenames = filenames.map(function (filename) {
return path.join(directories.templatesDir, filename);
});
//overrideCallback(null, updatedFilenames);
}
var otherFileNames = fs.readdirSync( path.join(directories.projectDir, 'tpkg') ) || [];
otherFileNames = _.chain(otherFileNames)
.difference(filenames)
.without(".DS_Store")
.value();
var otherFiles = otherFileNames.map( function( fileName ) {
return path.join(directories.projectDir, 'tpkg', fileName);
});
//overrideCallback(null, otherFiles);
updatedFilenames = _.union(updatedFilenames, otherFiles );
overrideCallback(null, updatedFilenames);
},
// read template files, replace variables, and write new files to build directory
function (filenames, writeCallback) {
async.map(filenames, replaceAndWriteFile, writeCallback);
}
], callback);
function replaceAndWriteFile (filename, callback) {
async.waterfall([
function (readCallback) {
// read file
fs.readFile(filename, 'utf8', function (err, data) {
if (err) return readCallback(err);
// replace variables
var applause = Applause.create({
patterns: [
{ json: config }
]
});
var newFileContents = applause.replace(data);
readCallback(null, newFileContents);
});
},
function (newFileContents, writeCallback) {
// write file to build directory
var writeFilename = path.join(directories.buildDir, path.basename(filename));
fs.writeFile(writeFilename, newFileContents, writeCallback);
}
], callback);
}
};
module.exports = {
createFilesFromTemplates: createFilesFromTemplates
};