///
declare namespace hookStd {
/**
`unhook()` method which, when called, unhooks from a stream and resolves the Promise.
*/
type Unhook = () => void;
/**
@param output - String from stream output.
@param unhook - Method which, when called, unhooks from stream.
@returns A Buffer or string to modify the value in the stream.
*/
type Transform = (
output: string,
unhook: Unhook
) => Buffer | string | void;
/**
@param output - String from stream output.
@param unhook - Method which, when called, unhooks from stream.
@returns A boolean to influence the return value of `.write(…)`.
*/
type SilentTransform = (
output: string,
unhook: Unhook
) => boolean | void;
interface Options {
/**
Automatically unhooks after the first call.
@default false
*/
readonly once?: boolean;
/**
Suppress stdout/stderr output.
@default true
*/
readonly silent?: boolean;
}
interface StreamsOptions extends Options {
/**
Writable streams to hook. This can be useful for libraries allowing users to configure a Writable Stream to write to.
@default [process.stdout, process.stderr]
*/
readonly streams?: NodeJS.WritableStream[];
}
interface SilentFalseOptions extends Options {
/**
Suppress stdout/stderr output.
@default true
*/
readonly silent: false;
}
interface SilentTrueOptions extends Options {
/**
Suppress stdout/stderr output.
@default true
*/
readonly silent?: true;
}
interface StreamsSilentFalseOptions extends StreamsOptions {
/**
Suppress stdout/stderr output.
@default true
*/
readonly silent: false;
}
interface StreamsSilentTrueOptions extends StreamsOptions {
/**
Suppress stdout/stderr output.
@default true
*/
readonly silent?: true;
}
/**
Promise with a `unhook()` method which, when called, resolves the Promise with an empty result.
*/
interface HookPromise extends Promise {
unhook: Unhook;
}
}
declare const hookStd: {
/**
Hooks streams in options or stdout & stderr if none are specified.
@returns A `Promise` with a `unhook()` method which, when called, unhooks the streams and resolves the `Promise`.
*/
(transform: hookStd.SilentTransform): hookStd.HookPromise;
(
options: hookStd.StreamsSilentFalseOptions,
transform: hookStd.Transform
): hookStd.HookPromise;
(
options: hookStd.StreamsSilentTrueOptions,
transform: hookStd.SilentTransform
): hookStd.HookPromise;
/**
Hooks stdout.
@returns A `Promise` with a `unhook()` method which, when called, unhooks the streams and resolves the `Promise`.
@example
```
import * as assert from 'assert';
import hookStd = require('hook-std');
(async () => {
const promise = hookStd.stdout(output => {
promise.unhook();
assert.strictEqual(output.trim(), 'unicorn');
});
console.log('unicorn');
await promise;
})();
// You can also unhook using the second `transform` method parameter:
(async () => {
const promise = hookStd.stdout((output, unhook) => {
unhook();
assert.strictEqual(output.trim(), 'unicorn');
});
console.log('unicorn');
await promise;
})();
```
*/
stdout(transform: hookStd.SilentTransform): hookStd.HookPromise;
stdout(
options: hookStd.SilentFalseOptions,
transform: hookStd.Transform
): hookStd.HookPromise;
stdout(
options: hookStd.SilentTrueOptions,
transform: hookStd.SilentTransform
): hookStd.HookPromise;
/**
Hooks stderr.
@returns A `Promise` with a `unhook()` method which, when called, unhooks the streams and resolves the `Promise`.
*/
stderr(transform: hookStd.SilentTransform): hookStd.HookPromise;
stderr(
options: hookStd.SilentFalseOptions,
transform: hookStd.Transform
): hookStd.HookPromise;
stderr(
options: hookStd.SilentTrueOptions,
transform: hookStd.SilentTransform
): hookStd.HookPromise;
};
export = hookStd;