cliCommand.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. var PLATFORM = {
  2. WINDOWS: 'WINDOWS',
  3. UNIX: 'UNIX'
  4. };
  5. function getPlatform() {
  6. switch (process.platform) {
  7. case 'win32':
  8. case 'win64':
  9. return PLATFORM.WINDOWS;
  10. default:
  11. return PLATFORM.UNIX;
  12. }
  13. }
  14. function getCdCommand() {
  15. switch (this.platform) {
  16. case PLATFORM.WINDOWS:
  17. return function cdToPath(folder) {
  18. return 'cd \"' + folder + "\"";
  19. };
  20. case PLATFORM.UNIX:
  21. return function cdToPath(folder) {
  22. return "cd '" + folder + "'";
  23. };
  24. }
  25. }
  26. function getCleanseCommand(setEnvVar) {
  27. switch (this.platform) {
  28. case PLATFORM.WINDOWS:
  29. return function (cmd) {
  30. var envCmd = setEnvVar();
  31. if (!envCmd.length)
  32. return cmd;
  33. return [envCmd, cmd].join(' ');
  34. };
  35. case PLATFORM.UNIX:
  36. return function (cmd) {
  37. return [setEnvVar("LC_ALL", "en_US.UTF-8"), cmd].join(' ');
  38. };
  39. }
  40. }
  41. function getSetEnv() {
  42. switch (this.platform) {
  43. case PLATFORM.WINDOWS:
  44. return function (k, v) {
  45. if (!k)
  46. return "";
  47. return "SET ".concat([k,v].join('='));
  48. };
  49. case PLATFORM.UNIX:
  50. return function (k, v) {
  51. if (!k)
  52. return "";
  53. return [k,v].join('=');
  54. };
  55. }
  56. }
  57. function getConcatenator() {
  58. switch(this.platform) {
  59. case PLATFORM.WINDOWS:
  60. return function (cmds) {
  61. return cmds.join(" && ");
  62. };
  63. case PLATFORM.UNIX:
  64. return function (cmds) {
  65. var cmdText = '';
  66. for (var i = 0; i < cmds.length; i++) {
  67. cmdText += cmds[i];
  68. if (i < cmds.length - 1)
  69. cmdText += ";";
  70. }
  71. return cmdText;
  72. };
  73. }
  74. }
  75. var cliCommand = (function getExecutor() {
  76. this.platform = getPlatform();
  77. var cdTo = getCdCommand.call(this);
  78. var concat = getConcatenator.call(this);
  79. var setEnvVar = getSetEnv.call(this);
  80. var cleanse = getCleanseCommand.call(this, setEnvVar);
  81. return function (folder, cmd) {
  82. var cmds = [];
  83. cmds.push(cdTo(folder));
  84. cmds.push(cleanse(cmd));
  85. return concat(cmds);
  86. }
  87. })();
  88. module.exports = cliCommand;