@gati-framework/cli
Version:
CLI tool for Gati framework - create, develop, build and deploy cloud-native applications
71 lines • 2.87 kB
JavaScript
/**
* @module cli/commands/generate-types
* @description Generate TypeScript declarations from schema
*/
import { Command } from 'commander';
import { resolve } from 'path';
import { existsSync, writeFileSync, readFileSync, mkdirSync } from 'fs';
import chalk from 'chalk';
/**
* Generate TypeScript declarations
*/
async function generateTypeDeclarations(cwd) {
try {
// Look for gati.types.json or gati.types.ts
const jsonPath = resolve(cwd, 'gati.types.json');
const tsPath = resolve(cwd, 'gati.types.ts');
let schema = {};
if (existsSync(jsonPath)) {
const content = JSON.parse(readFileSync(jsonPath, 'utf-8'));
schema = content;
console.log(chalk.blue('📄 Using gati.types.json'));
}
else if (existsSync(tsPath)) {
// Dynamic import for TypeScript config
const configUrl = new URL(`file://${tsPath.replace(/\\/g, '/')}`).href;
const configModule = await import(configUrl);
schema = configModule.default || configModule.schema;
console.log(chalk.blue('📄 Using gati.types.ts'));
}
else {
console.log(chalk.yellow('⚠ No type schema found. Creating default gati.types.json'));
schema = {
state: {
user: 'object',
permissions: 'array',
authenticated: 'boolean'
},
modules: {
db: {
findUser: { params: { id: 'string' }, returns: 'object' },
createUser: { params: { data: 'object' }, returns: 'object' }
}
}
};
writeFileSync(jsonPath, JSON.stringify(schema, null, 2));
}
// Generate TypeScript declarations
const { generateTypes } = await import('@gati-framework/runtime');
const declarations = generateTypes(schema);
// Write to .gati/types.d.ts
const outputDir = resolve(cwd, '.gati');
const outputPath = resolve(outputDir, 'types.d.ts');
if (!existsSync(outputDir)) {
mkdirSync(outputDir, { recursive: true });
}
writeFileSync(outputPath, declarations);
console.log(chalk.green('✅ Generated types at .gati/types.d.ts'));
console.log(chalk.gray('💡 Add ".gati/types.d.ts" to your tsconfig.json includes'));
}
catch (error) {
console.error(chalk.red('✖ Failed to generate types:'), error);
process.exit(1);
}
}
export const generateTypesCommand = new Command('generate:types')
.description('Generate TypeScript declarations from schema')
.action(async () => {
const cwd = process.cwd();
await generateTypeDeclarations(cwd);
});
//# sourceMappingURL=generate-types.js.map