lib/instrumentation/modules/mimic-response.js (24 lines of code) (raw):

/* * Copyright Elasticsearch B.V. and other contributors where applicable. * Licensed under the BSD 2-Clause License; you may not use this file except in * compliance with the BSD 2-Clause License. */ 'use strict'; /* * This instrumentation exists to work around an issue in mimic-response@1.0.0 * that was fixed in mimic-response@1.0.1. * See https://github.com/elastic/apm-agent-nodejs/issues/423. */ var semver = require('semver'); module.exports = function (mimicResponse, agent, { version, enabled }) { if (!enabled) return mimicResponse; if (semver.gte(version, '1.0.1')) { agent.logger.debug( "mimic-response version %s doesn't need to be patched - ignoring...", version, ); return mimicResponse; } var ins = agent._instrumentation; return function wrappedMimicResponse(fromStream, toStream) { // If we bound the `fromStream` emitter, but not the `toStream` emitter, we // need to do so as else the `on`, `addListener`, and `prependListener` // functions of the `fromStream` will be copied over to the `toStream` but // run in the context of the `fromStream`. if ( fromStream && toStream && ins.isEventEmitterBound(fromStream) && !ins.isEventEmitterBound(toStream) ) { ins.bindEmitter(toStream); } return mimicResponse.apply(null, arguments); }; };