@patchworkdev/pdk
Version:
Patchwork Development Kit
51 lines (50 loc) • 2.25 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateDemoPage = generateDemoPage;
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 generateDemoPage(configPath) {
const configDir = path_1.default.dirname(configPath);
const trpcRouter = path_1.default.join(configDir, 'ponder', 'src', 'generated', 'api.ts');
const demoFile = path_1.default.join(configDir, 'www', 'app', 'demo', 'page.tsx');
const apiStructure = (0, api_1.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 = `${(0, text_1.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_1.default.dirname(demoFile);
try {
await promises_1.default.mkdir(demoDir, { recursive: true });
}
catch (error) {
throw new error_1.PDKError(error_1.ErrorCode.DIR_NOT_FOUND, `Error creating demo directory at ${demoDir}`);
}
await (0, file_1.formatAndSaveFile)(demoFile, demoFileArray.join(''));
logger_1.logger.info(`Demo page generated successfully at ${demoFile}`);
}