@patchworkdev/pdk
Version:
Patchwork Development Kit
49 lines (48 loc) • 2.3 kB
JavaScript
;
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;
}