@patchworkdev/pdk
Version:
Patchwork Development Kit
69 lines (68 loc) • 3.11 kB
JavaScript
;
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(''));
}