You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.4 KiB
51 lines
1.4 KiB
4 years ago
|
var esformatter = require('esformatter')
|
||
|
var stringify = require('json-literal').stringify
|
||
|
var fs = require('fs')
|
||
|
var path = require('path')
|
||
|
|
||
|
/**
|
||
|
* Class that writes an object to a file (using the `json-literal` module)
|
||
|
* @param {*} `data` the javascript object,
|
||
|
* @constructor
|
||
|
*/
|
||
|
function Writer (data) {
|
||
|
var prettyPrint = false
|
||
|
|
||
|
/**
|
||
|
* Enable pretty printed output
|
||
|
*/
|
||
|
this.pretty = function () {
|
||
|
prettyPrint = true
|
||
|
return this
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Write the data to a file (synchronously).
|
||
|
* @param {string} `targetDir` the directory of the file
|
||
|
* @param {string} `filename` the name of the file
|
||
|
*/
|
||
|
this.writeTo = function (targetDir, filename) {
|
||
|
// Remove wrapping parens which are always created by json-literal
|
||
|
var node = stringify(data).replace(/^\((.*)\)$/, '$1')
|
||
|
// Create a valid javascript module
|
||
|
var string = 'module.exports = ' + node + ';'
|
||
|
// If prettyprint is enabled, use esformatter to format
|
||
|
// the resulting javascript.
|
||
|
if (prettyPrint) {
|
||
|
string = esformatter.format(string, {
|
||
|
// indent is hard coded to 4 spaces at the moment
|
||
|
indent: {
|
||
|
value: ' '
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
// Write the data...
|
||
|
var targetFile = path.join(targetDir, filename)
|
||
|
console.log('Writing ', targetFile)
|
||
|
fs.writeFileSync(targetFile, string, 'utf-8')
|
||
|
console.log('done')
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = Writer
|