123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- /**
- * @author Toru Nagashima
- * @copyright 2016 Toru Nagashima. All rights reserved.
- * See LICENSE file in root directory for full license.
- */
- /* eslint no-console:0, no-process-exit:0, no-process-env:0 */
- "use strict";
- var _create = require("babel-runtime/core-js/object/create");
- var _create2 = _interopRequireDefault(_create);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var _require = require("path");
- var resolvePath = _require.resolve;
- var _require2 = require("child_process");
- var spawn = _require2.spawn;
- var _require3 = require("resolve");
- var resolveModule = _require3.sync;
- var _require4 = require("shell-quote");
- var parseShellQuote = _require4.parse;
- var duplexer = require("duplexer");
- var Cpx = require("../lib/cpx");
- module.exports = function main(source, outDir, args) {
- //--------------------------------------------------------------------------
- // Resolve Command.
- var commands = [].concat(args.command).filter(Boolean).map(function (command) {
- if (typeof command !== "string") {
- console.error("Invalid --command option");
- process.exit(1);
- }
- return function (file) {
- var env = (0, _create2.default)(process.env, { FILE: { value: file } });
- var parts = parseShellQuote(command, env);
- var child = spawn(parts[0], parts.slice(1), { env: env });
- var outer = duplexer(child.stdin, child.stdout);
- child.on("exit", function (code) {
- if (code !== 0) {
- var error = new Error("non-zero exit code in command: " + command);
- outer.emit("error", error);
- }
- });
- child.stderr.pipe(process.stderr);
- return outer;
- };
- });
- //--------------------------------------------------------------------------
- // Resolve Transforms.
- var ABS_OR_REL = /^[.\/]/;
- var transforms = [].concat(args.transform).filter(Boolean).map(function (arg) {
- // eslint-disable-line array-callback-return,consistent-return
- if (typeof arg === "string") {
- return { name: arg, argv: null };
- }
- if (typeof arg._[0] === "string") {
- return { name: arg._.shift(), argv: arg };
- }
- console.error("Invalid --transform option");
- process.exit(1);
- }).map(function (item) {
- var createStream = ABS_OR_REL.test(item.name) ? require(resolvePath(item.name)) : require(resolveModule(item.name, { basedir: process.cwd() }));
- return function (file) {
- return createStream(file, item.argv);
- };
- });
- //--------------------------------------------------------------------------
- // Merge commands and transforms as same as order of process.argv.
- var C_OR_COMMAND = /^(?:-c|--command)$/;
- var T_OR_TRANSFORM = /^(?:-t|--transform)$/;
- var mergedTransformFactories = process.argv.map(function (part) {
- if (C_OR_COMMAND.test(part)) {
- return commands.shift();
- }
- if (T_OR_TRANSFORM.test(part)) {
- return transforms.shift();
- }
- return null;
- }).filter(Boolean);
- //--------------------------------------------------------------------------
- // Main.
- var cpx = new Cpx(source, outDir, {
- transform: mergedTransformFactories,
- dereference: args.dereference,
- includeEmptyDirs: args.includeEmptyDirs,
- initialCopy: args.initial,
- preserve: args.preserve,
- update: args.update
- });
- if (args.verbose) {
- cpx.on("copy", function (event) {
- console.log("Copied: " + event.srcPath + " --> " + event.dstPath);
- });
- cpx.on("remove", function (event) {
- console.log("Removed: " + event.path);
- });
- }
- if (args.clean) {
- if (args.verbose) {
- console.log();
- console.log("Clean: " + cpx.src2dst(cpx.source));
- console.log();
- }
- try {
- cpx.cleanSync();
- } catch (err) {
- console.error("Failed to clean: " + err.message + ".");
- process.exit(1);
- }
- if (args.verbose) {
- console.log();
- console.log("Copy: " + source + " --> " + outDir);
- console.log();
- }
- }
- if (args.watch) {
- if (args.verbose) {
- cpx.on("watch-ready", function () {
- console.log();
- console.log("Be watching in " + cpx.base);
- console.log();
- });
- }
- cpx.on("watch-error", function (err) {
- console.error(err.message);
- });
- // In order to kill me by test harness on Windows.
- process.stdin.setEncoding("utf8");
- process.stdin.on("data", function (chunk) {
- if (chunk === "KILL") {
- process.exit(0);
- }
- });
- cpx.watch();
- } else {
- cpx.copy(function (err) {
- if (err) {
- console.error("Failed to copy: " + err.message + ".");
- process.exit(1);
- }
- });
- }
- };
|