UNPKG

@tableau/taco-toolkit

Version:
145 lines 11.6 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createCommand = exports.program = void 0; var process_1 = __importDefault(require("process")); var commander_1 = require("commander"); var child_process_1 = require("child_process"); var command_1 = require("./command"); var command_2 = require("./utils/command"); var spinner_1 = __importDefault(require("./utils/spinner")); var connector_1 = require("./utils/connector"); var pack_1 = require("./pack/pack"); var validation_1 = require("./pack/validation"); var prepare_1 = require("./pack/prepare"); var console_1 = require("./utils/console"); exports.program = createCommand(); function createCommand() { return (0, command_1.createCommand)('pack', 'pack up current connector into .taco file; run this command in the root directory of your connector', { setup: setup, handler: handler, withCommonOptions: true, loggingOptions: { verbose: true, }, }); } exports.createCommand = createCommand; function setup(program) { return program .option('-p, --prepare', 'run prepare phase to generate taco xml files') .option('-va, --validate', 'run validate phase to validate generated connector artifacts and taco xml files') .option('-sp, --skip-prepare', 'skip prepare phase for packing') .option('-d, --dest <path>', 'change the destination for packaged .taco file') .option('-e, --extra-files <files...>', 'add additional files into the packaged .taco file; use double quote if file name contains a space') .option('-f, --force', 'force to pack taco connector without checking file existence', false) .option('--name-only', 'use only the connector name as the packed taco file name', false) .addOption( // only use it for DCF connector name mapping for now, so hide it from the help doc new commander_1.Option('--taco-name <name>', 'customize taco file name').hideHelp()); } function handler(program) { return __awaiter(this, void 0, void 0, function () { var opts, skipPrepare, prepare, validate, dest, extraFiles, verbose, tacoName, force, nameOnly, currentPath, state; return __generator(this, function (_a) { switch (_a.label) { case 0: opts = program.optsWithGlobals(); skipPrepare = opts.skipPrepare, prepare = opts.prepare, validate = opts.validate, dest = opts.dest, extraFiles = opts.extraFiles, verbose = opts.verbose, tacoName = opts.tacoName; force = opts.force; nameOnly = opts.nameOnly; currentPath = process_1.default.cwd(); if (!(0, connector_1.isTacoRootPath)(currentPath)) { (0, connector_1.outputLocationErrorAndExit)(currentPath); } state = { spinner: new spinner_1.default(verbose), verbose: verbose, }; if (!(!validate && !skipPrepare)) return [3 /*break*/, 2]; return [4 /*yield*/, (0, prepare_1.preparePack)(currentPath, force, state)]; case 1: _a.sent(); _a.label = 2; case 2: if (prepare) { return [2 /*return*/]; } // validate (0, validation_1.validateTaco)(currentPath, state); if (validate) { return [2 /*return*/]; } // pack if (dest !== undefined) { (0, command_2.exitIfNonExistPath)(dest, "Invalid destination path (--dest), ".concat(dest, " does not exist.")); } // validate extraFiles if (extraFiles !== undefined) { // assuming commander.js should always provide a string array (0, command_2.exitIfAnyMissingPath)(extraFiles, 'Some extra files are missing (--extra-files)'); } if (!isJarInstalled()) { (0, console_1.consoleError)('Unable to find JDK. Please download and install JDK and add it to the PATH environment variable.'); process_1.default.exit(1); } return [4 /*yield*/, (0, pack_1.packTaco)({ tacoRootPath: currentPath, destPath: dest !== null && dest !== void 0 ? dest : process_1.default.cwd(), extraFiles: extraFiles !== null && extraFiles !== void 0 ? extraFiles : [], force: force, nameOnly: nameOnly, tacoName: tacoName, }, state)]; case 3: _a.sent(); return [2 /*return*/]; } }); }); } function isJarInstalled() { var output = (0, child_process_1.spawnSync)('jar').output; // Seems spawnSync doesn't have a consistent behavior for error case across platforms or versions. // It is safer to use String constructor for converson. return String(output).includes('Usage: jar'); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGkvdGFjby1jb21tYW5kcy9wYWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE2QjtBQUM3Qix1Q0FBMkM7QUFDM0MsK0NBQXlDO0FBRXpDLHFDQUFpRTtBQUNqRSwyQ0FBMEY7QUFDMUYsNERBQXFDO0FBQ3JDLCtDQUE4RTtBQUM5RSxvQ0FBc0M7QUFDdEMsZ0RBQWdEO0FBQ2hELDBDQUE0QztBQUM1QywyQ0FBOEM7QUFFakMsUUFBQSxPQUFPLEdBQUcsYUFBYSxFQUFFLENBQUE7QUFFdEMsU0FBZ0IsYUFBYTtJQUMzQixPQUFPLElBQUEsdUJBQW9CLEVBQ3pCLE1BQU0sRUFDTixxR0FBcUcsRUFDckc7UUFDRSxLQUFLLE9BQUE7UUFDTCxPQUFPLFNBQUE7UUFDUCxpQkFBaUIsRUFBRSxJQUFJO1FBQ3ZCLGNBQWMsRUFBRTtZQUNkLE9BQU8sRUFBRSxJQUFJO1NBQ2Q7S0FDRixDQUNGLENBQUE7QUFDSCxDQUFDO0FBYkQsc0NBYUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxPQUFnQjtJQUM3QixPQUFPLE9BQU87U0FDWCxNQUFNLENBQUMsZUFBZSxFQUFFLDhDQUE4QyxDQUFDO1NBQ3ZFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxpRkFBaUYsQ0FBQztTQUM1RyxNQUFNLENBQUMscUJBQXFCLEVBQUUsZ0NBQWdDLENBQUM7U0FDL0QsTUFBTSxDQUFDLG1CQUFtQixFQUFFLGdEQUFnRCxDQUFDO1NBQzdFLE1BQU0sQ0FDTCw4QkFBOEIsRUFDOUIsbUdBQW1HLENBQ3BHO1NBQ0EsTUFBTSxDQUFDLGFBQWEsRUFBRSw4REFBOEQsRUFBRSxLQUFLLENBQUM7U0FDNUYsTUFBTSxDQUFDLGFBQWEsRUFBRSwwREFBMEQsRUFBRSxLQUFLLENBQUM7U0FDeEYsU0FBUztJQUNSLG1GQUFtRjtJ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