summaryrefslogtreecommitdiff
path: root/ext/node/ops/require.rs
diff options
context:
space:
mode:
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()
+}