diff --git a/packages/codegen-core/tsconfig.base.json b/packages/codegen-core/tsconfig.base.json index 5afc381fb..88574f242 100644 --- a/packages/codegen-core/tsconfig.base.json +++ b/packages/codegen-core/tsconfig.base.json @@ -10,7 +10,7 @@ "noUnusedLocals": true, "noUnusedParameters": true, "strict": true, - "target": "ES2022", + "target": "ES2021", "useUnknownInCatchVariables": false } } diff --git a/packages/codegen-core/tsup.config.ts b/packages/codegen-core/tsup.config.ts index dec56b5a0..e22a03b78 100644 --- a/packages/codegen-core/tsup.config.ts +++ b/packages/codegen-core/tsup.config.ts @@ -21,5 +21,6 @@ export default defineConfig((options) => ({ minify: !options.watch, shims: false, sourcemap: true, + target: 'node18', treeshake: true, })); diff --git a/packages/openapi-ts/bin/index.cjs b/packages/openapi-ts/bin/index.cjs index 79e93dd59..d854db670 100755 --- a/packages/openapi-ts/bin/index.cjs +++ b/packages/openapi-ts/bin/index.cjs @@ -139,7 +139,8 @@ async function start() { ) { process.exit(0); } - } catch { + } catch (error) { + console.error(error); process.exit(1); } } diff --git a/packages/openapi-ts/src/config/__tests__/engine.test.ts b/packages/openapi-ts/src/config/__tests__/engine.test.ts new file mode 100644 index 000000000..31055164e --- /dev/null +++ b/packages/openapi-ts/src/config/__tests__/engine.test.ts @@ -0,0 +1,77 @@ +import fs from 'node:fs'; +import path from 'node:path'; + +import { describe, expect, it } from 'vitest'; + +import { checkNodeVersion } from '../engine'; + +describe('engine config', () => { + describe('checkNodeVersion', () => { + it('should not throw error for Node 18+', () => { + expect(() => checkNodeVersion()).not.toThrow(); + }); + }); + + describe('Node 18 compatibility', () => { + it('should have TypeScript target set to ES2021 for Node 18 compatibility', () => { + const tsconfigPath = path.resolve( + __dirname, + '..', + '..', + '..', + 'tsconfig.base.json', + ); + const tsconfig = JSON.parse(fs.readFileSync(tsconfigPath, 'utf8')); + + // ES2021 is required for Node 18 compatibility + // ES2022 includes features like Object.hasOwn that are not available in Node 18 + expect(tsconfig.compilerOptions.target).toBe('ES2021'); + }); + + it('should have tsup target set to node18 for Node 18 compatibility', () => { + const tsupConfigPath = path.resolve( + __dirname, + '..', + '..', + '..', + 'tsup.config.ts', + ); + const tsupConfig = fs.readFileSync(tsupConfigPath, 'utf8'); + + // tsup/esbuild needs explicit node18 target to ensure compiled output works on Node 18 + expect(tsupConfig).toContain("target: 'node18'"); + }); + + it('should have TypeScript target set to ES2021 in codegen-core for Node 18 compatibility', () => { + const tsconfigPath = path.resolve( + __dirname, + '..', + '..', + '..', + '..', + 'codegen-core', + 'tsconfig.base.json', + ); + const tsconfig = JSON.parse(fs.readFileSync(tsconfigPath, 'utf8')); + + // ES2021 is required for Node 18 compatibility + expect(tsconfig.compilerOptions.target).toBe('ES2021'); + }); + + it('should have tsup target set to node18 in codegen-core for Node 18 compatibility', () => { + const tsupConfigPath = path.resolve( + __dirname, + '..', + '..', + '..', + '..', + 'codegen-core', + 'tsup.config.ts', + ); + const tsupConfig = fs.readFileSync(tsupConfigPath, 'utf8'); + + // tsup/esbuild needs explicit node18 target to ensure compiled output works on Node 18 + expect(tsupConfig).toContain("target: 'node18'"); + }); + }); +}); diff --git a/packages/openapi-ts/tsconfig.base.json b/packages/openapi-ts/tsconfig.base.json index 5afc381fb..88574f242 100644 --- a/packages/openapi-ts/tsconfig.base.json +++ b/packages/openapi-ts/tsconfig.base.json @@ -10,7 +10,7 @@ "noUnusedLocals": true, "noUnusedParameters": true, "strict": true, - "target": "ES2022", + "target": "ES2021", "useUnknownInCatchVariables": false } } diff --git a/packages/openapi-ts/tsup.config.ts b/packages/openapi-ts/tsup.config.ts index 5cef330f1..49d20b9cd 100644 --- a/packages/openapi-ts/tsup.config.ts +++ b/packages/openapi-ts/tsup.config.ts @@ -72,5 +72,6 @@ export default defineConfig((options) => ({ }, shims: false, sourcemap: true, + target: 'node18', treeshake: true, }));