@jesterxl/hm-doc
Version:
Generates simple markdown documentation from Hindley Milner and optional block comments in JavaScript code.
84 lines (74 loc) • 2.69 kB
JavaScript
const { parse, getMarkdown, writeMarkdownFile } = require('../index')
const { isString, every } = require('lodash/fp')
const program = require('commander')
program
.version(require('../package.json').version, '-v, --version')
.description('Writes Hindle-Milner parsed documentation and markdown.')
.option('-f, --files [demFiles]', 'File glob, list of files you want to load and parse comments out of [demFiles]. Example: ./*.js')
.option('-i, --ignore [demFiles]', 'File glob to ignore, list of files/folders you want to ignore and not include in documentation. Example: ./*.js')
.option('-t, --template [handlebarsTemplate]', 'Handlebars template file [handlebarsTemplate]. Example: ./README.hbs')
.option('-o, --output [outputFile]', '(Optional) Markdown file you would like to output to.')
.parse(process.argv)
const hasFiles = program =>
isString(program.files)
&& program.files.length > 0
const hasIgnore = program =>
isString(program.ignore)
&& program.ignore.length > 0
const getIgnoreOrDefault = program =>
hasIgnore(program)
? program.ignore
: ''
const hasTemplate = program =>
isString(program.template)
&& program.template.length > 0
const hasOutput = program =>
isString(program.output)
&& program.output.length > 0
const hasJustFiles = program =>
hasFiles(program)
&& hasTemplate(program) === false
&& hasOutput(program) === false
const hasJustFilesAndTemplate = program =>
hasFiles(program)
&& hasTemplate(program)
&& hasOutput(program) === false
const hasEverything = program =>
every(
predicate => predicate(program),
[
hasFiles,
hasTemplate,
hasOutput
]
)
// console.log("program.files:", program.files)
// console.log("program.template:", program.template)
// console.log("program.output:", program.output)
// console.log(hasEverything(program))
// console.log(hasJustFilesAndTemplate(program))
// console.log(hasJustFiles(program))
if(hasEverything(program)) {
writeMarkdownFile
(program.files)
(program.template)
(program.output)
.then(console.log)
.catch(console.log)
} else if(hasJustFilesAndTemplate(program)) {
getMarkdown
(program.files)
({ignore: getIgnoreOrDefault(program)})
(program.template)
.then(console.log)
.catch(console.log)
} else if(hasJustFiles(program)) {
parse
(program.files)
({ignore: getIgnoreOrDefault(program)})
.then(console.log)
.catch(console.log)
} else {
console.log("hm-doc requires at least files (-f, or --files). Type hm-docs --help for more information.")
}