Repository URL to install this package:
|
Version:
0.7.0 ▾
|
// (c) Copyright 2023 Supertenant Ltd. - all rights reserved.
// See LICENSE file in project root for license terms.
"use strict";const shimmer=require("shimmer"),requireHook=require("../../../util/requireHook"),cls=require("../../cls");let isActive=!1;const CLS_CONTEXT_SYMBOL=Symbol("_instana_cls_context");function instrumentModule(graphQlSubscriptions){shimmer.wrap(graphQlSubscriptions.PubSub.prototype,"publish",shimPublish)}function shimPublish(originalPublish){return function(){return isActive&&cls.isTracing()&&this.ee&&this.ee.on&&this.ee.addListener&&this.ee.emit&&cls.ns.bindEmitter(this.ee),originalPublish.apply(this,arguments)}}function instrumentAsyncIterator(pubSubAsyncIterator){shimmer.wrap(pubSubAsyncIterator.PubSubAsyncIterator.prototype,"pushValue",shimPushValue),shimmer.wrap(pubSubAsyncIterator.PubSubAsyncIterator.prototype,"pullValue",shimPullValue)}function shimPushValue(originalFunction){return function(event){return isActive&&event&&"object"==typeof event&&cls.ns.active&&(event[CLS_CONTEXT_SYMBOL]=cls.ns.active),originalFunction.apply(this,arguments)}}function shimPullValue(originalFunction){return function(){return originalFunction.apply(this,arguments).then(result=>{if(result&&result.value&&result.value[CLS_CONTEXT_SYMBOL]){const clsContext=result.value[CLS_CONTEXT_SYMBOL];isActive&&clsContext&&(cls.ns.enter(clsContext),setImmediate(()=>{cls.ns.exit(clsContext)}))}return result})}}exports.init=()=>{requireHook.onModuleLoad("graphql-subscriptions",instrumentModule),requireHook.onFileLoad(/\/graphql-subscriptions\/dist\/pubsub-async-iterator\.js/,instrumentAsyncIterator)},exports.activate=()=>{isActive=!0},exports.deactivate=()=>{isActive=!1};