diff options
author | Matt Mastracci <matthew@mastracci.com> | 2024-03-13 21:23:37 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-14 04:23:37 +0100 |
commit | 66fd6f286641d4d2491d7b4bb314bd7e7eff16d8 (patch) | |
tree | b84aa4cac4c0a756539c91e5df4193d3636ae2bb /runtime/examples/extension/main.rs | |
parent | 1f3c4c976313904d5df0b33b2cc0e282e62d1000 (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.rs | 44 |
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(()) +} |