Skip to main content
Glama
index.js1.32 kB
// @flow 'use strict'; const crossSpawn = require('cross-spawn'); const { onExit } = require('signal-exit') const EventEmitter = require('events'); const ChildProcessPromise = require('./promise'); const activeProcesses = new Set(); onExit(() => { for (let child of activeProcesses) { child.kill('SIGTERM'); } }); function spawn( cmd /*: string */, args /*:: ?: Array<string> */, opts /*:: ?: child_process$spawnOpts */ ) /*: ChildProcessPromise */ { return new ChildProcessPromise((resolve, reject, events) => { let child = crossSpawn(cmd, args, opts); let stdout = Buffer.from(''); let stderr = Buffer.from(''); activeProcesses.add(child); if (child.stdout) { child.stdout.on('data', data => { stdout = Buffer.concat([stdout, data]); events.emit('stdout', data); }); } if (child.stderr) { child.stderr.on('data', data => { stderr = Buffer.concat([stderr, data]); events.emit('stderr', data); }); } child.on('error', err => { activeProcesses.delete(child); reject(err); }); child.on('close', code => { activeProcesses.delete(child); resolve({ code, stdout, stderr }); }); }); } module.exports = spawn; module.exports.ChildProcessPromise = ChildProcessPromise;

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/ajaystream/hubspot-mcp-custom'

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