Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@supertenant/core / src / util / requireHook.js
Size: Mime:
// (c) Copyright 2023 Supertenant Ltd. - all rights reserved.
// See LICENSE file in project root for license terms.
"use strict";const Module=require("module"),path=require("path");let executedHooks={},byModuleNameTransformers={},byFileNamePatternTransformers=[];const origLoad=Module._load;let logger;function patchedModuleLoad(moduleName){path.isAbsolute(moduleName)&&-1===[".node",".json",".ts"].indexOf(path.extname(moduleName))&&(-1!==moduleName.indexOf("node_modules/mysql2/promise.js")?moduleName="mysql2/promise":((match=moduleName.match(/node_modules\/(@.*?(?=\/)\/.*?(?=\/))/))&&1<match.length||(match=moduleName.match(/node_modules\/(.*?(?=\/))/))&&1<match.length)&&(moduleName=match[1]));var match=origLoad.apply(Module,arguments),filename=Module._resolveFilename.apply(Module,arguments),cacheEntry=executedHooks[filename]=executedHooks[filename]||{originalModuleExports:match,moduleExports:match,appliedByModuleNameTransformers:[],byFileNamePatternTransformersApplied:!1};if(cacheEntry.originalModuleExports!==match)return match;var applicableByModuleNameTransformers=byModuleNameTransformers[moduleName];if(applicableByModuleNameTransformers&&-1===cacheEntry.appliedByModuleNameTransformers.indexOf(moduleName)){for(let i=0;i<applicableByModuleNameTransformers.length;i++){var transformerFn=applicableByModuleNameTransformers[i];if("function"==typeof transformerFn)try{cacheEntry.moduleExports=transformerFn(cacheEntry.moduleExports,filename)||cacheEntry.moduleExports}catch(e){logger.error(`Cannot instrument ${moduleName} due to an error in instrumentation: `+e),e.message&&logger.error(e.message),e.stack&&logger.error(e.stack)}else logger.error('A requireHook invariant has been violated for module name %s, index %s. The transformer is not a function but of type "%s" (details: %s). The most likely cause is that something has messed with Node.js\' module cache. This can result in limited tracing and health check functionality (for example, missing calls in Instana).',moduleName,i,typeof transformerFn,null==transformerFn?"null/undefined":transformerFn)}cacheEntry.appliedByModuleNameTransformers.push(moduleName)}if(!cacheEntry.byFileNamePatternTransformersApplied){for(let i=0;i<byFileNamePatternTransformers.length;i++)byFileNamePatternTransformers[i].pattern.test(filename)&&(cacheEntry.moduleExports=byFileNamePatternTransformers[i].fn(cacheEntry.moduleExports,filename)||cacheEntry.moduleExports);cacheEntry.byFileNamePatternTransformersApplied=!0}return cacheEntry.moduleExports}function buildFileNamePatternReducer(agg,pathSegment){return 0<agg.length&&(agg+="\\"+path.sep),agg+=pathSegment}logger=require("../logger").getLogger("util/requireHook",newLogger=>{logger=newLogger}),exports.init=function(config){Module._load=patchedModuleLoad},exports.teardownForTestPurposes=function(){Module._load=origLoad,executedHooks={},byModuleNameTransformers={},byFileNamePatternTransformers=[]},exports.onModuleLoad=function(moduleName,fn){byModuleNameTransformers[moduleName]=byModuleNameTransformers[moduleName]||[],byModuleNameTransformers[moduleName].push(fn)},exports.onFileLoad=function(pattern,fn){byFileNamePatternTransformers.push({pattern:pattern,fn:fn})},exports.buildFileNamePattern=function(arr){return new RegExp(arr.reduce(buildFileNamePatternReducer,"")+"$")};