"use strict"; var logger = require("../logger").logger; /** * $ browser-sync recipe * * This command will copy a recipe into either the current directory * or one given with the --output flag * * @param opts * @returns {Function} */ module.exports = function (opts) { var path = require("path"); var fs = require("fs-extra"); var input = opts.cli.input.slice(1); var resolved = require.resolve("bs-recipes"); var dir = path.dirname(resolved); var logRecipes = function () { var dirs = fs.readdirSync(path.join(dir, "recipes")); logger.info("Install one of the following with {cyan:browser-sync recipe \n"); dirs.forEach(function (name) { console.log(" " + name); }); }; if (!input.length) { logger.info("No recipe name provided!"); logRecipes(); return opts.cb(); } if (opts.cli.input[1] === "ls") { logRecipes(); return opts.cb(); } input = input[0]; var flags = opts.cli.flags; var output = flags.output ? path.resolve(flags.output) : path.join(process.cwd(), input); var targetDir = path.join(dir, "recipes", input); if (fs.existsSync(output)) { return opts.cb(new Error("Target folder exists remove it first and then try again")); } if (fs.existsSync(targetDir)) { fs.copy(targetDir, output, function (err) { if (err) { opts.cb(err); } else { logger.info("Recipe copied into {cyan:%s}", output); logger.info("Next, inside that folder, run {cyan:npm i && npm start}"); opts.cb(null); } }); } else { logger.info("Recipe {cyan:%s} not found. The following are available though", input); logRecipes(); opts.cb(); } };