UNPKG

charlike

Version:

Small, fast, simple and streaming project scaffolder for myself, but not only. Supports hundreds of template engines through the @JSTransformers API or if you want custom `render` function passed through options

116 lines (106 loc) 2.91 kB
#!/usr/bin/env node 'use strict'; var conventionalChangelogWriter = require('./'); var forEach = require('lodash').forEach; var fs = require('fs'); var meow = require('meow'); var path = require('path'); var split = require('split'); var cli = meow({ help: [ 'Usage', ' conventional-changelog-writer <path> [<path> ...]', ' cat <path> | conventional-changelog-writer', '', 'Example', ' conventional-changelog-writer commits.ldjson', ' cat commits.ldjson | conventional-changelog-writer', '', 'Options', ' -c, --context A filepath of a json that is used to define template variables', ' -o, --options A filepath of a javascript object that is used to define options' ] }, { alias: { c: 'context', o: 'options' } }); var filePaths = []; var flags = cli.flags; forEach(cli.input, function(input) { filePaths.push(input); }); var length = filePaths.length; var templateContext; var contextPath = flags.context; if (contextPath) { try { templateContext = require(path.resolve(process.cwd(), contextPath)); } catch (err) { console.error('Failed to get context from file ' + contextPath + '\n' + err); process.exit(1); } } var options; var optionsPath = flags.options; if (optionsPath) { try { options = require(path.resolve(process.cwd(), optionsPath)); } catch (err) { console.error('Failed to get options from file ' + optionsPath + '\n' + err); process.exit(1); } } try { var stream = conventionalChangelogWriter(templateContext, options); } catch (err) { console.error(err.toString()); process.exit(1); } function processFile(fileIndex) { var filePath = filePaths[fileIndex]; fs.createReadStream(filePath) .on('error', function(err) { console.warn('Failed to read file ' + filePath + '\n' + err); if (++fileIndex < length) { processFile(fileIndex); } }) .pipe(split(JSON.parse)) .on('error', function(err) { console.warn('Failed to split commits in file ' + filePath + '\n' + err); }) .pipe(stream) .on('error', function(err) { console.warn('Failed to process file ' + filePath + '\n' + err); if (++fileIndex < length) { processFile(fileIndex); } }) .on('end', function() { if (++fileIndex < length) { processFile(fileIndex); } }) .pipe(process.stdout); } if (!process.stdin.isTTY) { process.stdin .pipe(split(JSON.parse)) .on('error', function(err) { console.error('Failed to split commits\n' + err); process.exit(1); }) .pipe(stream) .on('error', function(err) { console.error('Failed to process file\n' + err); process.exit(1); }) .pipe(process.stdout); } else if (length === 0) { console.error('You must specify at least one line delimited json file'); process.exit(1); } else { processFile(0); }