summaryrefslogtreecommitdiff
path: root/ext/node/polyfills/01_require.js
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2024-11-01 12:27:00 -0400
committerGitHub <noreply@github.com>2024-11-01 12:27:00 -0400
commit826e42a5b5880c974ae019a7a21aade6a718062c (patch)
treea46502ecc3c73e4f7fc3a4517d83c7b2f3d0c0d3 /ext/node/polyfills/01_require.js
parent4774eab64d5176e997b6431f03f075782321b3d9 (diff)
fix: improved support for cjs and cts modules (#26558)
* cts support * better cjs/cts type checking * deno compile cjs/cts support * More efficient detect cjs (going towards stabilization) * Determination of whether .js, .ts, .jsx, or .tsx is cjs or esm is only done after loading * Support `import x = require(...);` Co-authored-by: Bartek IwaƄczuk <biwanczuk@gmail.com>
Diffstat (limited to 'ext/node/polyfills/01_require.js')
-rw-r--r--ext/node/polyfills/01_require.js31
1 files changed, 28 insertions, 3 deletions
diff --git a/ext/node/polyfills/01_require.js b/ext/node/polyfills/01_require.js
index 7935903a8..296d819aa 100644
--- a/ext/node/polyfills/01_require.js
+++ b/ext/node/polyfills/01_require.js
@@ -1071,13 +1071,35 @@ Module._extensions[".js"] = function (module, filename) {
} else if (pkg?.type === "commonjs") {
format = "commonjs";
}
- } else if (StringPrototypeEndsWith(filename, ".cjs")) {
- format = "commonjs";
}
module._compile(content, filename, format);
};
+Module._extensions[".ts"] =
+ Module._extensions[".jsx"] =
+ Module._extensions[".tsx"] =
+ function (module, filename) {
+ const content = op_require_read_file(filename);
+
+ let format;
+ const pkg = op_require_read_closest_package_json(filename);
+ if (pkg?.type === "module") {
+ format = "module";
+ } else if (pkg?.type === "commonjs") {
+ format = "commonjs";
+ }
+
+ module._compile(content, filename, format);
+ };
+
+Module._extensions[".cjs"] =
+ Module._extensions[".cts"] =
+ function (module, filename) {
+ const content = op_require_read_file(filename);
+ module._compile(content, filename, "commonjs");
+ };
+
function loadESMFromCJS(module, filename, code) {
const namespace = op_import_sync(
url.pathToFileURL(filename).toString(),
@@ -1087,7 +1109,10 @@ function loadESMFromCJS(module, filename, code) {
module.exports = namespace;
}
-Module._extensions[".mjs"] = function (module, filename) {
+Module._extensions[".mjs"] = Module._extensions[".mts"] = function (
+ module,
+ filename,
+) {
loadESMFromCJS(module, filename);
};