41 lines
1.3 KiB
JavaScript
41 lines
1.3 KiB
JavaScript
// fetch-openapi.js
|
|
const fs = require('fs');
|
|
const https = require('https');
|
|
const { exec } = require('child_process');
|
|
|
|
// FastAPI server URL (make sure your server is running locally at this address)
|
|
const OPENAPI_URL = 'http://127.0.0.1:8000/openapi.json';
|
|
|
|
// Path to save the OpenAPI schema file and TypeScript types
|
|
const SCHEMA_PATH = './src/schema/openapi.json';
|
|
const TYPES_PATH = './src/types/api-types.ts';
|
|
|
|
// Fetch OpenAPI JSON
|
|
https.get(OPENAPI_URL, (res) => {
|
|
let data = '';
|
|
|
|
res.on('data', chunk => {
|
|
data += chunk;
|
|
});
|
|
|
|
res.on('end', () => {
|
|
// Save the fetched OpenAPI JSON to a file
|
|
fs.writeFileSync(SCHEMA_PATH, data, 'utf8');
|
|
console.log(`✅ OpenAPI schema saved to ${SCHEMA_PATH}`);
|
|
|
|
// Run openapi-typescript to generate TypeScript types
|
|
exec(`npx openapi-typescript ${SCHEMA_PATH} --output ${TYPES_PATH}`, (error, stdout, stderr) => {
|
|
if (error) {
|
|
console.error(`❌ Error generating types: ${error}`);
|
|
return;
|
|
}
|
|
if (stderr) {
|
|
console.error(`⚠️ stderr: ${stderr}`);
|
|
return;
|
|
}
|
|
console.log(`✅ TypeScript types generated at ${TYPES_PATH}`);
|
|
});
|
|
});
|
|
}).on("error", (err) => {
|
|
console.error("Error fetching OpenAPI schema: " + err.message);
|
|
}); |