diff --git a/src/index.ts b/src/index.ts index ea03e0ea4..57f5128a2 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 required by 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('❗️ Missing required dependencies: ' + missing.join(' ')); + } +}; + const getConfigFromFile = async (): Promise => { const configPath = configFiles .map(file => pathToFileURL(path.resolve(process.cwd(), file))) @@ -111,6 +130,9 @@ const getConfig = async (userConfig: UserConfig, dependencies: Dependencies) => } const client = userConfig.client || inferClient(dependencies); + + logMissingDependenciesWarning(client, dependencies); + const output = path.resolve(process.cwd(), userConfig.output); const config: Config = {