UNPKG

@patchworkdev/pdk

Version:

Patchwork Development Kit

69 lines (68 loc) 3.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateReactHooks = generateReactHooks; const promises_1 = __importDefault(require("fs/promises")); const path_1 = __importDefault(require("path")); const api_1 = require("../common/helpers/api"); const error_1 = require("../common/helpers/error"); const file_1 = require("../common/helpers/file"); const logger_1 = require("../common/helpers/logger"); const text_1 = require("../common/helpers/text"); async function generateReactHooks(configPath) { logger_1.logger.info(` ∟ Generating Wagmi hooks...`); await generateWagmiHooks(configPath); logger_1.logger.info(` ∟ Generating tRPC API hooks...`); await generateTrpcHooks(configPath); logger_1.logger.info(`React hooks generated successfully`); } async function generateWagmiHooks(configPath) { const configDir = path_1.default.dirname(configPath); const wagmiConfig = path_1.default.join(configDir, 'wagmi.config.ts'); try { await promises_1.default.access(wagmiConfig); } catch (error) { console.error(`Error: Unable to access Wagmi config file at ${wagmiConfig}`); throw new error_1.PDKError(error_1.ErrorCode.FILE_NOT_FOUND, `Error: Unable to access Wagmi config file at ${wagmiConfig}`); } const { execa } = await import('execa'); execa('pnpm', ['wagmi', 'generate'], { cwd: configDir, }); } async function generateTrpcHooks(configPath) { const configDir = path_1.default.dirname(configPath); const trpcRouter = path_1.default.join(configDir, 'ponder', 'src', 'generated', 'api.ts'); const hooksDir = path_1.default.join(configDir, 'www', 'src', 'generated', 'hooks'); const trpcHooksFile = path_1.default.join(hooksDir, 'trpc.ts'); //const wagmiHooksFile = path.join(hooksDir, 'wagmi.ts'); // Check if tRPC router file exists try { await promises_1.default.access(trpcRouter); } catch (error) { logger_1.logger.error(`Error: Unable to access tRPC router file at ${trpcRouter}`); throw new error_1.PDKError(error_1.ErrorCode.FILE_NOT_FOUND, `Error: Unable to access tRPC router file at ${trpcRouter}`); } // Ensure hooks directory exists try { await promises_1.default.mkdir(hooksDir, { recursive: true }); } catch (error) { logger_1.logger.error(`Error creating hooks directory at ${hooksDir}:`, error); throw new error_1.PDKError(error_1.ErrorCode.DIR_NOT_FOUND, `Error creating hooks directory at ${trpcRouter}`); } const apiStructure = (0, api_1.analyzeAPI)(trpcRouter); const hooksFileArray = [ `import { trpc } from '../lib/trpc'; `, ]; for (let key in apiStructure) { hooksFileArray.push(`export const use${(0, text_1.pascalCase)(key)} = trpc.${key}.useQuery; `); } (0, file_1.formatAndSaveFile)(trpcHooksFile, hooksFileArray.join('')); }