UNPKG

@patchworkdev/pdk

Version:

Patchwork Development Kit

61 lines (60 loc) 3.49 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateEventHooks = generateEventHooks; const promises_1 = __importDefault(require("fs/promises")); const path_1 = __importDefault(require("path")); const config_1 = require("../../common/helpers/config"); const error_1 = require("../../common/helpers/error"); const logger_1 = require("../../common/helpers/logger"); const eventHooks_1 = require("./eventHooks"); async function generateEventHooks(configPath) { // Resolve the full path of the config file const fullConfigPath = path_1.default.isAbsolute(configPath) ? configPath : path_1.default.resolve(process.cwd(), configPath); const configDir = path_1.default.dirname(fullConfigPath); // Define paths relative to the config file const abiDir = path_1.default.join(configDir, 'ponder', 'abis'); const eventDir = path_1.default.join(configDir, 'ponder', 'src', 'generated'); const ponderSchemaPath = path_1.default.join(configDir, 'ponder', 'ponder.schema.ts'); logger_1.logger.debug(`Config path: ${fullConfigPath}`); logger_1.logger.debug(`ABI directory: ${abiDir}`); logger_1.logger.debug(`Event directory: ${eventDir}`); logger_1.logger.debug(`Ponder schema path: ${ponderSchemaPath}`); // Check if output directory exists try { await promises_1.default.access(eventDir); logger_1.logger.debug('Event directory accessible'); } catch (error) { logger_1.logger.error(`Unable to access Event directory at ${eventDir}`); throw new error_1.PDKError(error_1.ErrorCode.DIR_NOT_FOUND, `Unable to access Event directory at ${eventDir}`); } try { // Import required files const abis = await (0, config_1.importABIFiles)(abiDir); const projectConfig = await (0, config_1.importPatchworkConfig)(fullConfigPath); logger_1.logger.debug('Project config loaded'); // Process configuration const fragmentRelationships = (0, config_1.getFragmentRelationships)(projectConfig); logger_1.logger.debug(`Found ${Object.keys(fragmentRelationships).length} fragment relationships`); const entityEvents = ['Frozen', 'Locked', 'Transfer', 'Unlocked', 'Thawed']; const ponderSchema = await (0, config_1.loadPonderSchema)(ponderSchemaPath); // Generate handlers const handlers = { imports: new Set(), handlers: [] }; const entityHandlers = (0, eventHooks_1.generateEntityEventHandlers)(projectConfig, ponderSchema, abis); entityHandlers.imports.forEach((item) => handlers.imports.add(item)); handlers.handlers.push(...entityHandlers.handlers); logger_1.logger.debug(`Generated ${handlers.handlers.length} event handlers`); // Create output file const outputPath = path_1.default.join(eventDir, 'events.ts'); logger_1.logger.debug('Creating event file:', outputPath); await (0, eventHooks_1.createPonderEventFile)(handlers, outputPath); logger_1.logger.info(`Event hooks generated successfully at ${outputPath}`); } catch (error) { logger_1.logger.error('Failed to generate event hooks:', error); throw error instanceof error_1.PDKError ? error : new error_1.PDKError(error_1.ErrorCode.UNKNOWN_ERROR, 'Failed to generate event hooks', { error }); } }