mirror of
https://github.com/denoland/deno.git
synced 2024-12-21 23:04:45 -05:00
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>
This commit is contained in:
parent
1f3c4c9763
commit
66fd6f2866
8 changed files with 36 additions and 54 deletions
|
@ -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
|
||||
|
|
|
@ -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 };
|
|
@ -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();
|
|
@ -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(),
|
|
@ -1,2 +0,0 @@
|
|||
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
||||
Deno[Deno.internal].core.ops.op_hello("World");
|
|
@ -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(())
|
||||
}
|
|
@ -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]
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue