Skip to content

Commit

Permalink
feat: remove redundant outputInterceptorInstanceId
Browse files Browse the repository at this point in the history
  • Loading branch information
gajus committed Jan 30, 2020
1 parent b868122 commit a6f3f35
Showing 1 changed file with 31 additions and 36 deletions.
67 changes: 31 additions & 36 deletions src/factories/createOutputInterceptor.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,68 +10,63 @@ import type {
OutputInterceptorUserConfigurationType,
} from '../types';

export default (userConfiguration?: OutputInterceptorUserConfigurationType): OutputInterceptorType => {
const outputInterceptorInstanceId = Symbol('OUTPUT_INTERCEPTOR');

const configuration: OutputInterceptorConfigurationType = {
interceptStderr: !(userConfiguration && userConfiguration.interceptStderr === false),
interceptStdout: !(userConfiguration && userConfiguration.interceptStdout === false),
stripAnsi: !(userConfiguration && userConfiguration.stripAnsi === false),
};
const originalStderrWrite = process.stderr.write.bind(process.stderr);
const originalStdoutWrite = process.stdout.write.bind(process.stdout);

const originalStdoutWrite = process.stdout.write.bind(process.stdout);
const originalStderrWrite = process.stderr.write.bind(process.stderr);
export default (userConfiguration?: OutputInterceptorUserConfigurationType): OutputInterceptorType => {
// $FlowFixMe
process.stderr.write = (chunk, encoding, callback) => {
const domain: any = process.domain;

if (configuration.interceptStdout) {
// $FlowFixMe
process.stdout.write = (chunk, encoding, callback) => {
const domain: any = process.domain;
if (domain && domain.outputInterceptor && domain.outputInterceptor.interceptStderr) {
domain.outputInterceptor.output += chunk;
}

if (domain && domain.outputInterceptor && domain.outputInterceptor.instanceId === outputInterceptorInstanceId) {
domain.outputInterceptor.output += chunk;
}
return originalStderrWrite(chunk, encoding, callback);
};

return originalStdoutWrite(chunk, encoding, callback);
};
}
// $FlowFixMe
process.stdout.write = (chunk, encoding, callback) => {
const domain: any = process.domain;

if (configuration.interceptStderr) {
// $FlowFixMe
process.stderr.write = (chunk, encoding, callback) => {
const domain: any = process.domain;
if (domain && domain.outputInterceptor && domain.outputInterceptor.interceptStdout) {
domain.outputInterceptor.output += chunk;
}

if (domain && domain.outputInterceptor && domain.outputInterceptor.instanceId === outputInterceptorInstanceId) {
domain.outputInterceptor.output += chunk;
}
return originalStdoutWrite(chunk, encoding, callback);
};

return originalStderrWrite(chunk, encoding, callback);
const interceptor = async (routine) => {
const configuration: OutputInterceptorConfigurationType = {
interceptStderr: !(userConfiguration && userConfiguration.interceptStderr === false),
interceptStdout: !(userConfiguration && userConfiguration.interceptStdout === false),
stripAnsi: !(userConfiguration && userConfiguration.stripAnsi === false),
};
}

const interceptor = async (routine) => {
const parentDomain: any = process.domain;

const domain: any = createDomain();
const executionDomain: any = createDomain();

domain.outputInterceptor = {
instanceId: outputInterceptorInstanceId,
executionDomain.outputInterceptor = {
interceptStderr: configuration.interceptStderr,
interceptStdout: configuration.interceptStdout,
output: '',
};

let routineResult;
let routineError;

try {
routineResult = await domain.run(() => {
routineResult = await executionDomain.run(() => {
return routine();
});
} catch (error) {
routineError = error;
}

let output = domain.outputInterceptor.output;
let output = executionDomain.outputInterceptor.output;

domain.outputInterceptor = undefined;
executionDomain.outputInterceptor = undefined;

if (configuration && configuration.stripAnsi) {
output = stripAnsi(output);
Expand Down

0 comments on commit a6f3f35

Please sign in to comment.