UNPKG

@patchworkdev/pdk

Version:

Patchwork Development Kit

49 lines (48 loc) 2.3 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateTypes = generateTypes; const promises_1 = __importDefault(require("fs/promises")); const path_1 = __importDefault(require("path")); const config_1 = require("../../common/helpers/config"); // import { FieldDefinition, Schema } from "./ponderMocks"; const file_1 = require("../../common/helpers/file"); const logger_1 = require("../../common/helpers/logger"); const text_1 = require("../../common/helpers/text"); async function generateTypes(rootDir) { const schemaPath = path_1.default.join(rootDir, 'ponder', 'ponder.schema.ts'); const typesOutputDir = path_1.default.join(rootDir, 'ponder', 'src', 'generated'); const schema = await (0, config_1.loadPonderSchema)(schemaPath); // Check if the API output directory exists, create it if it doesn't try { await promises_1.default.access(typesOutputDir); } catch (error) { logger_1.logger.info(`API output directory does not exist. Creating ${typesOutputDir}`); await promises_1.default.mkdir(typesOutputDir, { recursive: true }); } // Generate the tRPC API content const output = await generator(schema); // Write the formatted API content to file const outputPath = path_1.default.join(typesOutputDir, 'types.ts'); // await fs.writeFile(outputPath, apiContent, 'utf8'); await (0, file_1.formatAndSaveFile)(outputPath, output.join('\n')); logger_1.logger.info(`type generation completed. Output written to ${outputPath}`); return { types: typesOutputDir }; } async function generator(schema) { const imports = []; const output = Object.entries(schema) .filter((entry) => entry[1].type === 'table') .flatMap(([tableName, entity]) => { imports.push(tableName); return [ `export type ${(0, text_1.pascalCase)(tableName)} = typeof ${tableName}.$inferSelect;`, `export type ${(0, text_1.pascalCase)(tableName)}Insert = typeof ${tableName}.$inferInsert;`, ]; }); output.unshift(`import {${imports.join(',')}} from "../../ponder.schema"`); return output; }