gitdataai/scripts/gen-client.js
2026-04-14 19:02:01 +08:00

56 lines
2.0 KiB
JavaScript

/**
* Generate TypeScript axios client from openapi.json using @hey-api/openapi-ts.
* Generates into src/client.
* Post-processes: injects withCredentials: true and baseURL into the client config.
*/
const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');
const ROOT = path.join(__dirname, '..');
const CLIENT_DIR = path.join(ROOT, 'src', 'client');
const CLIENT_GEN = path.join(CLIENT_DIR, 'client.gen.ts');
const openapiTsBin = path.join(ROOT, 'node_modules/@hey-api/openapi-ts/bin/run.js');
const openapiJson = path.join(ROOT, 'openapi.json');
console.log('Running @hey-api/openapi-ts...');
try {
execSync(`node "${openapiTsBin}" -c @hey-api/client-axios -i "${openapiJson}" -o "${CLIENT_DIR}"`, {
cwd: ROOT,
stdio: 'inherit',
});
} catch (e) {
console.error('Generator exited with code:', e.status);
process.exit(1);
}
// Post-process: inject withCredentials and baseURL into client config
if (fs.existsSync(CLIENT_GEN)) {
let content = fs.readFileSync(CLIENT_GEN, 'utf8');
// Remove unused createConfig import
content = content.replace(
"import { type ClientOptions, type Config, createClient, createConfig } from './client';",
"import { type ClientOptions, type Config, createClient } from './client';"
);
// Replace the client creation to include withCredentials and baseURL
content = content.replace(
'export const client = createClient(createConfig<ClientOptions2>());',
`export const createClientConfig = (override?: Config<ClientOptions2>): Config<ClientOptions2> => {
return {
withCredentials: true,
baseURL: import.meta.env.VITE_API_BASE_URL ?? '',
...override,
};
};
export const client = createClient(createClientConfig());`
);
fs.writeFileSync(CLIENT_GEN, content);
console.log('Updated client.gen.ts with withCredentials and baseURL');
}
console.log('Done.');