Skip to main content
Glama
nrwl

Nx MCP Server

Official
by nrwl
yargs-config.spec.ts5.98 kB
import { createYargsConfig } from './yargs-config'; describe('createYargsConfig', () => { let consoleWarnSpy: jest.SpyInstance; let processExitSpy: jest.SpyInstance; beforeEach(() => { consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(); processExitSpy = jest.spyOn(process, 'exit').mockImplementation(() => { throw new Error('process.exit called'); }); }); afterEach(() => { consoleWarnSpy.mockRestore(); processExitSpy.mockRestore(); }); describe('deprecated --sse option', () => { it('should warn when using deprecated --sse flag', () => { const argv = createYargsConfig(['--sse']).parseSync(); expect(consoleWarnSpy).toHaveBeenCalledWith( 'Warning: --sse option is deprecated. Please use --transport sse instead.', ); }); it('should set transport to sse when using deprecated --sse flag', () => { const argv = createYargsConfig(['--sse']).parseSync(); expect(argv.transport).toBe('sse'); expect(argv.sse).toBe(true); }); it('should throw error when using --sse with --transport http', () => { expect(() => { createYargsConfig(['--sse', '--transport', 'http']).parseSync(); }).toThrow('process.exit called'); expect(processExitSpy).toHaveBeenCalledWith(1); }); it('should allow --sse with --transport sse', () => { const argv = createYargsConfig([ '--sse', '--transport', 'sse', ]).parseSync(); expect(argv.transport).toBe('sse'); expect(argv.sse).toBe(true); expect(consoleWarnSpy).toHaveBeenCalledWith( 'Warning: --sse option is deprecated. Please use --transport sse instead.', ); }); }); describe('conflicting options', () => { it('should throw error when using both --sse and --http', () => { expect(() => { createYargsConfig(['--sse', '--transport', 'http']).parseSync(); }).toThrow('process.exit called'); expect(processExitSpy).toHaveBeenCalledWith(1); }); it('should not throw error when using only --transport', () => { expect(() => { createYargsConfig(['--transport', 'http']).parseSync(); }).not.toThrow(); }); }); describe('port validation', () => { it('should throw error when using --port with stdio transport', () => { expect(() => { createYargsConfig(['--port', '9922']).parseSync(); }).toThrow('process.exit called'); expect(processExitSpy).toHaveBeenCalledWith(1); }); it('should throw error when using --port with explicit stdio transport', () => { expect(() => { createYargsConfig([ '--transport', 'stdio', '--port', '9922', ]).parseSync(); }).toThrow('process.exit called'); expect(processExitSpy).toHaveBeenCalledWith(1); }); it('should allow --port with sse transport', () => { expect(() => { createYargsConfig(['--transport', 'sse', '--port', '9922']).parseSync(); }).not.toThrow(); }); it('should allow --port with http transport', () => { expect(() => { createYargsConfig([ '--transport', 'http', '--port', '9922', ]).parseSync(); }).not.toThrow(); }); it('should allow --port with deprecated --sse flag', () => { expect(() => { createYargsConfig(['--sse', '--port', '9922']).parseSync(); }).not.toThrow(); }); }); describe('default values', () => { it('should default to stdio transport', () => { const argv = createYargsConfig([]).parseSync(); expect(argv.transport).toBe('stdio'); }); it('should have default values for all options', () => { const argv = createYargsConfig([]).parseSync(); expect(argv.transport).toBe('stdio'); expect(argv.sse).toBe(false); expect(argv.disableTelemetry).toBe(false); expect(argv.keepAliveInterval).toBe(30000); expect(argv.port).toBeUndefined(); }); }); describe('transport option', () => { it('should accept stdio transport', () => { const argv = createYargsConfig(['--transport', 'stdio']).parseSync(); expect(argv.transport).toBe('stdio'); }); it('should accept sse transport', () => { const argv = createYargsConfig(['--transport', 'sse']).parseSync(); expect(argv.transport).toBe('sse'); }); it('should accept http transport', () => { const argv = createYargsConfig(['--transport', 'http']).parseSync(); expect(argv.transport).toBe('http'); }); it('should reject invalid transport values', () => { expect(() => { createYargsConfig(['--transport', 'invalid']).parseSync(); }).toThrow(); }); }); describe('tools option', () => { it('should parse single --tools flag', () => { const argv = createYargsConfig(['--tools', 'nx_docs']).parseSync(); expect(argv.tools).toEqual(['nx_docs']); }); it('should parse multiple --tools flags', () => { const argv = createYargsConfig([ '--tools', 'nx_docs', '--tools', 'nx_workspace', ]).parseSync(); expect(argv.tools).toEqual(['nx_docs', 'nx_workspace']); }); it('should parse -t alias', () => { const argv = createYargsConfig(['-t', 'nx_docs']).parseSync(); expect(argv.tools).toEqual(['nx_docs']); }); it('should handle negation patterns', () => { const argv = createYargsConfig(['--tools', '!nx_docs']).parseSync(); expect(argv.tools).toEqual(['!nx_docs']); }); it('should handle glob patterns', () => { const argv = createYargsConfig(['--tools', 'nx_*']).parseSync(); expect(argv.tools).toEqual(['nx_*']); }); it('should default to undefined when not provided', () => { const argv = createYargsConfig([]).parseSync(); expect(argv.tools).toBeUndefined(); }); }); });

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