diff --git a/src/index.ts b/src/index.ts index 5ac8ff610..1c518410e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -18,6 +18,15 @@ type Dependencies = Record; // TODO: add support for `openapi-ts.config.ts` const configFiles = ['openapi-ts.config.js', 'openapi-ts.config.cjs', 'openapi-ts.config.mjs']; +// Mapping of all dependencies used in each client. These should be installed in the generated client package +const clientDependencies: Record = { + angular: ['@angular/common', '@angular/core', 'rxjs'], + axios: ['axios'], + fetch: [], + node: ['node-fetch'], + xhr: [], +}; + const processOutput = (config: Config, dependencies: Dependencies) => { if (config.format) { if (dependencies.prettier) { @@ -35,12 +44,15 @@ const processOutput = (config: Config, dependencies: Dependencies) => { }; const inferClient = (dependencies: Dependencies): Config['client'] => { - if (dependencies['@angular/cli']) { + if (Object.keys(dependencies).some(d => d.startsWith('@angular'))) { return 'angular'; } if (dependencies.axios) { return 'axios'; } + if (dependencies['node-fetch']) { + return 'node'; + } return 'fetch'; }; @@ -59,6 +71,13 @@ const logClientMessage = (client: Config['client']) => { } }; +const logMissingDependenciesWarning = (client: Config['client'], dependencies: Dependencies) => { + const missing = clientDependencies[client].filter(d => dependencies[d] === undefined); + if (missing.length > 0) { + console.log('⚠️ Dependencies used in generated client are missing: ' + missing.join(' ')); + } +}; + const getConfigFromFile = async (): Promise => { const configPath = configFiles .map(file => pathToFileURL(path.resolve(process.cwd(), file))) @@ -174,11 +193,13 @@ export async function createClient(userConfig: UserConfig): Promise { if (config.write) { logClientMessage(config.client); + logMissingDependenciesWarning(config.client, dependencies); await writeClient(client, templates, config); processOutput(config, dependencies); } console.log('✨ Done! Your client is located in:', config.output); + return client; }