diff --git a/.changeset/moody-ears-talk.md b/.changeset/moody-ears-talk.md new file mode 100644 index 00000000..eec1d682 --- /dev/null +++ b/.changeset/moody-ears-talk.md @@ -0,0 +1,5 @@ +--- +'@hey-api/openapi-ts': patch +--- + +fix: support dynamic require in child_process diff --git a/packages/openapi-ts/src/generate/client.ts b/packages/openapi-ts/src/generate/client.ts index a818ad7f..1a99b508 100644 --- a/packages/openapi-ts/src/generate/client.ts +++ b/packages/openapi-ts/src/generate/client.ts @@ -4,29 +4,6 @@ import path from 'node:path'; import { getConfig, isStandaloneClient } from '../utils/config'; import { ensureDirSync } from './utils'; -const isESM = () => { - try { - return typeof import.meta.url === 'string'; - } catch (error) { - return false; - } -}; - -const getRequire = async (): Promise => { - try { - if (isESM()) { - const module: any = await import('node:module'); - const createRequire: (path: string | URL) => NodeRequire = - module.createRequire; - return createRequire(import.meta.url); - } - - return module.require; - } catch (error) { - return module.require; - } -}; - export const clientModulePath = () => { const config = getConfig(); return config.client.bundle ? './client' : config.client.name; @@ -54,7 +31,6 @@ export const generateClient = async ( const dirPath = path.resolve(outputPath, 'client'); ensureDirSync(dirPath); - const require = await getRequire(); const clientModulePath = path.normalize(require.resolve(moduleName)); const clientModulePathComponents = clientModulePath.split(path.sep); const clientSrcPath = [ diff --git a/packages/openapi-ts/tsup.config.ts b/packages/openapi-ts/tsup.config.ts index 77dfaf86..c101964e 100644 --- a/packages/openapi-ts/tsup.config.ts +++ b/packages/openapi-ts/tsup.config.ts @@ -1,6 +1,17 @@ import { defineConfig } from 'tsup'; export default defineConfig((options) => ({ + banner(ctx) { + /** + * fix dynamic require in ESM + * @link https://github.com/hey-api/openapi-ts/issues/1079 + */ + if (ctx.format === 'esm') { + return { + js: "import { createRequire } from 'module'; const require = createRequire(import.meta.url);", + }; + } + }, clean: true, dts: true, entry: ['src/index.ts'], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a4a10668..7ea94570 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -58,7 +58,7 @@ importers: version: 3.3.2 tsup: specifier: 8.3.0 - version: 8.3.0(@microsoft/api-extractor@7.47.9(@types/node@20.14.10))(jiti@1.21.6)(postcss@8.4.47)(typescript@5.5.3)(yaml@2.4.5) + version: 8.3.0(@microsoft/api-extractor@7.47.9(@types/node@20.14.10))(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.5.3)(yaml@2.4.5) typescript: specifier: 5.5.3 version: 5.5.3 @@ -5277,6 +5277,9 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + get-uri@6.0.3: resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} engines: {node: '>= 14'} @@ -7002,6 +7005,9 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve-url-loader@5.0.0: resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==} engines: {node: '>=12'} @@ -7735,6 +7741,11 @@ packages: peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + tsx@4.19.1: + resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==} + engines: {node: '>=18.0.0'} + hasBin: true + tuf-js@2.2.1: resolution: {integrity: sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==} engines: {node: ^16.14.0 || >=18.0.0} @@ -8514,7 +8525,7 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.1703.7(chokidar@3.6.0) - '@angular-devkit/build-webpack': 0.1703.7(chokidar@3.6.0)(webpack-dev-server@4.15.1(webpack@5.90.3(esbuild@0.20.1)))(webpack@5.90.3(esbuild@0.20.1)) + '@angular-devkit/build-webpack': 0.1703.7(chokidar@3.6.0)(webpack-dev-server@4.15.1(webpack@5.90.3(esbuild@0.23.1)))(webpack@5.90.3(esbuild@0.20.1)) '@angular-devkit/core': 17.3.7(chokidar@3.6.0) '@angular/compiler-cli': 17.3.9(@angular/compiler@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.7)))(typescript@5.5.3) '@babel/core': 7.24.0 @@ -8572,9 +8583,9 @@ snapshots: undici: 6.11.1 vite: 5.1.7(@types/node@20.14.10)(less@4.2.0)(sass@1.71.1)(terser@5.29.1) watchpack: 2.4.0 - webpack: 5.90.3(esbuild@0.23.1) + webpack: 5.90.3(esbuild@0.20.1) webpack-dev-middleware: 6.1.2(webpack@5.90.3(esbuild@0.20.1)) - webpack-dev-server: 4.15.1(webpack@5.90.3(esbuild@0.20.1)) + webpack-dev-server: 4.15.1(webpack@5.90.3(esbuild@0.23.1)) webpack-merge: 5.10.0 webpack-subresource-integrity: 5.1.0(webpack@5.90.3(esbuild@0.20.1)) optionalDependencies: @@ -8599,12 +8610,12 @@ snapshots: - utf-8-validate - webpack-cli - '@angular-devkit/build-webpack@0.1703.7(chokidar@3.6.0)(webpack-dev-server@4.15.1(webpack@5.90.3(esbuild@0.20.1)))(webpack@5.90.3(esbuild@0.20.1))': + '@angular-devkit/build-webpack@0.1703.7(chokidar@3.6.0)(webpack-dev-server@4.15.1(webpack@5.90.3(esbuild@0.23.1)))(webpack@5.90.3(esbuild@0.20.1))': dependencies: '@angular-devkit/architect': 0.1703.7(chokidar@3.6.0) rxjs: 7.8.1 - webpack: 5.90.3(esbuild@0.23.1) - webpack-dev-server: 4.15.1(webpack@5.90.3(esbuild@0.20.1)) + webpack: 5.90.3(esbuild@0.20.1) + webpack-dev-server: 4.15.1(webpack@5.90.3(esbuild@0.23.1)) transitivePeerDependencies: - chokidar @@ -10426,7 +10437,7 @@ snapshots: dependencies: '@angular/compiler-cli': 17.3.9(@angular/compiler@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.7)))(typescript@5.5.3) typescript: 5.5.3 - webpack: 5.90.3(esbuild@0.23.1) + webpack: 5.90.3(esbuild@0.20.1) '@nodelib/fs.scandir@2.1.5': dependencies: @@ -12351,14 +12362,13 @@ snapshots: acorn-walk@8.3.3: dependencies: - acorn: 8.12.0 + acorn: 8.12.1 acorn@7.4.1: {} acorn@8.12.0: {} - acorn@8.12.1: - optional: true + acorn@8.12.1: {} adjust-sourcemap-loader@4.0.0: dependencies: @@ -12566,7 +12576,7 @@ snapshots: '@babel/core': 7.24.0 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.90.3(esbuild@0.23.1) + webpack: 5.90.3(esbuild@0.20.1) babel-plugin-istanbul@6.1.1: dependencies: @@ -13003,7 +13013,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.90.3(esbuild@0.23.1) + webpack: 5.90.3(esbuild@0.20.1) core-js-compat@3.37.1: dependencies: @@ -13055,7 +13065,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.2 optionalDependencies: - webpack: 5.90.3(esbuild@0.23.1) + webpack: 5.90.3(esbuild@0.20.1) css-select@5.1.0: dependencies: @@ -13930,6 +13940,11 @@ snapshots: get-stream@8.0.1: {} + get-tsconfig@4.8.1: + dependencies: + resolve-pkg-maps: 1.0.0 + optional: true + get-uri@6.0.3: dependencies: basic-ftp: 5.0.5 @@ -14474,7 +14489,7 @@ snapshots: dependencies: klona: 2.0.6 less: 4.2.0 - webpack: 5.90.3(esbuild@0.23.1) + webpack: 5.90.3(esbuild@0.20.1) less@4.2.0: dependencies: @@ -14499,7 +14514,7 @@ snapshots: dependencies: webpack-sources: 3.2.3 optionalDependencies: - webpack: 5.90.3(esbuild@0.23.1) + webpack: 5.90.3(esbuild@0.20.1) lilconfig@2.1.0: {} @@ -14725,7 +14740,7 @@ snapshots: dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.90.3(esbuild@0.23.1) + webpack: 5.90.3(esbuild@0.20.1) minimalistic-assert@1.0.1: {} @@ -15311,12 +15326,13 @@ snapshots: postcss: 8.4.39 ts-node: 10.9.2(@types/node@20.14.5)(typescript@5.5.3) - postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.47)(yaml@2.4.5): + postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(yaml@2.4.5): dependencies: lilconfig: 3.1.2 optionalDependencies: jiti: 1.21.6 postcss: 8.4.47 + tsx: 4.19.1 yaml: 2.4.5 postcss-loader@8.1.1(postcss@8.4.35)(typescript@5.5.3)(webpack@5.90.3(esbuild@0.20.1)): @@ -15326,7 +15342,7 @@ snapshots: postcss: 8.4.35 semver: 7.6.2 optionalDependencies: - webpack: 5.90.3(esbuild@0.23.1) + webpack: 5.90.3(esbuild@0.20.1) transitivePeerDependencies: - typescript @@ -15666,6 +15682,9 @@ snapshots: resolve-from@5.0.0: {} + resolve-pkg-maps@1.0.0: + optional: true + resolve-url-loader@5.0.0: dependencies: adjust-sourcemap-loader: 4.0.0 @@ -15788,13 +15807,13 @@ snapshots: neo-async: 2.6.2 optionalDependencies: sass: 1.71.1 - webpack: 5.90.3(esbuild@0.23.1) + webpack: 5.90.3(esbuild@0.20.1) sass@1.71.1: dependencies: chokidar: 3.6.0 immutable: 4.3.6 - source-map-js: 1.2.0 + source-map-js: 1.2.1 sax@1.4.1: optional: true @@ -16022,7 +16041,7 @@ snapshots: dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.0 - webpack: 5.90.3(esbuild@0.23.1) + webpack: 5.90.3(esbuild@0.20.1) source-map-support@0.5.21: dependencies: @@ -16379,16 +16398,16 @@ snapshots: term-size@2.2.1: {} - terser-webpack-plugin@5.3.10(esbuild@0.23.1)(webpack@5.90.3(esbuild@0.20.1)): + terser-webpack-plugin@5.3.10(esbuild@0.20.1)(webpack@5.90.3(esbuild@0.23.1)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.29.1 - webpack: 5.90.3(esbuild@0.23.1) + webpack: 5.90.3(esbuild@0.20.1) optionalDependencies: - esbuild: 0.23.1 + esbuild: 0.20.1 terser@5.29.1: dependencies: @@ -16496,7 +16515,7 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 20.14.10 - acorn: 8.12.0 + acorn: 8.12.1 acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 @@ -16531,7 +16550,7 @@ snapshots: tslib@2.6.3: {} - tsup@8.3.0(@microsoft/api-extractor@7.47.9(@types/node@20.14.10))(jiti@1.21.6)(postcss@8.4.47)(typescript@5.5.3)(yaml@2.4.5): + tsup@8.3.0(@microsoft/api-extractor@7.47.9(@types/node@20.14.10))(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.5.3)(yaml@2.4.5): dependencies: bundle-require: 5.0.0(esbuild@0.23.1) cac: 6.7.14 @@ -16542,7 +16561,7 @@ snapshots: execa: 5.1.1 joycon: 3.1.1 picocolors: 1.0.1 - postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.4.47)(yaml@2.4.5) + postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(yaml@2.4.5) resolve-from: 5.0.0 rollup: 4.22.0 source-map: 0.8.0-beta.0 @@ -16564,6 +16583,14 @@ snapshots: tslib: 1.14.1 typescript: 5.5.3 + tsx@4.19.1: + dependencies: + esbuild: 0.23.1 + get-tsconfig: 4.8.1 + optionalDependencies: + fsevents: 2.3.3 + optional: true + tuf-js@2.2.1: dependencies: '@tufjs/models': 2.0.1 @@ -17094,14 +17121,14 @@ snapshots: webidl-conversions@7.0.0: {} - webpack-dev-middleware@5.3.4(webpack@5.90.3(esbuild@0.20.1)): + webpack-dev-middleware@5.3.4(webpack@5.90.3(esbuild@0.23.1)): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.90.3(esbuild@0.23.1) + webpack: 5.90.3(esbuild@0.20.1) webpack-dev-middleware@6.1.2(webpack@5.90.3(esbuild@0.20.1)): dependencies: @@ -17111,9 +17138,9 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.2.0 optionalDependencies: - webpack: 5.90.3(esbuild@0.23.1) + webpack: 5.90.3(esbuild@0.20.1) - webpack-dev-server@4.15.1(webpack@5.90.3(esbuild@0.20.1)): + webpack-dev-server@4.15.1(webpack@5.90.3(esbuild@0.23.1)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -17143,10 +17170,10 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.90.3(esbuild@0.20.1)) + webpack-dev-middleware: 5.3.4(webpack@5.90.3(esbuild@0.23.1)) ws: 8.17.1 optionalDependencies: - webpack: 5.90.3(esbuild@0.23.1) + webpack: 5.90.3(esbuild@0.20.1) transitivePeerDependencies: - bufferutil - debug @@ -17164,9 +17191,9 @@ snapshots: webpack-subresource-integrity@5.1.0(webpack@5.90.3(esbuild@0.20.1)): dependencies: typed-assert: 1.0.9 - webpack: 5.90.3(esbuild@0.23.1) + webpack: 5.90.3(esbuild@0.20.1) - webpack@5.90.3(esbuild@0.23.1): + webpack@5.90.3(esbuild@0.20.1): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.5 @@ -17189,7 +17216,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.23.1)(webpack@5.90.3(esbuild@0.20.1)) + terser-webpack-plugin: 5.3.10(esbuild@0.20.1)(webpack@5.90.3(esbuild@0.23.1)) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: