fork of hey-api/openapi-ts because I need some additional things

Merge pull request #1211 from hey-api/fix/legacy-name-ignore

fix: ignore name option when not used with legacy clients to avoid producing broken output

authored by

Lubos and committed by
GitHub
d2a039b4 ad33092b

+54 -21
+5
.changeset/pink-garlics-fail.md
··· 1 + --- 2 + '@hey-api/openapi-ts': patch 3 + --- 4 + 5 + fix: ignore name option when not used with legacy clients to avoid producing broken output
+3 -3
packages/openapi-ts/src/generate/class.ts
··· 3 3 4 4 import type { OpenApi } from '../openApi'; 5 5 import type { Client } from '../types/client'; 6 - import { getConfig } from '../utils/config'; 6 + import { getConfig, legacyNameFromConfig } from '../utils/config'; 7 7 import { getHttpRequestName } from '../utils/getHttpRequestName'; 8 8 import type { Templates } from '../utils/handlebars'; 9 9 import { sortByName } from '../utils/sort'; ··· 34 34 services: sortByName(client.services), 35 35 }); 36 36 37 - if (config.name) { 37 + if (legacyNameFromConfig(config)) { 38 38 ensureDirSync(outputPath); 39 39 writeFileSync( 40 - path.resolve(outputPath, `${config.name}.ts`), 40 + path.resolve(outputPath, `${legacyNameFromConfig(config)}.ts`), 41 41 templateResult, 42 42 ); 43 43 }
+2 -2
packages/openapi-ts/src/generate/core.ts
··· 8 8 import path from 'node:path'; 9 9 10 10 import type { Client } from '../types/client'; 11 - import { getConfig } from '../utils/config'; 11 + import { getConfig, legacyNameFromConfig } from '../utils/config'; 12 12 import { getHttpRequestName } from '../utils/getHttpRequestName'; 13 13 import type { Templates } from '../utils/handlebars'; 14 14 ··· 85 85 }), 86 86 ); 87 87 88 - if (config.name) { 88 + if (legacyNameFromConfig(config)) { 89 89 await writeFileSync( 90 90 path.resolve(outputPath, 'BaseHttpRequest.ts'), 91 91 templates.core.baseHttpRequest({
+5 -5
packages/openapi-ts/src/generate/indexFile.ts
··· 1 1 import { compiler } from '../compiler'; 2 2 import type { Files } from '../types/utils'; 3 - import { getConfig } from '../utils/config'; 3 + import { getConfig, legacyNameFromConfig } from '../utils/config'; 4 4 import { TypeScriptFile } from './files'; 5 5 6 6 export const generateIndexFile = ({ files }: { files: Files }): void => { ··· 11 11 name: 'index.ts', 12 12 }); 13 13 14 - if (config.name) { 14 + if (legacyNameFromConfig(config)) { 15 15 files.index.add( 16 16 compiler.exportNamedDeclaration({ 17 - exports: config.name, 18 - module: `./${config.name}`, 17 + exports: legacyNameFromConfig(config)!, 18 + module: `./${legacyNameFromConfig(config)}`, 19 19 }), 20 20 ); 21 21 } ··· 35 35 }), 36 36 ); 37 37 } 38 - if (config.name) { 38 + if (legacyNameFromConfig(config)) { 39 39 files.index.add( 40 40 compiler.exportNamedDeclaration({ 41 41 exports: 'BaseHttpRequest',
+10 -2
packages/openapi-ts/src/index.ts
··· 18 18 import type { Client } from './types/client'; 19 19 import type { ClientConfig, Config, UserConfig } from './types/config'; 20 20 import { CLIENTS } from './types/config'; 21 - import { isLegacyClient, setConfig } from './utils/config'; 21 + import { 22 + isLegacyClient, 23 + legacyNameFromConfig, 24 + setConfig, 25 + } from './utils/config'; 22 26 import { getOpenApiSpec } from './utils/getOpenApiSpec'; 23 27 import { registerHandlebarTemplates } from './utils/handlebars'; 24 28 import { Performance, PerformanceReport } from './utils/performance'; ··· 351 355 operationParameter: operationParameterNameFn, 352 356 }, 353 357 }; 354 - if (config.experimentalParser && !isLegacyClient(config) && !config.name) { 358 + if ( 359 + config.experimentalParser && 360 + !isLegacyClient(config) && 361 + !legacyNameFromConfig(config) 362 + ) { 355 363 context = parseExperimental({ 356 364 config, 357 365 parserConfig,
+15 -7
packages/openapi-ts/src/plugins/@hey-api/services/plugin-legacy.ts
··· 25 25 } from '../../../types/client'; 26 26 import type { Config } from '../../../types/config'; 27 27 import { camelCase } from '../../../utils/camelCase'; 28 - import { getConfig, isLegacyClient } from '../../../utils/config'; 28 + import { 29 + getConfig, 30 + isLegacyClient, 31 + legacyNameFromConfig, 32 + } from '../../../utils/config'; 29 33 import { escapeComment, escapeName } from '../../../utils/escape'; 30 34 import { reservedWordsRegExp } from '../../../utils/regexp'; 31 35 import { transformServiceName } from '../../../utils/transform'; ··· 555 559 ]; 556 560 } 557 561 558 - if (config.name) { 562 + if (legacyNameFromConfig(config)) { 559 563 return [ 560 564 compiler.returnFunctionCall({ 561 565 args: [options], ··· 651 655 name: 'ThrowOnError', 652 656 }; 653 657 654 - if (!config.plugins['@hey-api/services']?.asClass && !config.name) { 658 + if ( 659 + !config.plugins['@hey-api/services']?.asClass && 660 + !legacyNameFromConfig(config) 661 + ) { 655 662 for (const operation of service.operations) { 656 663 const compileFunctionParams = { 657 664 parameters: toOperationParamType(client, operation), ··· 691 698 accessLevel: 'public', 692 699 comment: toOperationComment(operation), 693 700 isStatic: 694 - config.name === undefined && config.client.name !== 'legacy/angular', 701 + legacyNameFromConfig(config) === undefined && 702 + config.client.name !== 'legacy/angular', 695 703 name: serviceFunctionIdentifier({ 696 704 config, 697 705 id: operation.name, ··· 717 725 } 718 726 719 727 // Push constructor to front if needed 720 - if (config.name) { 728 + if (legacyNameFromConfig(config)) { 721 729 members = [ 722 730 compiler.constructorDeclaration({ 723 731 multiLine: false, ··· 803 811 name: 'Injectable', 804 812 }); 805 813 806 - if (!config.name) { 814 + if (!legacyNameFromConfig(config)) { 807 815 files.services.import({ 808 816 module: '@angular/common/http', 809 817 name: 'HttpClient', ··· 831 839 }); 832 840 } 833 841 834 - if (config.name) { 842 + if (legacyNameFromConfig(config)) { 835 843 files.services.import({ 836 844 asType: config.client.name !== 'legacy/angular', 837 845 module: './core/BaseHttpRequest',
+11
packages/openapi-ts/src/utils/config.ts
··· 13 13 const client = 'client' in config ? config.client.name : config.name; 14 14 return client.startsWith('legacy/'); 15 15 }; 16 + 17 + /** 18 + * Wrap legacy `name` option so we don't use it when not using legacy clients. 19 + */ 20 + export const legacyNameFromConfig = (config: Config) => { 21 + if (!isLegacyClient(config)) { 22 + return; 23 + } 24 + 25 + return config.name; 26 + };
+3 -2
packages/openapi-ts/src/utils/postprocess.ts
··· 2 2 import { sanitizeNamespaceIdentifier } from '../openApi'; 3 3 import type { Client, Operation, Service } from '../types/client'; 4 4 import { camelCase } from './camelCase'; 5 - import { getConfig } from './config'; 5 + import { getConfig, legacyNameFromConfig } from './config'; 6 6 import { sort } from './sort'; 7 7 import { unique } from './unique'; 8 8 ··· 47 47 operations.forEach((parserOperation) => { 48 48 const tags = 49 49 parserOperation.tags?.length && 50 - (config.plugins['@hey-api/services']?.asClass || config.name) 50 + (config.plugins['@hey-api/services']?.asClass || 51 + legacyNameFromConfig(config)) 51 52 ? parserOperation.tags.filter(unique) 52 53 : ['Default']; 53 54 tags.forEach((tag) => {