123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- #!/usr/bin/env node
- 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._;
- var Precompiler = require('../dist/cjs/precompiler');
- Precompiler.loadTemplates(argv, function(err, opts) {
- if (err) {
- throw err;
- }
- if (opts.help || (!opts.templates.length && !opts.version)) {
- 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
- );
- });
- }
|