summaryrefslogtreecommitdiff
path: root/runtime/examples/extension_with_esm
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/examples/extension_with_esm')
-rw-r--r--runtime/examples/extension_with_esm/bootstrap.js5
-rw-r--r--runtime/examples/extension_with_esm/main.js4
-rw-r--r--runtime/examples/extension_with_esm/main.rs36
3 files changed, 45 insertions, 0 deletions
diff --git a/runtime/examples/extension_with_esm/bootstrap.js b/runtime/examples/extension_with_esm/bootstrap.js
new file mode 100644
index 000000000..759dde939
--- /dev/null
+++ b/runtime/examples/extension_with_esm/bootstrap.js
@@ -0,0 +1,5 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+function hello() {
+ console.log("Hello from extension!");
+}
+globalThis.Extension = { hello };
diff --git a/runtime/examples/extension_with_esm/main.js b/runtime/examples/extension_with_esm/main.js
new file mode 100644
index 000000000..5b079d8d8
--- /dev/null
+++ b/runtime/examples/extension_with_esm/main.js
@@ -0,0 +1,4 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+console.log("Hello world!");
+console.log(Deno);
+Extension.hello();
diff --git a/runtime/examples/extension_with_esm/main.rs b/runtime/examples/extension_with_esm/main.rs
new file mode 100644
index 000000000..6b21460a3
--- /dev/null
+++ b/runtime/examples/extension_with_esm/main.rs
@@ -0,0 +1,36 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+
+use std::path::Path;
+use std::rc::Rc;
+
+use deno_core::error::AnyError;
+use deno_core::FsModuleLoader;
+use deno_core::ModuleSpecifier;
+use deno_runtime::permissions::PermissionsContainer;
+use deno_runtime::worker::MainWorker;
+use deno_runtime::worker::WorkerOptions;
+
+deno_core::extension!(
+ hello_runtime,
+ esm_entry_point = "ext:hello_runtime/bootstrap.js",
+ esm = ["bootstrap.js"]
+);
+
+#[tokio::main]
+async fn main() -> Result<(), AnyError> {
+ let js_path = Path::new(env!("CARGO_MANIFEST_DIR"))
+ .join("examples/extension_with_esm/main.js");
+ let main_module = ModuleSpecifier::from_file_path(js_path).unwrap();
+ let mut worker = MainWorker::bootstrap_from_options(
+ main_module.clone(),
+ PermissionsContainer::allow_all(),
+ WorkerOptions {
+ module_loader: Rc::new(FsModuleLoader),
+ extensions: vec![hello_runtime::init_ops_and_esm()],
+ ..Default::default()
+ },
+ );
+ worker.execute_main_module(&main_module).await?;
+ worker.run_event_loop(false).await?;
+ Ok(())
+}