Skip to main content
Glama
nrwl

Nx MCP Server

Official
by nrwl
init-generate-ui-webview.ts2.95 kB
import { getOrSelectGenerator } from '@nx-console/vscode-nx-cli-quickpicks'; import { getGeneratorContextV2, getGenerators, } from '@nx-console/vscode-nx-workspace'; import { ExtensionContext, Uri, window } from 'vscode'; import { registerGenerateCommands } from './generate-commands'; import { GenerateUiWebview } from './generate-ui-webview'; import yargs = require('yargs'); import { Option } from '@nx-console/shared-schema'; import { FormValues } from '@nx-console/shared-generate-ui-types'; let generateUIWebview: GenerateUiWebview; export async function initGenerateUiWebview(context: ExtensionContext) { generateUIWebview = new GenerateUiWebview(context); registerGenerateCommands(context); } export async function openGenerateUi(contextUri?: Uri, projectName?: string) { const generator = await getOrSelectGenerator(); if (!generator) { return; } let generatorContext = await getGeneratorContextV2(contextUri?.fsPath); if (projectName) { generatorContext = { ...generatorContext, project: projectName, }; } generateUIWebview.openGenerateUi({ ...generator, context: generatorContext, }); } export async function openGenerateUIPrefilled( parsedArgs: Awaited<ReturnType<typeof yargs.parse>>, openedFromAI = false, ) { const generatorName = parsedArgs['_'][1]; const generator = await getOrSelectGenerator(generatorName.toString()); if (!generator) { window.showErrorMessage(`Could not find generator ${generatorName}`); return; } const generatorContext = await getGeneratorContextV2(undefined); generateUIWebview.openGenerateUi( { ...generator, context: { ...generatorContext, prefillValues: { ...generatorContext.prefillValues, ...parseIntoPrefillValues(parsedArgs, generator.options), }, }, }, openedFromAI, ); } export async function updateGenerateUIValues(formValues: FormValues) { generateUIWebview.updateFormValues(formValues); } export function onGeneratorUiDispose(callback: () => void) { return generateUIWebview.onDispose(callback); } function parseIntoPrefillValues( yargsParseResult: Awaited<ReturnType<typeof yargs.parse>>, options: Option[], ): Record<string, string> { const positionals = yargsParseResult['_'].slice(2); const positionalFlags = options .filter((opt) => opt.positional !== undefined) .sort((a, b) => { return a.positional - b.positional; }); const prefillValues: Record<string, string> = {}; for (let i = 0; i < positionals.length; i++) { const positional = positionals[i]; const flag = positionalFlags[i]; if (flag) { prefillValues[flag.name] = positional.toString(); } } for (const [key, value] of Object.entries(yargsParseResult)) { if (key !== '_' && key !== '$0' && value !== undefined) { prefillValues[key] = value.toString(); } } return prefillValues; }

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/nrwl/nx-console'

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