UNPKG

@graphql-markdown/core

Version:

GraphQL-Markdown core package for generating Markdown documentation from a GraphQL schema.

64 lines (63 loc) 2.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.registerMDXEventHandlers = void 0; /** * MDX event handler registration functionality. * * This module provides utilities for registering MDX module event handlers * with the event emitter system. It maps event names to callback names and * automatically detects and registers matching callbacks from MDX modules. * * @packageDocumentation */ const logger_1 = require("@graphql-markdown/logger"); const event_emitter_1 = require("./event-emitter"); const event_map_1 = require("./event-map"); /** * Registers MDX module lifecycle event handlers with the event emitter. * * Automatically detects and registers any lifecycle hook functions defined in the mdxModule * that match the event callback naming convention. Logs registered handlers at debug level. * * Note: Format functions (formatMDXBadge, etc.) are NOT registered as events. * They are pure transformations handled via the Formatter interface directly. * * @param mdxModule - The MDX module that may contain event callback functions * * @example * ```typescript * const mdxModule = { * beforeLoadSchemaHook: async (event) => { console.log('Loading schema...'); }, * afterRenderTypeEntitiesHook: async (event) => { console.log('Rendered:', event.data.name); } * }; * registerMDXEventHandlers(mdxModule); * ``` */ const registerMDXEventHandlers = (mdxModule) => { if (!mdxModule || typeof mdxModule !== "object") { return; } (0, event_emitter_1.resetEvents)(); // reset event to avoid duplicate registrations const events = (0, event_emitter_1.getEvents)(); const registeredHandlers = new Set(); // Get the actual module object, handling ESM default export wrapping // When using dynamic import() on a CommonJS module, exports may be under .default const module = mdxModule; const effectiveModule = module.default && typeof module.default === "object" ? module.default : module; // Iterate through event callback mappings (lifecycle hooks only) for (const [eventName, callbackName] of Object.entries(event_map_1.EVENT_CALLBACK_MAP)) { // Check if mdxModule has this callback function if (callbackName in effectiveModule && typeof effectiveModule[callbackName] === "function") { const mdxFunction = effectiveModule[callbackName]; events.on(eventName, mdxFunction); registeredHandlers.add(callbackName); } } if (registeredHandlers.size > 0) { (0, logger_1.log)(`Registered MDX lifecycle handlers: ${[...registeredHandlers].join(", ")}`, logger_1.LogLevel.debug); } }; exports.registerMDXEventHandlers = registerMDXEventHandlers;