Skip to content

commonjs transform is invalid for npm:qs #3492

@CertainLach

Description

@CertainLach

Given the following code based on /home/lach/.cache/deno/npm/registry.npmjs.org/qs/6.14.0/lib/formats.js

var replace = String.prototype.replace;
var percentTwenties = /%20/g;

var Format = {
  RFC3986: 'RFC3986'
};

module.exports = {
  'default': Format.RFC3986,
  formatters: {
    RFC3986: function (value) {
      return String(value);
    }
  },
  RFC3986: Format.RFC3986
};

Fresh produces the following:

+   var exports = {},
+     module = {};
+   Object.defineProperty(module, "exports", {
+     get() {
+       return exports;
+     },
+     set(value) {
+       exports = value;
+     }
+   });
    var replace = String.prototype.replace;
    var percentTwenties = /%20/g;
    var Format = {
      RFC3986: 'RFC3986'
    };
    module.exports = {
      'default': Format.RFC3986,
      formatters: {
        RFC3986: function (value) {
          return String(value);
        }
      },
      RFC3986: Format.RFC3986
    };
+   var _formatters = exports.formatters;
+   var _RFC = exports.RFC3986;
+   export { _formatters as formatters, _RFC as RFC3986 };
+   const _default = exports.default ?? exports;
+   _default.formatters = _formatters;
+   _default.RFC3986 = _RFC;
+   export default _default;
+   export var __require = exports;

That crashes with the following error: TypeError: Cannot create property 'formatters' on string 'RFC3986'

Altering the default export like this doesn't seem to be right, perhaps this part:

const _default = exports.default ?? exports;
_default.formatters = _formatters;
_default.RFC3986 = _RFC;

Should be rewritten as

let _default;
if ('default' in exports) {
  _default = exports.default;
} else {
  _default = exports;
  _default.formatters = _formatters;
  _default.RFC3986 = _RFC;
}

instead.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions