No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

95 líneas
2.0KB

  1. #!/usr/bin/env node
  2. var fs = require('fs');
  3. var Mustache = require('..');
  4. var pkg = require('../package');
  5. var viewArg = process.argv[2];
  6. var templateArg = process.argv[3];
  7. if (hasVersionArg()) {
  8. return console.log(pkg.version);
  9. }
  10. if (!templateArg || !viewArg) {
  11. console.error('Syntax: mustache <view> <template>');
  12. process.exit(1);
  13. }
  14. run(readView, readTemplate, render, toStdout);
  15. /**
  16. * Runs a list of functions as a waterfall.
  17. * Functions are runned one after the other in order, providing each
  18. * function the returned values of all the previously invoked functions.
  19. * Each function is expected to exit the process if an error occurs.
  20. */
  21. function run(/*args*/) {
  22. var values = [];
  23. var fns = Array.prototype.slice.call(arguments);
  24. function invokeNextFn(val) {
  25. values.unshift(val);
  26. if (fns.length == 0) return;
  27. invoke(fns.shift());
  28. }
  29. function invoke(fn) {
  30. fn.apply(null, [invokeNextFn].concat(values));
  31. }
  32. invoke(fns.shift());
  33. }
  34. function readView(cb) {
  35. var view = isStdin(viewArg) ? process.openStdin() : fs.createReadStream(viewArg);
  36. streamToStr(view, function(str) {
  37. cb(JSON.parse(str));
  38. });
  39. }
  40. function readTemplate(cb) {
  41. var template = fs.createReadStream(templateArg);
  42. streamToStr(template, cb);
  43. }
  44. function render(cb, templateStr, jsonView) {
  45. cb(Mustache.render(templateStr, jsonView));
  46. }
  47. function toStdout(cb, str) {
  48. cb(process.stdout.write(str));
  49. }
  50. function streamToStr(stream, cb) {
  51. var data = '';
  52. stream.on('data', function(chunk) {
  53. data += chunk;
  54. }).once('end', function() {
  55. cb(data.toString());
  56. }).on('error', function(err) {
  57. if (wasNotFound(err)) {
  58. console.error('Could not find file:', err.path);
  59. } else {
  60. console.error('Error while reading file:', err.message);
  61. }
  62. process.exit(1);
  63. });
  64. }
  65. function isStdin(viewArg) {
  66. return viewArg === '-';
  67. }
  68. function wasNotFound(err) {
  69. return err.code && err.code === 'ENOENT';
  70. }
  71. function hasVersionArg() {
  72. return ['--version', '-v'].some(function(opt) {
  73. return process.argv.indexOf(opt) > -1;
  74. });
  75. }