-
Notifications
You must be signed in to change notification settings - Fork 2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Switch cmd parser to latest minimist
- Loading branch information
1 parent
08e9a11
commit c2f1e62
Showing
5 changed files
with
365 additions
and
401 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
module.exports = { | ||
rules: { | ||
'no-console': 0, | ||
'no-var': 0 | ||
} | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,124 +1,176 @@ | ||
#!/usr/bin/env node | ||
|
||
const yargs = require('yargs') | ||
.usage('Precompile handlebar templates.\nUsage: $0 [template|directory]...') | ||
.option('f', { | ||
type: 'string', | ||
description: 'Output File', | ||
alias: 'output' | ||
}) | ||
.option('map', { | ||
type: 'string', | ||
description: 'Source Map File' | ||
}) | ||
.option('a', { | ||
type: 'boolean', | ||
description: 'Exports amd style (require.js)', | ||
alias: 'amd' | ||
}) | ||
.option('c', { | ||
type: 'string', | ||
description: 'Exports CommonJS style, path to Handlebars module', | ||
alias: 'commonjs', | ||
default: null | ||
}) | ||
.option('h', { | ||
type: 'string', | ||
description: 'Path to handlebar.js (only valid for amd-style)', | ||
alias: 'handlebarPath', | ||
default: '' | ||
}) | ||
.option('k', { | ||
type: 'string', | ||
description: 'Known helpers', | ||
alias: 'known' | ||
}) | ||
.option('o', { | ||
type: 'boolean', | ||
description: 'Known helpers only', | ||
alias: 'knownOnly' | ||
}) | ||
.option('m', { | ||
type: 'boolean', | ||
description: 'Minimize output', | ||
alias: 'min' | ||
}) | ||
.option('n', { | ||
type: 'string', | ||
description: 'Template namespace', | ||
alias: 'namespace', | ||
default: 'Handlebars.templates' | ||
}) | ||
.option('s', { | ||
type: 'boolean', | ||
description: 'Output template function only.', | ||
alias: 'simple' | ||
}) | ||
.option('N', { | ||
type: 'string', | ||
description: | ||
'Name of passed string templates. Optional if running in a simple mode. Required when operating on multiple templates.', | ||
alias: 'name' | ||
}) | ||
.option('i', { | ||
type: 'string', | ||
description: | ||
'Generates a template from the passed CLI argument.\n"-" is treated as a special value and causes stdin to be read for the template value.', | ||
alias: 'string' | ||
}) | ||
.option('r', { | ||
type: 'string', | ||
description: | ||
'Template root. Base value that will be stripped from template names.', | ||
alias: 'root' | ||
}) | ||
.option('p', { | ||
type: 'boolean', | ||
description: 'Compiling a partial template', | ||
alias: 'partial' | ||
}) | ||
.option('d', { | ||
type: 'boolean', | ||
description: 'Include data when compiling', | ||
alias: 'data' | ||
}) | ||
.option('e', { | ||
type: 'string', | ||
description: 'Template extension.', | ||
alias: 'extension', | ||
default: 'handlebars' | ||
}) | ||
.option('b', { | ||
type: 'boolean', | ||
description: | ||
'Removes the BOM (Byte Order Mark) from the beginning of the templates.', | ||
alias: 'bom' | ||
}) | ||
.option('v', { | ||
type: 'boolean', | ||
description: 'Prints the current compiler version', | ||
alias: 'version' | ||
}) | ||
.option('help', { | ||
type: 'boolean', | ||
description: 'Outputs this message' | ||
}) | ||
.wrap(120); | ||
|
||
const argv = yargs.argv; | ||
var argv = parseArgs({ | ||
'f': { | ||
'type': 'string', | ||
'description': 'Output File', | ||
'alias': 'output' | ||
}, | ||
'map': { | ||
'type': 'string', | ||
'description': 'Source Map File' | ||
}, | ||
'a': { | ||
'type': 'boolean', | ||
'description': 'Exports amd style (require.js)', | ||
'alias': 'amd' | ||
}, | ||
'c': { | ||
'type': 'string', | ||
'description': 'Exports CommonJS style, path to Handlebars module', | ||
'alias': 'commonjs', | ||
'default': null | ||
}, | ||
'h': { | ||
'type': 'string', | ||
'description': 'Path to handlebar.js (only valid for amd-style)', | ||
'alias': 'handlebarPath', | ||
'default': '' | ||
}, | ||
'k': { | ||
'type': 'string', | ||
'description': 'Known helpers', | ||
'alias': 'known' | ||
}, | ||
'o': { | ||
'type': 'boolean', | ||
'description': 'Known helpers only', | ||
'alias': 'knownOnly' | ||
}, | ||
'm': { | ||
'type': 'boolean', | ||
'description': 'Minimize output', | ||
'alias': 'min' | ||
}, | ||
'n': { | ||
'type': 'string', | ||
'description': 'Template namespace', | ||
'alias': 'namespace', | ||
'default': 'Handlebars.templates' | ||
}, | ||
's': { | ||
'type': 'boolean', | ||
'description': 'Output template function only.', | ||
'alias': 'simple' | ||
}, | ||
'N': { | ||
'type': 'string', | ||
'description': 'Name of passed string templates. Optional if running in a simple mode. Required when operating on multiple templates.', | ||
'alias': 'name' | ||
}, | ||
'i': { | ||
'type': 'string', | ||
'description': 'Generates a template from the passed CLI argument.\n"-" is treated as a special value and causes stdin to be read for the template value.', | ||
'alias': 'string' | ||
}, | ||
'r': { | ||
'type': 'string', | ||
'description': 'Template root. Base value that will be stripped from template names.', | ||
'alias': 'root' | ||
}, | ||
'p': { | ||
'type': 'boolean', | ||
'description': 'Compiling a partial template', | ||
'alias': 'partial' | ||
}, | ||
'd': { | ||
'type': 'boolean', | ||
'description': 'Include data when compiling', | ||
'alias': 'data' | ||
}, | ||
'e': { | ||
'type': 'string', | ||
'description': 'Template extension.', | ||
'alias': 'extension', | ||
'default': 'handlebars' | ||
}, | ||
'b': { | ||
'type': 'boolean', | ||
'description': 'Removes the BOM (Byte Order Mark) from the beginning of the templates.', | ||
'alias': 'bom' | ||
}, | ||
'v': { | ||
'type': 'boolean', | ||
'description': 'Prints the current compiler version', | ||
'alias': 'version' | ||
}, | ||
'help': { | ||
'type': 'boolean', | ||
'description': 'Outputs this message' | ||
} | ||
}); | ||
|
||
argv.files = argv._; | ||
delete argv._; | ||
|
||
const Precompiler = require('../dist/cjs/precompiler'); | ||
var Precompiler = require('../dist/cjs/precompiler'); | ||
Precompiler.loadTemplates(argv, function(err, opts) { | ||
|
||
if (err) { | ||
throw err; | ||
} | ||
|
||
if (opts.help || (!opts.templates.length && !opts.version)) { | ||
yargs.showHelp(); | ||
printUsage(argv._spec, 120); | ||
} else { | ||
Precompiler.cli(opts); | ||
} | ||
}); | ||
|
||
function pad(n) { | ||
var str = ''; | ||
while (str.length < n) { | ||
str += ' '; | ||
} | ||
return str; | ||
} | ||
|
||
function parseArgs(spec) { | ||
var opts = { alias: {}, boolean: [], default: {}, string: [] }; | ||
|
||
Object.keys(spec).forEach(function (arg) { | ||
var opt = spec[arg]; | ||
opts[opt.type].push(arg); | ||
if ('alias' in opt) opts.alias[arg] = opt.alias; | ||
if ('default' in opt) opts.default[arg] = opt.default; | ||
}); | ||
|
||
var argv = require('minimist')(process.argv.slice(2), opts); | ||
argv._spec = spec; | ||
return argv; | ||
} | ||
|
||
function printUsage(spec, wrap) { | ||
var wordwrap = require('wordwrap'); | ||
|
||
console.log('Precompile handlebar templates.'); | ||
console.log('Usage: handlebars [template|directory]...'); | ||
|
||
var opts = []; | ||
var width = 0; | ||
Object.keys(spec).forEach(function (arg) { | ||
var opt = spec[arg]; | ||
|
||
var name = (arg.length === 1 ? '-' : '--') + arg; | ||
if ('alias' in opt) name += ', --' + opt.alias; | ||
|
||
var meta = '[' + opt.type + ']'; | ||
if ('default' in opt) meta += ' [default: ' + JSON.stringify(opt.default) + ']'; | ||
|
||
opts.push({ name: name, desc: opt.description, meta: meta }); | ||
if (name.length > width) width = name.length; | ||
}); | ||
|
||
console.log('Options:'); | ||
opts.forEach(function (opt) { | ||
var desc = wordwrap(width + 4, wrap + 1)(opt.desc); | ||
|
||
console.log(' %s%s%s%s%s', | ||
opt.name, | ||
pad(width - opt.name.length + 2), | ||
desc.slice(width + 4), | ||
pad(wrap - opt.meta.length - desc.split(/\n/).pop().length), | ||
opt.meta | ||
); | ||
}); | ||
} |
Oops, something went wrong.