From ed01f15879d3017aea9b1acf4c0d909088c0f8b1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 18 Dec 2025 15:00:23 +0000 Subject: [PATCH] Add support for moduleResolution node16 to behave like nodenext Co-authored-by: mrlubos <12529395+mrlubos@users.noreply.github.com> --- .../openapi-ts-tests/main/test/clients.test.ts | 14 ++++++++++++++ .../main/test/tsconfig/tsconfig.node16.json | 9 +++++++++ packages/openapi-ts/src/config/output.ts | 6 ++++-- packages/openapi-ts/src/types/output.d.ts | 8 ++++---- 4 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 packages/openapi-ts-tests/main/test/tsconfig/tsconfig.node16.json diff --git a/packages/openapi-ts-tests/main/test/clients.test.ts b/packages/openapi-ts-tests/main/test/clients.test.ts index 118a0f1b9..db6252080 100644 --- a/packages/openapi-ts-tests/main/test/clients.test.ts +++ b/packages/openapi-ts-tests/main/test/clients.test.ts @@ -159,6 +159,20 @@ for (const client of clients) { }), description: 'SDK with NodeNext tsconfig', }, + { + config: createConfig({ + output: { + path: 'tsconfig-node16-sdk', + tsConfigPath: path.join( + __dirname, + 'tsconfig', + 'tsconfig.node16.json', + ), + }, + plugins: [client, '@hey-api/sdk'], + }), + description: 'SDK with Node16 tsconfig', + }, { config: createConfig({ output: { diff --git a/packages/openapi-ts-tests/main/test/tsconfig/tsconfig.node16.json b/packages/openapi-ts-tests/main/test/tsconfig/tsconfig.node16.json new file mode 100644 index 000000000..f905bad0f --- /dev/null +++ b/packages/openapi-ts-tests/main/test/tsconfig/tsconfig.node16.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "declaration": false, + "moduleResolution": "node16", + "resolveJsonModule": true, + "skipLibCheck": true + } +} diff --git a/packages/openapi-ts/src/config/output.ts b/packages/openapi-ts/src/config/output.ts index ddac601bf..846ae2474 100644 --- a/packages/openapi-ts/src/config/output.ts +++ b/packages/openapi-ts/src/config/output.ts @@ -50,8 +50,10 @@ export const getOutput = (userConfig: UserConfig): Config['output'] => { output.tsConfig = loadTsConfig(findTsConfigPath(output.tsConfigPath)); if ( output.importFileExtension === undefined && - output.tsConfig?.options.moduleResolution === - ts.ModuleResolutionKind.NodeNext + (output.tsConfig?.options.moduleResolution === + ts.ModuleResolutionKind.NodeNext || + output.tsConfig?.options.moduleResolution === + ts.ModuleResolutionKind.Node16) ) { output.importFileExtension = '.js'; } diff --git a/packages/openapi-ts/src/types/output.d.ts b/packages/openapi-ts/src/types/output.d.ts index 471bda9ef..7d5dc639b 100644 --- a/packages/openapi-ts/src/types/output.d.ts +++ b/packages/openapi-ts/src/types/output.d.ts @@ -70,8 +70,8 @@ export type UserOutput = { /** * If specified, this will be the file extension used when importing * other modules. By default, we don't add a file extension and let the - * runtime resolve it. If you're using moduleResolution `nodenext`, we - * default to `.js`. + * runtime resolve it. If you're using moduleResolution `nodenext` or + * `node16`, we default to `.js`. * * @default undefined */ @@ -170,8 +170,8 @@ export type Output = { /** * If specified, this will be the file extension used when importing * other modules. By default, we don't add a file extension and let the - * runtime resolve it. If you're using moduleResolution `nodenext`, we - * default to `.js`. + * runtime resolve it. If you're using moduleResolution `nodenext` or + * `node16`, we default to `.js`. */ importFileExtension: ImportFileExtensions | (string & {}) | null | undefined; /** -- 2.51.2