[enhancement] openapi-response-validator: native ESM node modules default export not working as intended
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
plz submit a PR
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.
same issue with import OpenAPISchemaValidator from 'openapi-schema-validator', workarounds not working. Property 'default' does not exist on type 'typeof OpenAPISchemaValidator'