Skip to main content
Glama
new.ts2.44 kB
import { Command } from "commander"; import os from "os"; import path from "path"; import { cloneRepository } from "../utils/cloneRepository"; import { copyExample } from "../utils/copyExample"; import { getExampleDirectories } from "../utils/getExampleDirectories"; import { promptForExample } from "../utils/promptForExample"; import type { NewOptions } from "../utils/types"; const REPO_URL = "https://github.com/zeta-chain/example-contracts.git"; const TEMP_DIR = path.join(os.tmpdir(), "example-contracts"); const EXAMPLES_DIR = path.join(TEMP_DIR, "examples"); const BRANCH_NAME = "main"; const main = async (options: NewOptions): Promise<void> => { const isVerbose: boolean = options.verbose || false; const outputDir: string = options.output || process.cwd(); const exampleName: string | undefined = options.project; try { await cloneRepository(REPO_URL, TEMP_DIR, BRANCH_NAME, isVerbose); const directories = await getExampleDirectories(EXAMPLES_DIR); let chosenExample: string; if (exampleName) { const matchingExample = directories.find( (dir) => dir.name === exampleName, ); if (!matchingExample) { console.error(`Error: Example "${exampleName}" not found.`); console.error( "Available examples:", directories .map((dir) => `${dir.name} - ${dir.description}`) .join("\n"), ); process.exit(1); } chosenExample = matchingExample.name; } else { chosenExample = await promptForExample(directories); } await copyExample(chosenExample, EXAMPLES_DIR, outputDir, isVerbose); } catch (error: unknown) { if (isVerbose) { if (error instanceof Error) { console.error("An error occurred:", error.message); console.error(error.stack); } else { console.error("An unknown error occurred:", error); } } console.error("\nTo get the examples, please run:\n"); console.error("git clone https://github.com/zeta-chain/example-contracts"); process.exit(1); } }; export const newCommand = new Command("new") .description("Create a new universal contract project.") .option("--verbose", "Enable verbose logging") .option("--output <directory>", "Specify custom output directory or name") .option( "--project <projectName>", "Specify the example project to use and skip the prompt", ) .action(main);

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/ExpertVagabond/universal-blockchain'

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