haar
Version:
Cli tool for building and displaying plant-uml diagrams
55 lines (45 loc) • 1.55 kB
JavaScript
const config = require('./../config')
const fs = require('fs-extra')
const globby = require('globby')
const plantuml = require('node-plantuml')
const path = require('path')
const _ = require('lodash')
const async = require('async')
const logger = require('./../infrastructure').logger
const generateDiagram = (rootDirectory, diagramPath, format, done) => {
logger.info(`Generating ${format} for diagram ${diagramPath}`)
let fileName = path.basename(diagramPath, '.puml')
let outputPath = `${rootDirectory}/${config.assetDirectory}/${fileName}.${format}`
let gen = plantuml.generate(diagramPath, { format: format })
let chunks = []
gen.out.on('data', (data) => chunks.push(data))
gen.out.on('end', () => {
const buffer = Buffer.concat(chunks)
logger.info(`Saving image ${outputPath}`)
fs.outputFile(outputPath, buffer, done)
})
}
const generateDiagrams = (rootDirectory, diagramPath, done) => {
const generators = config.formats.map((format) => {
return _.curry(generateDiagram)(rootDirectory, diagramPath, format)
})
async.parallel(generators, done)
}
const generateDiagramsInFolder = (directoryData, done) => {
const diagramFiles = globby.sync([`./${directoryData.path}/${config.diagramDirectory}/*.puml`])
async.eachLimit(
diagramFiles,
3,
_.curry(generateDiagrams)(directoryData.path),
done
)
}
const generateAllDiagrams = (done) => {
async.eachSeries(
config.directories,
generateDiagramsInFolder,
done
)
}
module.exports = generateAllDiagrams