Skip to main content
Glama
glossary.cli.ts4.78 kB
import type { Command } from "commander"; import type { DomainCli, DomainMeta } from "../../shared/types/domain.types.js"; import { handleCliError } from "../../shared/utils/error.util.js"; import { Logger } from "../../shared/utils/logger.util.js"; import glossaryController from "./glossary.controller.js"; /** * Glossary CLI commands implementation. * Generated on 2025-07-10 for Glossary terms management for consistent translations. */ const logger = Logger.forContext("glossary.cli.ts"); /** * Register Glossary CLI commands * @param program The Commander program instance */ function register(program: Command) { const methodLogger = logger.forMethod("register"); methodLogger.debug("Registering Glossary CLI commands..."); // List Glossary Terms Command program .command("list-glossary-terms") .description( "Lists glossary terms in a Lokalise project with cursor pagination", ) .argument("<projectId>", "Project ID to list glossary terms for") .option( "-l, --limit <number>", "Number of terms to return (1-5000, default: 100)", (value) => { const parsed = Number.parseInt(value, 10); if (Number.isNaN(parsed) || parsed < 1 || parsed > 5000) { throw new Error("Limit must be a number between 1 and 5000"); } return parsed; }, ) .option( "-c, --cursor <cursor>", "Cursor for pagination (from previous response)", ) .action(async (projectId, options) => { const actionLogger = logger.forMethod("action:list-glossary-terms"); try { actionLogger.debug("CLI list-glossary-terms called", { projectId, limit: options.limit, cursor: options.cursor, }); // Build arguments const args = { projectId: projectId.trim(), limit: options.limit, cursor: options.cursor, }; // Call controller const result = await glossaryController.listGlossaryTerms(args); console.log(result.content); } catch (error) { handleCliError(error); } }); // Get Glossary Term Command program .command("get-glossary-term") .description( "Gets details of a specific glossary term including translations", ) .argument("<projectId>", "Project ID containing the glossary term") .argument("<termId>", "Glossary term ID to get details for") .action(async (projectId, termId) => { const actionLogger = logger.forMethod("action:get-glossary-term"); try { actionLogger.debug("CLI get-glossary-term called", { projectId, termId, }); // Parse term ID as number const parsedTermId = Number.parseInt(termId, 10); if (Number.isNaN(parsedTermId)) { throw new Error("Term ID must be a number"); } // Build arguments const args = { projectId: projectId.trim(), termId: parsedTermId, }; // Call controller const result = await glossaryController.getGlossaryTerm(args); console.log(result.content); } catch (error) { handleCliError(error); } }); // Create Glossary Terms Command program .command("create-glossary-term") .description( "Creates a new glossary term to maintain translation consistency", ) .argument("<projectId>", "Project ID to add glossary term to") .requiredOption("-t, --term <term>", "The glossary term text") .requiredOption( "-d, --description <description>", "Description of the term", ) .option("--case-sensitive", "Term matching is case-sensitive", false) .option("--not-translatable", "Term should not be translated", false) .option("--forbidden", "Term should be flagged as forbidden", false) .option("--tags <tags>", "Comma-separated tags", (value) => value.split(",").map((t) => t.trim()), ) .action(async (projectId, options) => { const actionLogger = logger.forMethod("action:create-glossary-term"); try { actionLogger.debug("CLI create-glossary-term called", { projectId, options, }); // Build arguments const args = { projectId: projectId.trim(), terms: [ { term: options.term, description: options.description, caseSensitive: options.caseSensitive, translatable: !options.notTranslatable, forbidden: options.forbidden, tags: options.tags, }, ], }; // Call controller const result = await glossaryController.createGlossaryTerms(args); console.log(result.content); } catch (error) { handleCliError(error); } }); methodLogger.debug("Glossary CLI commands registered successfully"); } // Export the domain CLI implementation const glossaryCli: DomainCli = { register, getMeta(): DomainMeta { return { name: "glossary", description: "Glossary CLI commands", version: "1.0.0", cliCommandsCount: 3, }; }, }; export default glossaryCli;

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/AbdallahAHO/lokalise-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server