summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bench_util/benches/utf8.rs9
-rw-r--r--core/extensions.rs58
-rw-r--r--core/lib.rs1
-rw-r--r--core/runtime.rs18
-rw-r--r--ext/url/benches/url_ops.rs9
-rw-r--r--ext/web/benches/encoding.rs9
-rw-r--r--ext/web/benches/timers_ops.rs8
-rw-r--r--ext/webidl/benches/dict.rs6
8 files changed, 70 insertions, 48 deletions
diff --git a/bench_util/benches/utf8.rs b/bench_util/benches/utf8.rs
index 2bbf439b6..7a9066d1e 100644
--- a/bench_util/benches/utf8.rs
+++ b/bench_util/benches/utf8.rs
@@ -6,12 +6,13 @@ use deno_bench_util::bencher::benchmark_group;
use deno_bench_util::bencher::Bencher;
use deno_bench_util::BenchOptions;
use deno_core::Extension;
+use deno_core::ExtensionFileSource;
fn setup() -> Vec<Extension> {
vec![Extension::builder("bench_setup")
- .js(vec![(
- "setup.js",
- r#"
+ .js(vec![ExtensionFileSource {
+ specifier: "setup.js".to_string(),
+ code: r#"
const hello = "hello world\n";
const hello1k = hello.repeat(1e3);
const hello1m = hello.repeat(1e6);
@@ -19,7 +20,7 @@ fn setup() -> Vec<Extension> {
const hello1kEncoded = Deno.core.encode(hello1k);
const hello1mEncoded = Deno.core.encode(hello1m);
"#,
- )])
+ }])
.build()]
}
diff --git a/core/extensions.rs b/core/extensions.rs
index ba7bdb18a..e08e8c566 100644
--- a/core/extensions.rs
+++ b/core/extensions.rs
@@ -6,7 +6,10 @@ use std::rc::Rc;
use std::task::Context;
use v8::fast_api::FastFunction;
-pub type SourcePair = (String, &'static str);
+pub struct ExtensionFileSource {
+ pub specifier: String,
+ pub code: &'static str,
+}
pub type OpFnRef = v8::FunctionCallback;
pub type OpMiddlewareFn = dyn Fn(OpDecl) -> OpDecl;
pub type OpStateFn = dyn Fn(&mut OpState) -> Result<(), Error>;
@@ -37,8 +40,8 @@ impl OpDecl {
#[derive(Default)]
pub struct Extension {
- js_files: Option<Vec<SourcePair>>,
- esm_files: Option<Vec<SourcePair>>,
+ js_files: Option<Vec<ExtensionFileSource>>,
+ esm_files: Option<Vec<ExtensionFileSource>>,
ops: Option<Vec<OpDecl>>,
opstate_fn: Option<Box<OpStateFn>>,
middleware_fn: Option<Box<OpMiddlewareFn>>,
@@ -82,14 +85,14 @@ impl Extension {
/// returns JS source code to be loaded into the isolate (either at snapshotting,
/// or at startup). as a vector of a tuple of the file name, and the source code.
- pub fn get_js_sources(&self) -> &[SourcePair] {
+ pub fn get_js_sources(&self) -> &[ExtensionFileSource] {
match &self.js_files {
Some(files) => files,
None => &[],
}
}
- pub fn get_esm_sources(&self) -> &[SourcePair] {
+ pub fn get_esm_sources(&self) -> &[ExtensionFileSource] {
match &self.esm_files {
Some(files) => files,
None => &[],
@@ -152,8 +155,8 @@ impl Extension {
// Provides a convenient builder pattern to declare Extensions
#[derive(Default)]
pub struct ExtensionBuilder {
- js: Vec<SourcePair>,
- esm: Vec<SourcePair>,
+ js: Vec<ExtensionFileSource>,
+ esm: Vec<ExtensionFileSource>,
ops: Vec<OpDecl>,
state: Option<Box<OpStateFn>>,
middleware: Option<Box<OpMiddlewareFn>>,
@@ -168,26 +171,27 @@ impl ExtensionBuilder {
self
}
- pub fn js(
- &mut self,
- js_files: Vec<(&'static str, &'static str)>,
- ) -> &mut Self {
- let js_files = js_files.into_iter().map(|source_pair| {
- let name = format!("internal:{}/{}", self.name, source_pair.0);
- (name, source_pair.1)
- });
+ pub fn js(&mut self, js_files: Vec<ExtensionFileSource>) -> &mut Self {
+ let js_files =
+ js_files.into_iter().map(|file_source| ExtensionFileSource {
+ specifier: format!("internal:{}/{}", self.name, file_source.specifier),
+ code: file_source.code,
+ });
self.js.extend(js_files);
self
}
- pub fn esm(
- &mut self,
- esm_files: Vec<(&'static str, &'static str)>,
- ) -> &mut Self {
- let esm_files = esm_files.into_iter().map(|source_pair| {
- let name = format!("internal:{}/{}", self.name, source_pair.0);
- (name, source_pair.1)
- });
+ pub fn esm(&mut self, esm_files: Vec<ExtensionFileSource>) -> &mut Self {
+ let esm_files =
+ esm_files
+ .into_iter()
+ .map(|file_source| ExtensionFileSource {
+ specifier: format!(
+ "internal:{}/{}",
+ self.name, file_source.specifier
+ ),
+ code: file_source.code,
+ });
self.esm.extend(esm_files);
self
}
@@ -254,10 +258,10 @@ impl ExtensionBuilder {
macro_rules! include_js_files {
($($file:literal,)+) => {
vec![
- $((
- $file,
- include_str!($file),
- ),)+
+ $($crate::ExtensionFileSource {
+ specifier: $file.to_string(),
+ code: include_str!($file),
+ },)+
]
};
}
diff --git a/core/lib.rs b/core/lib.rs
index 868d6b749..86c432d43 100644
--- a/core/lib.rs
+++ b/core/lib.rs
@@ -54,6 +54,7 @@ pub use crate::async_cell::RcLike;
pub use crate::async_cell::RcRef;
pub use crate::extensions::Extension;
pub use crate::extensions::ExtensionBuilder;
+pub use crate::extensions::ExtensionFileSource;
pub use crate::extensions::OpDecl;
pub use crate::extensions::OpMiddlewareFn;
pub use crate::flags::v8_set_flags;
diff --git a/core/runtime.rs b/core/runtime.rs
index 096d26ca3..d4a9c697c 100644
--- a/core/runtime.rs
+++ b/core/runtime.rs
@@ -815,27 +815,33 @@ impl JsRuntime {
for ext in &extensions {
{
let js_files = ext.get_esm_sources();
- for (filename, source) in js_files {
+ for file_source in js_files {
futures::executor::block_on(async {
let id = self
.load_side_module(
- &ModuleSpecifier::parse(filename)?,
- Some(source.to_string()),
+ &ModuleSpecifier::parse(&file_source.specifier)?,
+ Some(file_source.code.to_string()),
)
.await?;
let receiver = self.mod_evaluate(id);
self.run_event_loop(false).await?;
receiver.await?
})
- .with_context(|| format!("Couldn't execute '{filename}'"))?;
+ .with_context(|| {
+ format!("Couldn't execute '{}'", file_source.specifier)
+ })?;
}
}
{
let js_files = ext.get_js_sources();
- for (filename, source) in js_files {
+ for file_source in js_files {
// TODO(@AaronO): use JsRuntime::execute_static() here to move src off heap
- realm.execute_script(self.v8_isolate(), filename, source)?;
+ realm.execute_script(
+ self.v8_isolate(),
+ &file_source.specifier,
+ file_source.code,
+ )?;
}
}
}
diff --git a/ext/url/benches/url_ops.rs b/ext/url/benches/url_ops.rs
index fd8cac7ef..001b5de92 100644
--- a/ext/url/benches/url_ops.rs
+++ b/ext/url/benches/url_ops.rs
@@ -6,18 +6,19 @@ use deno_bench_util::bencher::benchmark_group;
use deno_bench_util::bencher::Bencher;
use deno_core::Extension;
+use deno_core::ExtensionFileSource;
fn setup() -> Vec<Extension> {
vec![
deno_webidl::init(),
deno_url::init(),
Extension::builder("bench_setup")
- .esm(vec![(
- "internal:setup",
- r#"import { URL } from "internal:deno_url/00_url.js";
+ .esm(vec![ExtensionFileSource {
+ specifier: "internal:setup".to_string(),
+ code: r#"import { URL } from "internal:deno_url/00_url.js";
globalThis.URL = URL;
"#,
- )])
+ }])
.build(),
]
}
diff --git a/ext/web/benches/encoding.rs b/ext/web/benches/encoding.rs
index a96da1bc6..bb297a1bf 100644
--- a/ext/web/benches/encoding.rs
+++ b/ext/web/benches/encoding.rs
@@ -5,6 +5,7 @@ use deno_bench_util::bench_or_profile;
use deno_bench_util::bencher::benchmark_group;
use deno_bench_util::bencher::Bencher;
use deno_core::Extension;
+use deno_core::ExtensionFileSource;
use deno_web::BlobStore;
struct Permissions;
@@ -29,14 +30,14 @@ fn setup() -> Vec<Extension> {
deno_console::init(),
deno_web::init::<Permissions>(BlobStore::default(), None),
Extension::builder("bench_setup")
- .esm(vec![(
- "internal:setup",
- r#"
+ .esm(vec![ExtensionFileSource {
+ specifier: "internal:setup".to_string(),
+ code: r#"
import { TextDecoder } from "internal:deno_web/08_text_encoding.js";
globalThis.TextDecoder = TextDecoder;
globalThis.hello12k = Deno.core.encode("hello world\n".repeat(1e3));
"#,
- )])
+ }])
.state(|state| {
state.put(Permissions {});
Ok(())
diff --git a/ext/web/benches/timers_ops.rs b/ext/web/benches/timers_ops.rs
index 943c73bbc..f01b4c532 100644
--- a/ext/web/benches/timers_ops.rs
+++ b/ext/web/benches/timers_ops.rs
@@ -5,6 +5,7 @@ use deno_bench_util::bench_or_profile;
use deno_bench_util::bencher::benchmark_group;
use deno_bench_util::bencher::Bencher;
use deno_core::Extension;
+use deno_core::ExtensionFileSource;
use deno_web::BlobStore;
struct Permissions;
@@ -29,11 +30,14 @@ fn setup() -> Vec<Extension> {
deno_web::init::<Permissions>(BlobStore::default(), None),
Extension::builder("bench_setup")
.esm(vec![
- ("internal:setup", r#"
+ ExtensionFileSource {
+ specifier: "internal:setup".to_string(),
+ code: r#"
import { setTimeout, handleTimerMacrotask } from "internal:deno_web/02_timers.js";
globalThis.setTimeout = setTimeout;
Deno.core.setMacrotaskCallback(handleTimerMacrotask);
- "#),
+ "#
+ },
])
.state(|state| {
state.put(Permissions{});
diff --git a/ext/webidl/benches/dict.rs b/ext/webidl/benches/dict.rs
index 1400a00ed..00bef4935 100644
--- a/ext/webidl/benches/dict.rs
+++ b/ext/webidl/benches/dict.rs
@@ -6,12 +6,16 @@ use deno_bench_util::bencher::benchmark_group;
use deno_bench_util::bencher::Bencher;
use deno_core::Extension;
+use deno_core::ExtensionFileSource;
fn setup() -> Vec<Extension> {
vec![
deno_webidl::init(),
Extension::builder("deno_webidl_bench")
- .esm(vec![("internal:setup", include_str!("dict.js"))])
+ .esm(vec![ExtensionFileSource {
+ specifier: "internal:setup".to_string(),
+ code: include_str!("dict.js"),
+ }])
.build(),
]
}