From 3141a087a436607b67385dd645416e4992e97f2a Mon Sep 17 00:00:00 2001 From: Michael Nahkies Date: Sun, 12 Jul 2026 11:21:28 +0100 Subject: [PATCH 1/3] fix: workaround esm output issues --- .../schemas/openapi-3.0-specification-validator.ts | 6 +++--- scripts/generate-ajv-validator.js | 10 +++++++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/openapi-code-generator/src/core/schemas/openapi-3.0-specification-validator.ts b/packages/openapi-code-generator/src/core/schemas/openapi-3.0-specification-validator.ts index 7e0e6f3d6..f26272c95 100644 --- a/packages/openapi-code-generator/src/core/schemas/openapi-3.0-specification-validator.ts +++ b/packages/openapi-code-generator/src/core/schemas/openapi-3.0-specification-validator.ts @@ -2013,7 +2013,7 @@ const schema33 = { patternProperties: {"^\\$ref$": {type: "string", format: "uri-reference"}}, } const func3 = Object.prototype.hasOwnProperty -const func0 = require("ajv/dist/runtime/equal").default +const func0 = (await import("ajv/dist/runtime/equal")).default const pattern18 = new RegExp("^\\$ref$", "u") const schema23 = { type: "object", @@ -2295,8 +2295,8 @@ const schema42 = { patternProperties: {"^x-": {}}, additionalProperties: false, } -const formats14 = require("ajv-formats/dist/formats").fullFormats.regex -const formats32 = require("ajv-formats/dist/formats").fullFormats.uri +const formats14 = (await import("ajv-formats/dist/formats")).fullFormats.regex +const formats32 = (await import("ajv-formats/dist/formats")).fullFormats.uri const wrapper0 = {validate: validate21} function validate21( data, diff --git a/scripts/generate-ajv-validator.js b/scripts/generate-ajv-validator.js index 1f6e0905f..80f39203f 100755 --- a/scripts/generate-ajv-validator.js +++ b/scripts/generate-ajv-validator.js @@ -154,7 +154,15 @@ export default function validate(){ } } -compileOpenapi30Standalone().then((output) => +compileOpenapi30Standalone() + .then((output) => { + // todo: workaround https://github.com/ajv-validator/ajv/pull/2618 + return output + .replace("const func0 = require(\"ajv/dist/runtime/equal\").default", "const func0 = (await import(\"ajv/dist/runtime/equal\")).default") + .replace("const formats14 = require(\"ajv-formats/dist/formats\").fullFormats.regex", "const formats14 = (await import(\"ajv-formats/dist/formats\")).fullFormats.regex") + .replace("const formats32 = require(\"ajv-formats/dist/formats\").fullFormats.uri", "const formats32 = (await import(\"ajv-formats/dist/formats\")).fullFormats.uri") + }) + .then((output) => writeOutput( path.join(outputDir, "openapi-3.0-specification-validator.ts"), output, From 455e06098fa62cd4660a1f94bfd8c1afa4e490f7 Mon Sep 17 00:00:00 2001 From: Michael Nahkies Date: Sun, 12 Jul 2026 11:30:51 +0100 Subject: [PATCH 2/3] fix: esm only --- packages/documentation/next.config.mjs | 4 ---- packages/openapi-code-generator/package.json | 14 +------------- packages/openapi-code-generator/tsdown.config.mts | 5 +---- 3 files changed, 2 insertions(+), 21 deletions(-) diff --git a/packages/documentation/next.config.mjs b/packages/documentation/next.config.mjs index 2c2fa56c7..9fcf4c996 100644 --- a/packages/documentation/next.config.mjs +++ b/packages/documentation/next.config.mjs @@ -11,10 +11,6 @@ const nextConfig = { turbopack: { resolveAlias: { "next-mdx-import-source-file": "./src/mdx-components.tsx", - // todo: ajv validator uses `require` in esm context, causing `node:module` to be used - // https://github.com/ajv-validator/ajv/issues/2598 should solve upstream - "@nahkies/openapi-code-generator/web": - "./node_modules/@nahkies/openapi-code-generator/dist/cjs/web.cjs", }, }, } diff --git a/packages/openapi-code-generator/package.json b/packages/openapi-code-generator/package.json index 63083ba98..ba9846a1c 100644 --- a/packages/openapi-code-generator/package.json +++ b/packages/openapi-code-generator/package.json @@ -20,7 +20,7 @@ "bin": { "openapi-code-generator": "./bin/cli.mjs" }, - "main": "./dist/cjs/index.cjs", + "main": "./dist/esm/index.mjs", "module": "./dist/esm/index.mjs", "types": "./dist/esm/index.d.mts", "exports": { @@ -28,30 +28,18 @@ "import": { "types": "./dist/esm/index.d.mts", "default": "./dist/esm/index.mjs" - }, - "require": { - "types": "./dist/cjs/index.d.cts", - "default": "./dist/cjs/index.cjs" } }, "./cli": { "import": { "types": "./dist/esm/cli.d.mts", "default": "./dist/esm/cli.mjs" - }, - "require": { - "types": "./dist/cjs/cli.d.cts", - "default": "./dist/cjs/cli.cjs" } }, "./web": { "import": { "types": "./dist/esm/web.d.mts", "default": "./dist/esm/web.mjs" - }, - "require": { - "types": "./dist/cjs/web.d.cts", - "default": "./dist/cjs/web.cjs" } } }, diff --git a/packages/openapi-code-generator/tsdown.config.mts b/packages/openapi-code-generator/tsdown.config.mts index 74400792d..29c1beac9 100644 --- a/packages/openapi-code-generator/tsdown.config.mts +++ b/packages/openapi-code-generator/tsdown.config.mts @@ -11,7 +11,7 @@ export default defineConfig({ failOnWarn: true, logLevel: "warn", publint: true, - attw: {profile: "node16"}, + attw: {profile: "esm-only"}, deps: { onlyBundle: ["@nahkies/typescript-common-runtime"], @@ -21,8 +21,5 @@ export default defineConfig({ esm: { outDir: "./dist/esm", }, - cjs: { - outDir: "./dist/cjs", - }, }, }) From dfd347110e18802fa48b6d51cb298b39449fe57c Mon Sep 17 00:00:00 2001 From: Michael Nahkies Date: Sun, 12 Jul 2026 11:33:26 +0100 Subject: [PATCH 3/3] fix: lint --- scripts/generate-ajv-validator.js | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/scripts/generate-ajv-validator.js b/scripts/generate-ajv-validator.js index 80f39203f..2f10a2b04 100755 --- a/scripts/generate-ajv-validator.js +++ b/scripts/generate-ajv-validator.js @@ -158,16 +158,25 @@ compileOpenapi30Standalone() .then((output) => { // todo: workaround https://github.com/ajv-validator/ajv/pull/2618 return output - .replace("const func0 = require(\"ajv/dist/runtime/equal\").default", "const func0 = (await import(\"ajv/dist/runtime/equal\")).default") - .replace("const formats14 = require(\"ajv-formats/dist/formats\").fullFormats.regex", "const formats14 = (await import(\"ajv-formats/dist/formats\")).fullFormats.regex") - .replace("const formats32 = require(\"ajv-formats/dist/formats\").fullFormats.uri", "const formats32 = (await import(\"ajv-formats/dist/formats\")).fullFormats.uri") + .replace( + 'const func0 = require("ajv/dist/runtime/equal").default', + 'const func0 = (await import("ajv/dist/runtime/equal")).default', + ) + .replace( + 'const formats14 = require("ajv-formats/dist/formats").fullFormats.regex', + 'const formats14 = (await import("ajv-formats/dist/formats")).fullFormats.regex', + ) + .replace( + 'const formats32 = require("ajv-formats/dist/formats").fullFormats.uri', + 'const formats32 = (await import("ajv-formats/dist/formats")).fullFormats.uri', + ) }) .then((output) => - writeOutput( - path.join(outputDir, "openapi-3.0-specification-validator.ts"), - output, - ), -) + writeOutput( + path.join(outputDir, "openapi-3.0-specification-validator.ts"), + output, + ), + ) compileOpenapi31Standalone(true).then((output) => writeOutput(