export = ExportHandlerRegistry; /** * @template {Object} T * @typedef {import('./export-hook-descriptor')} ExportHookDescriptor */ /** * @template {Object} T * @typedef {import('./export-hook-descriptor').Handler} Handler */ /** * @template {Object} T * @typedef {Object} HandlerData * @property {Handler[]} handlers * @property {PackageFinder.Metadata} metadata */ declare class ExportHandlerRegistry { /** * @param {Object} core * @param {import('pino').Logger} core.logger * @param {import('@contrast/common').Messages} core.messages * @param {import('@contrast/common').AppInfo} core.appInfo */ constructor({ logger, messages, appInfo }: { logger: import("pino").Logger; messages: import("@contrast/common").Messages; appInfo: import("@contrast/common").AppInfo; }); /** @type {import('pino').Logger} */ logger: import("pino").Logger; /** @type {import('@contrast/common').Messages} */ messages: import("@contrast/common").Messages; /** @type {string} */ nodeModulesDir: string; /** * Contains all registered hooks that have been added by `.update()` * Keyed by `shortname`. * @type {Record[]>} */ registered: Record[]>; /** * Contains all modules that have been resolved and are in require cache * Keyed by absolute filename. * @type {Record>} */ resolved: Record>; /** * Keep track of package versions targeted by registered hooks. * This is used to help to detect when unsupported package versions are loaded. * ``` * Map(1) { '@some/lib' => Set(3) { '2', '3', '>=5 <9' } } * ``` * @type {Map>} */ hookedLibVersions: Map>; /** * Keep track of which unspported libs we've logged/reported. * ``` * Set(2) { 'mongodb@45.67.89', 'express@0.0.1' } * ``` * @type {Set} */ unsupportedLibsDetected: Set; /** * Update the registry with the handler info for the given module name. * This gets called when an agent registers a handler for a given module. * @template {Object} T * @param {ExportHookDescriptor} info * @returns {ExportHookDescriptor[]} */ update(info: ExportHookDescriptor): ExportHookDescriptor[]; /** * Defined as a class method to allow easy stubbing in tests. * @param {string} request the string passed to require() * @param {Module} parent the module executing require() * @param {boolean} isMain indicates whether the module executing require() is the entry point * @returns {string} fully resolved filename of the required module */ resolveFilename(request: string, parent: Module, isMain: boolean): string; /** * Defined as a class method to allow easy stubbing in tests. * @param {string} filename fully resolved filename of the required module * @returns {PackageFinder.Metadata?} */ resolveMetadata(filename: string): PackageFinder.Metadata | null; /** * Iterates all descriptors pertaining to the currently-loading export. It * builds into the set of resolved paths the metadata and handlers for each * handler that is applicable to the export. * @template {Object} T * @param {PackageFinder.Metadata} metadata module metadata * @param {ExportHookDescriptor[]} registered list of registered hooks */ buildFromRegistry(metadata: PackageFinder.Metadata, registered: ExportHookDescriptor[]): void; /** * Returns registered handlers and the module metadata for a module that has * registration for the version that is being required. * @template {Object} T * @param {PackageFinder.Metadata} metadata module metadata * @return {HandlerData=} */ findModuleHandlerData(metadata: PackageFinder.Metadata): HandlerData | undefined; /** * When an export is returned from a `require`, we want to resolve the name * used as the param, e.g. "http" in `require('http')`, to a set of * metadata and handlers that have been registered for exports by that name. * @template {Object} T * @param {string} request the string passed to require() * @param {Module} parent the module executing require() * @param {boolean} isMain indicates whether the module executing require() is the entry point * @return {HandlerData=} */ query(request: string, parent: Module, isMain: boolean): HandlerData | undefined; } declare namespace ExportHandlerRegistry { export { ExportHookDescriptor, Handler, HandlerData }; } import Module = require("module"); import PackageFinder = require("./package-finder"); type ExportHookDescriptor = import("./export-hook-descriptor"); type Handler = import("./export-hook-descriptor").Handler; type HandlerData = { handlers: Handler[]; metadata: PackageFinder.Metadata; }; //# sourceMappingURL=export-handler-registry.d.ts.map