Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/steelbrain/spawn
Node's Process spawning APIs beautified, lightweight with no dependencies
https://github.com/steelbrain/spawn
Last synced: 18 days ago
JSON representation
Node's Process spawning APIs beautified, lightweight with no dependencies
- Host: GitHub
- URL: https://github.com/steelbrain/spawn
- Owner: steelbrain
- License: mit
- Created: 2020-08-02T14:52:38.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2022-06-07T10:44:25.000Z (over 2 years ago)
- Last Synced: 2024-10-06T12:48:10.558Z (about 1 month ago)
- Language: TypeScript
- Size: 1000 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Spawn
Node's Process spawning APIs beautified, lightweight with no dependencies and Typescript typings.
Supports NodeJS ESM Loader.## Installation
```sh
npm install --save @steelbrain/spawn
# OR
yarn add @steelbrain/spawn
```### Usage
```typescript
import { spawn, spawnFile } from '@steelbrain/spawn'// Simple version:
spawn('ls', []).then(function(result) {
console.log('Exit code:', result.exitCode)
console.log('STDOUT:', result.stdout)
console.log('STDERR:', result.stderr)
})// Supports childProcess#spawn options in 3rd arg
spawn('ls', [], {
cwd: __dirname,
stdio: 'inherit',
windowsHide: true,
}).then(...)// Advanced version
spawn('ls', [__dirname], {
handleChildProcess(childProcess) {
// Do whatever you want to child process instance here
},
handleStdout(chunk) {
// Handle stdout chunk
},
handleStderr(chunk) {
// Handle stderr chunk
},
encoding: 'utf8',
encoding: 'buffer',
// ^ Setting encoding to "buffer" or null gives you
// a buffer in handleStd{out,err} and in promise values
}).then(...)// Invoke a JS file
spawnFile('./helloworld.js', []).then(...)
```#### API
```js
import { SpawnOptions, ChildProcess } from 'child_process'
// ^ This import is just for reference, to tell you where the types originally
// come from. You don't need to actually import it in your project.interface ExtendedSpawnOptions extends SpawnOptions {
handleChildProcess?: (childProcess: ChildProcess) => void
handleStdout?: (chunk: OutputType) => void
handleStderr?: (chunk: OutputType) => void
}interface ProcessPromise extends Promise {
kill(signal?: NodeJS.Signals | number): boolean
}// Different input types to "spawn" and their outputs
export function spawn(
command: string,
args: string[],
options: { encoding: 'buffer' | null } & Omit, 'stdio'>,
): ProcessPromise<{
stdout: Buffer
stderr: Buffer
exitCode: number
}>
export function spawn(
command: string,
args: string[],
options: { encoding: 'buffer' | null } & ExtendedSpawnOptions,
): ProcessPromise<{
stdout: Buffer | null
stderr: Buffer | null
exitCode: number
}>
export function spawn(
command: string,
args: string[],
options?: { encoding?: BufferEncoding } & Omit, 'stdio'>,
): ProcessPromise<{
stdout: string
stderr: string
exitCode: number
}>
export function spawn(
command: string,
args: string[],
options?: { encoding?: BufferEncoding } & ExtendedSpawnOptions,
): ProcessPromise<{
stdout: string | null
stderr: string | null
exitCode: number
}>// Different input types to "spawnFile" and their outputs
export function spawnFile(
filePath: string,
args: string[],
options: { encoding: 'buffer' | null } & Omit, 'stdio'>,
): ProcessPromise<{
stdout: Buffer
stderr: Buffer
exitCode: number
}>
export function spawnFile(
filePath: string,
args: string[],
options: { encoding: 'buffer' | null } & ExtendedSpawnOptions,
): ProcessPromise<{
stdout: Buffer | null
stderr: Buffer | null
exitCode: number
}>
export function spawnFile(
filePath: string,
args: string[],
options?: { encoding?: BufferEncoding } & Omit, 'stdio'>,
): ProcessPromise<{
stdout: string
stderr: string
exitCode: number
}>
export function spawnFile(
filePath: string,
args: string[],
options?: { encoding?: BufferEncoding } & ExtendedSpawnOptions,
): ProcessPromise<{
stdout: string | null
stderr: string | null
exitCode: number
}>
```#### License
This project is licensed under the terms of MIT License. See the License file for more info.