@patchworkdev/pdk
Version:
Patchwork Development Kit
61 lines (60 loc) • 3.49 kB
JavaScript
;
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 });
}
}