UNPKG

1.84 kBJavaScriptView Raw
1/**
2 * @memberof apeman-commons-compiling
3 * @function concatFiles
4 * @param {string[]} src - Filenames to concat
5 * @param {string} dest - Destination file path.
6 * @param {object} [options] - Optional settings.
7 * @param {boolean} [options.unique] - SKip duplicate source.
8 * @param {function} callback - Callback when done.
9 */
10
11"use strict";
12
13var async = require('async'),
14 fs = require('fs'),
15 path = require('path'),
16 writeout = require('writeout'),
17 fileconcat = require('fileconcat'),
18 argx = require('argx');
19
20/** @lends concatFiles */
21function concatFiles(src, dest, options, callback) {
22 var args = argx(arguments);
23 callback = args.pop('function') || argx.noop;
24 options = args.pop('object') || {};
25 dest = args.pop('string');
26 src = args.remain().reduce(function (a, b) {
27 return a.concat(b);
28 }, []);
29
30 if (!dest) {
31 callback(new Error('dest is required.'));
32 return;
33 }
34
35
36 var tmp = path.resolve(path.dirname(dest), '.' + path.basename(dest) + '.tmp.' + new Date().getTime());
37 async.series([
38 function (callback) {
39 fileconcat(src, tmp, {
40 unique: options.unique,
41 mkdirp: true
42 }, callback);
43 },
44 function (callback) {
45 async.waterfall([
46 function (callback) {
47 fs.readFile(tmp, callback);
48 },
49 function (content, callback) {
50 writeout(dest, content, {
51 mkdirp: true,
52 skipIfIdentical: true
53 }, callback);
54 }
55 ], callback);
56 }
57 ], function (err, results) {
58 fs.unlink(tmp, function () {
59 callback(err, results.pop());
60 });
61 });
62
63}
64
65module.exports = concatFiles;
\No newline at end of file