summaryrefslogtreecommitdiff
path: root/runtime/examples
diff options
context:
space:
mode:
authorExidex <16986685+Exidex@users.noreply.github.com>2023-05-31 22:26:24 +0200
committerGitHub <noreply@github.com>2023-05-31 14:26:24 -0600
commitf3193e0e1c12ea139f00d6b19d152b95f37b73c3 (patch)
treee53d0a2bad466194a319d414c2f44caafcb538d6 /runtime/examples
parentb1e28b0708b378fa6cbe3a0ec95bb94b33775355 (diff)
feat(runtime): Add example for extension with ops (#19204)
Spend quite some time trying to get this working. With proper example would have been a lot faster. So this is pr with the example. I also rearranged examples a little bit to allow for addition of more examples
Diffstat (limited to 'runtime/examples')
-rw-r--r--runtime/examples/extension_with_esm/bootstrap.js (renamed from runtime/examples/hello_runtime_bootstrap.js)0
-rw-r--r--runtime/examples/extension_with_esm/main.js (renamed from runtime/examples/hello_runtime.js)0
-rw-r--r--runtime/examples/extension_with_esm/main.rs (renamed from runtime/examples/hello_runtime.rs)13
-rw-r--r--runtime/examples/extension_with_ops/main.js2
-rw-r--r--runtime/examples/extension_with_ops/main.rs44
5 files changed, 53 insertions, 6 deletions
diff --git a/runtime/examples/hello_runtime_bootstrap.js b/runtime/examples/extension_with_esm/bootstrap.js
index 759dde939..759dde939 100644
--- a/runtime/examples/hello_runtime_bootstrap.js
+++ b/runtime/examples/extension_with_esm/bootstrap.js
diff --git a/runtime/examples/hello_runtime.js b/runtime/examples/extension_with_esm/main.js
index 5b079d8d8..5b079d8d8 100644
--- a/runtime/examples/hello_runtime.js
+++ b/runtime/examples/extension_with_esm/main.js
diff --git a/runtime/examples/hello_runtime.rs b/runtime/examples/extension_with_esm/main.rs
index d4e39dd2d..6b21460a3 100644
--- a/runtime/examples/hello_runtime.rs
+++ b/runtime/examples/extension_with_esm/main.rs
@@ -1,24 +1,25 @@
// 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;
-use std::path::Path;
-use std::rc::Rc;
deno_core::extension!(
hello_runtime,
- esm_entry_point = "ext:hello_runtime/hello_runtime_bootstrap.js",
- esm = ["hello_runtime_bootstrap.js"]
+ 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/hello_runtime.js");
+ 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(),
diff --git a/runtime/examples/extension_with_ops/main.js b/runtime/examples/extension_with_ops/main.js
new file mode 100644
index 000000000..042573c08
--- /dev/null
+++ b/runtime/examples/extension_with_ops/main.js
@@ -0,0 +1,2 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+Deno[Deno.internal].core.ops.op_hello("World");
diff --git a/runtime/examples/extension_with_ops/main.rs b/runtime/examples/extension_with_ops/main.rs
new file mode 100644
index 000000000..47feaeaeb
--- /dev/null
+++ b/runtime/examples/extension_with_ops/main.rs
@@ -0,0 +1,44 @@
+// 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::op;
+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,
+ ops = [op_hello],
+ customizer = |ext: &mut deno_core::ExtensionBuilder| {
+ ext.force_op_registration();
+ },
+);
+
+#[op]
+fn op_hello(text: &str) {
+ println!("Hello {}!", text);
+}
+
+#[tokio::main]
+async fn main() -> Result<(), AnyError> {
+ let js_path = Path::new(env!("CARGO_MANIFEST_DIR"))
+ .join("examples/extension_with_ops/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()],
+ ..Default::default()
+ },
+ );
+ worker.execute_main_module(&main_module).await?;
+ worker.run_event_loop(false).await?;
+ Ok(())
+}