Skip to main content
Glama

Activepieces MCP Server

by eldoonreval
generate-translation-file-for-piece.ts3.55 kB
import { writeFile } from 'node:fs/promises'; import chalk from 'chalk'; import { Command } from 'commander'; import { findPiece } from '../utils/piece-utils'; import { makeFolderRecursive } from '../utils/files'; import { join } from 'node:path'; import { exec } from '../utils/exec'; // eslint-disable-next-line @nx/enforce-module-boundaries import keys from '../../../../pieces/community/framework/translation-keys.json'; const findPieceInModule= async (pieceOutputFile: string) => { const module = await import(pieceOutputFile); const exports = Object.values(module); for (const e of exports) { if (e !== null && e !== undefined && e.constructor.name === 'Piece') { return e } } throw new Error(`Piece not found in module, please check the piece output file ${pieceOutputFile}`); } const installDependencies = async (pieceFolder: string) => { console.log(chalk.blue(`Installing dependencies ${pieceFolder}`)) await exec(`npm install`, {cwd: pieceFolder,}) console.log(chalk.green(`Dependencies installed ${pieceFolder}`)) } function getPropertyValue(object: Record<string, unknown>, path: string): unknown { const parsedKeys = path.split('.'); if (parsedKeys[0] === '*') { return Object.values(object).map(item => getPropertyValue(item as Record<string, unknown>, parsedKeys.slice(1).join('.'))).filter(Boolean).flat() } const nextObject = object[parsedKeys[0]] as Record<string, unknown>; if (nextObject && parsedKeys.length > 1) { return getPropertyValue(nextObject, parsedKeys.slice(1).join('.')); } return nextObject; } const generateTranslationFileFromPiece = (piece: Record<string, unknown>) => { const translation: Record<string, string> = {} try { keys.forEach(key => { const value = getPropertyValue(piece, key) if (value) { if (typeof value === 'string') { translation[value] = value } else if (Array.isArray(value)) { value.forEach(item => { translation[item] = item }) } } }) } catch (err) { console.error(`error generating translation file for piece ${piece.name}:`, err) } return translation } const generateTranslationFile = async (pieceName: string) => { const pieceRoot = await findPiece(pieceName) const outputFolder = pieceRoot.replace('packages/', 'dist/packages/') try{ await installDependencies(outputFolder) const pieceFromModule = await findPieceInModule(outputFolder); const i18n = generateTranslationFileFromPiece({actions: (pieceFromModule as any)._actions, triggers: (pieceFromModule as any)._triggers, description: (pieceFromModule as any).description, displayName: (pieceFromModule as any).displayName, auth: (pieceFromModule as any).auth}); const i18nFolder = join(pieceRoot, 'src', 'i18n') await makeFolderRecursive(i18nFolder); await writeFile(join(i18nFolder, 'translation.json'), JSON.stringify(i18n, null, 2)); console.log(chalk.yellow('✨'), `Translation file for piece created in ${i18nFolder}`); } catch (error) { console.error(chalk.red('❌'), `Error generating translation file for piece ${pieceName}, make sure you built the piece`,error); } }; export const generateTranslationFileForPieceCommand = new Command('generate-translation-file') .description('Generate i18n for a piece') .argument('<pieceName>', 'The name of the piece to generate i18n for') .action(async (pieceName: string) => { await generateTranslationFile(pieceName); });

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/eldoonreval/activepieces'

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