Comments (3)
If your .cts
files contain text like
import syntheticDefaultImport from "./cjs-to-cjs-js.cjs";
import * as starImport from "./cjs-to-cjs-js.cjs";
instead of require()
calls, then the resulting .cjs
file absolutely is a transpiled ES module.
from typescript.
I fully understand that, but the problem is not there. It's in the cjs-to-cjs-js.cjs
file:
exports.message = "This is a CommonJS module transpiled to CommonJS (expect no marker).";
This is transpiled to:
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.message = "This is a CommonJS module transpiled to CommonJS (expect no marker).";
Note the incorrect Object.defineProperty(exports, "__esModule", { value: true });
line. This causes the TypeScript syntheticDefault
function to fail (as it should if this were really a transpiled ESM).
Here is the function that is generated by default import calls translated to require
:
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
The problem seems to be in shouldEmitUnderscoreUnderscoreESModule
that only checks that the file is external and has no 'exportEquals', which is the TypeScript construct:
export = ...
Note that this construct doesn't work with real CommonJS code (no matter if it's in a TS source or JS source) and thus wrongly emits the marker:
exports = ...
module.exports = ...
A reasonable solution could be to extend the test to other variants of exports =, but I don't know enough about the code to understand how this can be done reliably. Another reasonable variant is to never emit this for js files that are indicated to be commonjs already (based on filename, there is a system for this in place)
from typescript.
The definite bug is that the checking and the emit are misaligned. The checking assumes a “true“ CJS module while the emit produces a transpiled ESM-transpiled-to-CJS module. And I agree the input JS should be the source of truth here; i.e. it should emit as a true CJS module.
from typescript.
Related Issues (20)
- isolatedDeclarations should not have warning for functions that have no return statements HOT 4
- Trivia ownership documentation seems to be incorrect
- `--isolatedDeclarations` allows generator functions HOT 1
- Allow `--noCheck` on the CLI with top-level `--build`
- Union in template literal simplifying unexpectedly HOT 5
- Default import from an ESM package into a CommonJS project with esModuleInterop is faulty HOT 3
- Watch cannot handle large amount of file changes HOT 1
- generator next type should be inferred as union (instead of intersection) of yields' types OR just unknown
- Elementwise elaboration fails to be found for properties mixed with incompatible index signatures using intersections
- Error when accessing properties on `globalThis` with the same name of a global variable
- [NewErrors] 5.5.0-dev.20240428 vs 5.4.5 HOT 49
- Private class properties prevent `Readonly` type inference HOT 2
- [ServerErrors][TypeScript] 5.5.0-dev.20240428 HOT 12
- [ServerErrors][JavaScript] 5.5.0-dev.20240428 HOT 9
- Strange runtime caching bug involving `as const` and `const T` generic HOT 1
- When relatively importing a `.d.ts` file in a declaration file, TypeScript loads a `.ts` file instead HOT 7
- Calling decorators with @ loses type safety with function as argument HOT 1
- Include error maps in the typescript libraries for web apis to give developers easy access to potential thrown exceptions HOT 2
- jsdoc @type does not resolve a type
- Removing `node_modules`, running `npm ci` leaves diagnostics behind in ts and tsconfig files
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from typescript.