UNPKG

1.49 kBJavaScriptView Raw
1"use strict";
2
3var fs = require('fs');
4var path = require('path');
5var extend = require('extend');
6var template = require('lodash/template');
7
8var errorHandler = require('./errorHandler');
9
10var _fileNumber = 1;
11var _defaultConfig = {
12 onEachFile: function() {},
13 onCompleted: function() {}
14}
15
16var _config;
17
18var fileTemplaterApi = {};
19
20/**
21 * Run file templating
22 */
23fileTemplaterApi.run = function() {
24 _config.files.forEach(function(element, index, array) {
25 templateFile(element);
26 });
27}
28
29/**
30 * Sets internal config object
31 */
32fileTemplaterApi.setConfig = function(config) {
33 _config = extend(_defaultConfig, config);
34}
35
36/**
37 * Template a single file.
38 * Get the contents of a file, template it and re-write to the same file
39 * @param {Object} filePaths File paths data, containing file src and dest
40 */
41function templateFile(filePaths) {
42 var compiled;
43 var output;
44
45 fs.readFile(filePaths.src, 'utf8', function(err, fileContents) {
46 if (err) errorHandler(err);
47
48 compiled = template(fileContents);
49 output = compiled(_config.data);
50
51 fs.writeFile(filePaths.dest, output, 'utf8', function(err) {
52 if (err) errorHandler(err);
53
54 _config.onEachFile(filePaths.dest);
55
56 if(_fileNumber === _config.files.length) {
57 _config = _defaultConfig;
58 _config.onCompleted();
59 }
60
61 _fileNumber++;
62
63 });
64
65 });
66}
67
68module.exports = fileTemplaterApi;
\No newline at end of file