UNPKG

@launchql/cli

Version:
169 lines (163 loc) 6.26 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("@launchql/core"); const logger_1 = require("@launchql/logger"); const types_1 = require("@launchql/types"); const argv_1 = require("../utils/argv"); const module_utils_1 = require("../utils/module-utils"); const path = __importStar(require("path")); const log = new logger_1.Logger('tag'); const tagUsageText = ` LaunchQL Tag Command: lql tag [tag_name] [OPTIONS] Add tags to changes for versioning. Arguments: tag_name Name of the tag to create Options: --help, -h Show this help message --package <name> Target specific package --changeName <name> Target specific change (default: latest) --comment <text> Optional tag comment --cwd <directory> Working directory (default: current directory) Examples: lql tag v1.0.0 Add tag to latest change lql tag v1.0.0 --comment "Initial release" Add tag with comment lql tag v1.1.0 --package mypackage --changeName my-change Tag specific change in package `; exports.default = async (argv, prompter, _options) => { // Show usage if explicitly requested if (argv.help || argv.h) { console.log(tagUsageText); process.exit(0); } const { first: tagName, newArgv } = (0, argv_1.extractFirst)(argv); const cwdResult = await prompter.prompt(newArgv, [ { type: 'text', name: 'cwd', message: 'Working directory', required: false, default: process.cwd(), useDefault: true } ]); const cwd = cwdResult.cwd || process.cwd(); const pkg = new core_1.LaunchQLPackage(cwd); let packageName; if (argv.package) { packageName = argv.package; log.info(`Using specified package: ${packageName}`); } else if (pkg.isInModule()) { packageName = pkg.getModuleName(); log.info(`Using current module: ${packageName}`); } else if (pkg.isInWorkspace()) { packageName = await (0, module_utils_1.selectPackage)(newArgv, prompter, cwd, 'add tag to', log); if (!packageName) { throw new Error('No package selected. Cannot add tag without specifying a target package.'); } } else { throw new Error('This command must be run inside a LaunchQL workspace or module.'); } const questions = []; if (!tagName) { questions.push({ type: 'text', name: 'tagName', message: 'Tag name', required: true, validate: (value) => { if (!value || value.trim().length === 0) { return false; } if (value.includes('/')) { return false; } if (value.includes('@')) { return false; } return true; } }); } questions.push({ type: 'text', name: 'changeName', message: 'Target change name (leave empty for latest change)', required: false }, { type: 'text', name: 'comment', message: 'Tag comment (optional)', required: false }); const answers = await prompter.prompt(newArgv, questions); const finalTagName = tagName || answers.tagName; const changeName = answers.changeName; const comment = answers.comment; try { if (argv.package || !pkg.isInModule()) { const moduleMap = pkg.getModuleMap(); const module = moduleMap[packageName]; if (!module) { throw types_1.errors.MODULE_NOT_FOUND({ name: packageName }); } const workspacePath = pkg.getWorkspacePath(); const absoluteModulePath = path.resolve(workspacePath, module.path); const originalCwd = process.cwd(); process.chdir(absoluteModulePath); try { const modulePkg = new core_1.LaunchQLPackage(absoluteModulePath); modulePkg.addTag(finalTagName.trim(), changeName?.trim() || undefined, comment?.trim() || undefined); log.info(`Successfully added tag '${finalTagName}' to ${changeName || 'latest change'} in package '${packageName}'`); } finally { process.chdir(originalCwd); } } else { pkg.addTag(finalTagName.trim(), changeName?.trim() || undefined, comment?.trim() || undefined); log.info(`Successfully added tag '${finalTagName}' to ${changeName || 'latest change'}`); } } catch (error) { log.error(`Failed to add tag: ${error instanceof Error ? error.message : String(error)}`); throw error; } return newArgv; };