command.recipe.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. "use strict";
  2. var logger = require("../logger").logger;
  3. /**
  4. * $ browser-sync recipe <name> <options>
  5. *
  6. * This command will copy a recipe into either the current directory
  7. * or one given with the --output flag
  8. *
  9. * @param opts
  10. * @returns {Function}
  11. */
  12. module.exports = function (opts) {
  13. var path = require("path");
  14. var fs = require("fs-extra");
  15. var input = opts.cli.input.slice(1);
  16. var resolved = require.resolve("bs-recipes");
  17. var dir = path.dirname(resolved);
  18. var logRecipes = function () {
  19. var dirs = fs.readdirSync(path.join(dir, "recipes"));
  20. logger.info("Install one of the following with {cyan:browser-sync recipe <name>\n");
  21. dirs.forEach(function (name) {
  22. console.log(" " + name);
  23. });
  24. };
  25. if (!input.length) {
  26. logger.info("No recipe name provided!");
  27. logRecipes();
  28. return opts.cb();
  29. }
  30. if (opts.cli.input[1] === "ls") {
  31. logRecipes();
  32. return opts.cb();
  33. }
  34. input = input[0];
  35. var flags = opts.cli.flags;
  36. var output = flags.output
  37. ? path.resolve(flags.output)
  38. : path.join(process.cwd(), input);
  39. var targetDir = path.join(dir, "recipes", input);
  40. if (fs.existsSync(output)) {
  41. return opts.cb(new Error("Target folder exists remove it first and then try again"));
  42. }
  43. if (fs.existsSync(targetDir)) {
  44. fs.copy(targetDir, output, function (err) {
  45. if (err) {
  46. opts.cb(err);
  47. }
  48. else {
  49. logger.info("Recipe copied into {cyan:%s}", output);
  50. logger.info("Next, inside that folder, run {cyan:npm i && npm start}");
  51. opts.cb(null);
  52. }
  53. });
  54. }
  55. else {
  56. logger.info("Recipe {cyan:%s} not found. The following are available though", input);
  57. logRecipes();
  58. opts.cb();
  59. }
  60. };
  61. //# sourceMappingURL=command.recipe.js.map