open-api icon indicating copy to clipboard operation
open-api copied to clipboard

[enhancement] openapi-response-validator: native ESM node modules default export not working as intended

Open webketje opened this issue 2 years ago • 3 comments

Context

  • openapi-response-validator version: 12.1.3
  • Node version: 18.12.1
  • Package type: module (native node ESM ending in .js)

Bug

import OpenAPIResponseValidator from 'openapi-response-validator'
const validator = new OpenAPIResponseValidator({ responses: { }, components: {}})
// throws "OpenAPIResponseValidator is not a constructor"
// because OpenAPIResponseValidator === { __esModule: true, default: function OpenAPIResponseValidator () {}}

Temp fixes

(clunky, TS types intellisense no longer working in VS Code)

import OpenAPIResponseValidator from 'openapi-response-validator'
const validator = new OpenAPIResponseValidator.default({ responses: { }, components: {}})

or (in generated code, not clean but working) Replace following statements

exports.__esModule = true
exports["default"] = OpenAPIResponseValidator

with

OpenAPIResponseValidator.default = OpenAPIResponseValidator
OpenAPIResponseValidator.__esModule = true
module.exports = OpenAPIResponseValidator

Solution

Provide different entrypoints in dist and expose them to the relevant environments using package.json main, module and exports fields. Alternatively, manually wrap output in a UMD wrapper

webketje avatar May 25 '23 12:05 webketje

plz submit a PR

jsdevel avatar May 25 '23 14:05 jsdevel

The same issue also exists for OpenAPIRequestValidator and OpenAPIRequestCoercer. As mentioned by the reporter, using

new OpenAPIRequestValidator.default(...)
new OpenAPIResponseValidator.default(...)
new OpenAPIRequestCoercer.default(...)

instead of

new OpenAPIRequestValidator(...)
new OpenAPIResponseValidator(...)
new OpenAPIRequestCoercer(...)

is a workaround for ESM projects. For CommonJS projects, the workaround is not necessary.

renkei avatar Jun 04 '23 12:06 renkei

same issue with import OpenAPISchemaValidator from 'openapi-schema-validator', workarounds not working. Property 'default' does not exist on type 'typeof OpenAPISchemaValidator'

jtlindsey avatar Oct 31 '23 23:10 jtlindsey