summaryrefslogtreecommitdiff
path: root/runtime/examples/extension/main.rs
diff options
context:
space:
mode:
authorMatt Mastracci <matthew@mastracci.com>2024-03-13 21:23:37 -0600
committerGitHub <noreply@github.com>2024-03-14 04:23:37 +0100
commit66fd6f286641d4d2491d7b4bb314bd7e7eff16d8 (patch)
treeb84aa4cac4c0a756539c91e5df4193d3636ae2bb /runtime/examples/extension/main.rs
parent1f3c4c976313904d5df0b33b2cc0e282e62d1000 (diff)
fix(cli): unbreak extension example and fix __runtime_js_sources (#22906)
Better example to close https://github.com/denoland/deno/issues/22600 --------- Signed-off-by: Matt Mastracci <matthew@mastracci.com>
Diffstat (limited to 'runtime/examples/extension/main.rs')
-rw-r--r--runtime/examples/extension/main.rs44
1 files changed, 44 insertions, 0 deletions
diff --git a/runtime/examples/extension/main.rs b/runtime/examples/extension/main.rs
new file mode 100644
index 000000000..0026d0de0
--- /dev/null
+++ b/runtime/examples/extension/main.rs
@@ -0,0 +1,44 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+
+use std::path::Path;
+use std::rc::Rc;
+
+use deno_core::error::AnyError;
+use deno_core::op2;
+use deno_core::FsModuleLoader;
+use deno_core::ModuleSpecifier;
+use deno_runtime::permissions::PermissionsContainer;
+use deno_runtime::worker::MainWorker;
+use deno_runtime::worker::WorkerOptions;
+
+#[op2(fast)]
+fn op_hello(#[string] text: &str) {
+ println!("Hello {} from an op!", text);
+}
+
+deno_core::extension!(
+ hello_runtime,
+ ops = [op_hello],
+ esm_entry_point = "ext:hello_runtime/bootstrap.js",
+ esm = [dir "examples/extension", "bootstrap.js"]
+);
+
+#[tokio::main]
+async fn main() -> Result<(), AnyError> {
+ let js_path =
+ Path::new(env!("CARGO_MANIFEST_DIR")).join("examples/extension/main.js");
+ let main_module = ModuleSpecifier::from_file_path(js_path).unwrap();
+ eprintln!("Running {main_module}...");
+ 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(())
+}