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 1 year 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