summaryrefslogtreecommitdiff
path: root/ext/node/ops/require.rs
diff options
context:
space:
mode:
authorsnek <snek@deno.com>2024-09-10 13:12:36 -0700
committerGitHub <noreply@github.com>2024-09-10 20:12:36 +0000
commitf9007d3386bbe9f709ce413ac0cf099b86d4c4bf (patch)
tree3254119b37ef434062c431b2b4964d9317fb5f1a /ext/node/ops/require.rs
parentee3829a7787b337b2a7e98251b40d5937b2c255b (diff)
feat: require(esm) (#25501)
implement require(esm) using `op_import_sync` from deno_core. possible future changes: - cts and mts - replace Deno.core.evalContext to optimize esm syntax detection Fixes: https://github.com/denoland/deno/issues/25487
Diffstat (limited to 'ext/node/ops/require.rs')
-rw-r--r--ext/node/ops/require.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/ext/node/ops/require.rs b/ext/node/ops/require.rs
index 4f88c1913..3578719d0 100644
--- a/ext/node/ops/require.rs
+++ b/ext/node/ops/require.rs
@@ -6,6 +6,7 @@ use deno_core::error::AnyError;
use deno_core::normalize_path;
use deno_core::op2;
use deno_core::url::Url;
+use deno_core::v8;
use deno_core::JsRuntimeInspector;
use deno_core::ModuleSpecifier;
use deno_core::OpState;
@@ -614,3 +615,29 @@ fn url_to_file_path(url: &Url) -> Result<PathBuf, AnyError> {
}
}
}
+
+#[op2(fast)]
+pub fn op_require_can_parse_as_esm(
+ scope: &mut v8::HandleScope,
+ #[string] source: &str,
+) -> bool {
+ let scope = &mut v8::TryCatch::new(scope);
+ let Some(source) = v8::String::new(scope, source) else {
+ return false;
+ };
+ let origin = v8::ScriptOrigin::new(
+ scope,
+ source.into(),
+ 0,
+ 0,
+ false,
+ 0,
+ None,
+ true,
+ false,
+ true,
+ None,
+ );
+ let mut source = v8::script_compiler::Source::new(source, Some(&origin));
+ v8::script_compiler::compile_module(scope, &mut source).is_some()
+}