12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- const json2csv = require('json2csv')
- const fs = require('fs-extra')
- const path = require('path')
- const log = require('../util/log')
- module.exports.format = function (data, options) {
- // Default columns to an empty object
- options.colums = options.columns || {}
- // Check if the array is empty. If so, return an empty string.
- if (data instanceof Array && data.length === 0) {
- return ''
- }
- // If we didn't get a data object, make it an array for ease of use.
- if (!(data instanceof Array) && typeof data === 'object') {
- data = [data]
- }
- // Do some preprocessing to find the columns.
- if ((!options.columns || Object.keys(options.colums).length === 0) && data.length > 0) {
- // Extract the fields from the first object.
- options.columns = Object.keys(data[0])
- log.verbose('assigning csv columns to', options.columns)
- }
- function processRow (el) {
- var row = {}
- // Iterate over the columns and add each item to the new row.
- for (var key of options.columns) {
- if (typeof options.columns[key] === 'function') {
- row[key] = options.columns[key](el)
- } else {
- row[key] = el[key]
- }
- }
- return row
- }
- var processedData = data.map(processRow)
- const csv = json2csv({ data: processedData, fieldNames: Object.keys(data[0]) })
- // Print the output if required.
- if (!options.program || options.program.output === undefined) {
- log.raw(csv)
- }
- return csv
- }
- module.exports.finalReport = async function (reports, program) {
- if (program.output === undefined) {
- return
- }
- // Ensure the output directory exists.
- fs.ensureDirSync(program.output)
- // Write each report to the disk
- for (var report of reports) {
- var outPath = path.join(program.output, report.name + '.csv')
- log.action('saving', outPath)
- if (program.output === '-') {
- console.log(report.contents)
- } else {
- fs.writeFileSync(outPath, report.contents, 'utf8')
- }
- }
- }
|