@graphql-markdown/core
Version:
GraphQL-Markdown core package for generating Markdown documentation from a GraphQL schema.
64 lines (63 loc) • 2.76 kB
JavaScript
;
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;