cjs-module-lexer icon indicating copy to clipboard operation
cjs-module-lexer copied to clipboard

Not work well with TypeScript export default as output

Open chentsulin opened this issue 2 years ago • 2 comments

Hi,

TypeScript export default as syntax seems not working with this module. Considering the following TS code:

export { default as fs } from 'fs'; 

Test its output with cjs-module-lexer:

const { parse } = require('cjs-module-lexer');

const result = parse(`
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.fs = void 0;
var fs_1 = require("fs");
Object.defineProperty(exports, "fs", { enumerable: true, get: function () { return __importDefault(fs_1).default; } });
`);

console.log(result);

It prints:

{ exports: [ '__esModule' ], reexports: [] }

fs do not be considered as exports in the above case.

And I also figure out that changing the place of the __importDefault call

var fs_1 = require("fs");
Object.defineProperty(exports, "fs", { enumerable: true, get: function () { return __importDefault(fs_1).default; } });

to something like this one (what babel does):

var fs_1 = __importDefault(require("fs"));
Object.defineProperty(exports, "fs", { enumerable: true, get: function () { return fs_1.default; } });

The result will become:

{ exports: [ '__esModule', 'fs'], reexports: [] }

Is this an expected behavior?

Ref:

chentsulin avatar Jun 08 '22 07:06 chentsulin

Experiencing the same problem. react-share@4.4.0 is one such package and has no named exports except __esModule when imported from .mjs.

qnighy avatar Jun 15 '22 10:06 qnighy

@guybedford Could you take a look on this? Is the behavior expected?

chentsulin avatar Jul 12 '22 02:07 chentsulin