You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							176 lines
						
					
					
						
							4.1 KiB
						
					
					
				
			
		
		
	
	
							176 lines
						
					
					
						
							4.1 KiB
						
					
					
				#!/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 | 
						|
      ); | 
						|
  }); | 
						|
}
 | 
						|
 |