UNPKG

@patchworkdev/pdk

Version:

Patchwork Development Kit

52 lines (43 loc) 1.86 kB
import fs from 'fs/promises'; import path from 'path'; import { analyzeAPI } from '../../common/helpers/api'; import { ErrorCode, PDKError } from '../../common/helpers/error'; import { formatAndSaveFile } from '../../common/helpers/file'; import { logger } from '../../common/helpers/logger'; import { pascalCase } from '../../common/helpers/text'; export async function generateDemoPage(rootDir: string) { // const configDir = path.dirname(configPath); const trpcRouter = path.join(rootDir, 'ponder', 'src', 'generated', 'api.ts'); const demoFile = path.join(rootDir, 'www', 'app', 'demo', 'page.tsx'); const apiStructure = analyzeAPI(trpcRouter); const demoFileArray = [`"use client";\n\nimport React from "react";\n`]; const components = []; for (let key in apiStructure) { if (key.includes('getPaginated')) { const entity = key.split('.')[0]; const component = `${pascalCase(entity)}List`; components.push(component); demoFileArray.push(`import ${component} from "../../src/generated/components/${component}";\n`); } } demoFileArray.push(` export default function Home() { return ( <main className="flex min-h-screen flex-col items-center justify-between p-24"> `); for (let component of components) { demoFileArray.push(` <${component} />\n`); } demoFileArray.push(` </main> ); }`); // Ensure the demo directory exists const demoDir = path.dirname(demoFile); try { await fs.mkdir(demoDir, { recursive: true }); } catch (error) { throw new PDKError(ErrorCode.DIR_NOT_FOUND, `Error creating demo directory at ${demoDir}`); } await formatAndSaveFile(demoFile, demoFileArray.join('')); logger.info(`Demo page generated successfully at ${demoFile}`); }