summaryrefslogtreecommitdiff
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
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>
-rw-r--r--runtime/Cargo.toml8
-rw-r--r--runtime/examples/extension/bootstrap.js (renamed from runtime/examples/extension_with_esm/bootstrap.js)4
-rw-r--r--runtime/examples/extension/main.js (renamed from runtime/examples/extension_with_esm/main.js)4
-rw-r--r--runtime/examples/extension/main.rs (renamed from runtime/examples/extension_with_esm/main.rs)14
-rw-r--r--runtime/examples/extension_with_ops/main.js2
-rw-r--r--runtime/examples/extension_with_ops/main.rs38
-rw-r--r--runtime/ops/bootstrap.rs13
-rw-r--r--runtime/worker.rs7
8 files changed, 36 insertions, 54 deletions
diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml
index c27ae1012..484266888 100644
--- a/runtime/Cargo.toml
+++ b/runtime/Cargo.toml
@@ -33,12 +33,8 @@ name = "deno_runtime"
path = "lib.rs"
[[example]]
-name = "extension_with_esm"
-path = "examples/extension_with_esm/main.rs"
-
-[[example]]
-name = "extension_with_ops"
-path = "examples/extension_with_ops/main.rs"
+name = "extension"
+path = "examples/extension/main.rs"
[build-dependencies]
deno_ast.workspace = true
diff --git a/runtime/examples/extension_with_esm/bootstrap.js b/runtime/examples/extension/bootstrap.js
index 7cbff9cb3..9461acb84 100644
--- a/runtime/examples/extension_with_esm/bootstrap.js
+++ b/runtime/examples/extension/bootstrap.js
@@ -1,5 +1,7 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+import { op_hello } from "ext:core/ops";
function hello() {
- console.log("Hello from extension!");
+ op_hello("world");
}
+
globalThis.Extension = { hello };
diff --git a/runtime/examples/extension_with_esm/main.js b/runtime/examples/extension/main.js
index fe9be8c26..4d6e4e3b7 100644
--- a/runtime/examples/extension_with_esm/main.js
+++ b/runtime/examples/extension/main.js
@@ -1,4 +1,4 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
-console.log("Hello world!");
-console.log(Deno);
+console.log("Hello world from JS!");
+console.log(Deno.build);
Extension.hello();
diff --git a/runtime/examples/extension_with_esm/main.rs b/runtime/examples/extension/main.rs
index c635761e1..0026d0de0 100644
--- a/runtime/examples/extension_with_esm/main.rs
+++ b/runtime/examples/extension/main.rs
@@ -4,23 +4,31 @@ 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_with_esm", "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_with_esm/main.js");
+ 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(),
diff --git a/runtime/examples/extension_with_ops/main.js b/runtime/examples/extension_with_ops/main.js
deleted file mode 100644
index d7cdc1ec4..000000000
--- a/runtime/examples/extension_with_ops/main.js
+++ /dev/null
@@ -1,2 +0,0 @@
-// Copyright 2018-2024 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
deleted file mode 100644
index f0b4364b5..000000000
--- a/runtime/examples/extension_with_ops/main.rs
+++ /dev/null
@@ -1,38 +0,0 @@
-// 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;
-
-deno_core::extension!(hello_runtime, ops = [op_hello]);
-
-#[op2(fast)]
-fn op_hello(#[string] 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(())
-}
diff --git a/runtime/ops/bootstrap.rs b/runtime/ops/bootstrap.rs
index 7de532a9f..cbb87db88 100644
--- a/runtime/ops/bootstrap.rs
+++ b/runtime/ops/bootstrap.rs
@@ -30,7 +30,7 @@ deno_core::extension!(
},
);
-#[derive(Serialize, Default)]
+#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SnapshotOptions {
pub deno_version: String,
@@ -39,6 +39,17 @@ pub struct SnapshotOptions {
pub target: String,
}
+impl Default for SnapshotOptions {
+ fn default() -> Self {
+ Self {
+ deno_version: "dev".to_owned(),
+ ts_version: "n/a".to_owned(),
+ v8_version: deno_core::v8_version(),
+ target: std::env::consts::ARCH.to_owned(),
+ }
+ }
+}
+
// Note: Called at snapshot time, op perf is not a concern.
#[op2]
#[serde]
diff --git a/runtime/worker.rs b/runtime/worker.rs
index 97ea53980..2fb32c766 100644
--- a/runtime/worker.rs
+++ b/runtime/worker.rs
@@ -566,11 +566,16 @@ impl MainWorker {
}
let scope = &mut self.js_runtime.handle_scope();
+ let scope = &mut v8::TryCatch::new(scope);
let args = options.as_v8(scope);
let bootstrap_fn = self.bootstrap_fn_global.take().unwrap();
let bootstrap_fn = v8::Local::new(scope, bootstrap_fn);
let undefined = v8::undefined(scope);
- bootstrap_fn.call(scope, undefined.into(), &[args]).unwrap();
+ bootstrap_fn.call(scope, undefined.into(), &[args]);
+ if let Some(exception) = scope.exception() {
+ let error = JsError::from_v8_exception(scope, exception);
+ panic!("Bootstrap exception: {error}");
+ }
}
/// See [JsRuntime::execute_script](deno_core::JsRuntime::execute_script)