summaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2024-01-22 12:37:25 +0000
committerGitHub <noreply@github.com>2024-01-22 12:37:25 +0000
commitbc92f872988fd8b9cdf2ae1479278789911237a5 (patch)
tree1eb4434b041edc3d159063f4f1dee1ce86a98997 /runtime
parent8f767627938ef10802864419061e58a8a75db567 (diff)
fix(runtime): only discard extension sources if a snapshot is provided (#22023)
Fixes #21928. We have a code path which empties the extension sources because they're expected to be pre-executed in the snapshot. Instead of using conditional compilation for that, we now just check if a snapshot was provided. Removes the `dont_use_runtime_snapshot` feature. We didn't allow not providing a snapshot unless this feature was provided, now we always do. Adds the `only_snapshotted_js_sources` feature for us to use in CLI. This asserts that a snapshot is provided and gates the runtime transpilation code so it isn't included in the executable.
Diffstat (limited to 'runtime')
-rw-r--r--runtime/Cargo.toml8
-rw-r--r--runtime/web_worker.rs21
-rw-r--r--runtime/worker.rs36
3 files changed, 25 insertions, 40 deletions
diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml
index 0b07839b2..c3bcfb9bf 100644
--- a/runtime/Cargo.toml
+++ b/runtime/Cargo.toml
@@ -12,8 +12,6 @@ description = "Provides the deno runtime library"
[features]
# "fake" feature that allows to generate docs on docs.rs
docsrs = []
-# A feature that disables the requirement for startup snapshot to be provided.
-dont_use_runtime_snapshot = []
# A feature that allows excluding `./js/99_main.js` from the exported extension.
exclude_runtime_main_js = []
# A feature that disables embedding of the JavaScript source files in the binary.
@@ -24,7 +22,11 @@ include_js_files_for_snapshotting = [
]
# A dev feature to disable creations and loading of snapshots in favor of
# loading JS sources at runtime.
-__runtime_js_sources = []
+__runtime_js_sources = ["include_js_files_for_snapshotting"]
+# Signal that only snapshotted JS sources should be used. This will
+# conditionally exclude the runtime source transpilation logic, and add an
+# assertion that a snapshot is provided.
+only_snapshotted_js_sources = ["include_js_files_for_snapshotting"]
[lib]
name = "deno_runtime"
diff --git a/runtime/web_worker.rs b/runtime/web_worker.rs
index 2b6eb19c9..78674af02 100644
--- a/runtime/web_worker.rs
+++ b/runtime/web_worker.rs
@@ -490,14 +490,16 @@ impl WebWorker {
ops::web_worker::deno_web_worker::init_ops_and_esm(),
];
+ #[cfg(__runtime_js_sources)]
+ assert!(cfg!(not(feature = "only_snapshotted_js_sources")), "'__runtime_js_sources' is incompatible with 'only_snapshotted_js_sources'.");
+
for extension in &mut extensions {
- #[cfg(not(feature = "__runtime_js_sources"))]
- {
+ if options.startup_snapshot.is_some() {
extension.js_files = std::borrow::Cow::Borrowed(&[]);
extension.esm_files = std::borrow::Cow::Borrowed(&[]);
extension.esm_entry_point = None;
}
- #[cfg(feature = "__runtime_js_sources")]
+ #[cfg(not(feature = "only_snapshotted_js_sources"))]
{
use crate::shared::maybe_transpile_source;
for source in extension.esm_files.to_mut() {
@@ -511,17 +513,8 @@ impl WebWorker {
extensions.extend(std::mem::take(&mut options.extensions));
- #[cfg(all(
- feature = "include_js_files_for_snapshotting",
- not(feature = "__runtime_js_sources")
- ))]
- options
- .startup_snapshot
- .as_ref()
- .expect("Sources are not embedded and a user snapshot was not provided.");
-
- #[cfg(not(feature = "dont_use_runtime_snapshot"))]
- options.startup_snapshot.as_ref().expect("A user snapshot was not provided, if you want to create a runtime without a snapshot use 'dont_use_runtime_snapshot' Cargo feature.");
+ #[cfg(feature = "only_snapshotted_js_sources")]
+ options.startup_snapshot.as_ref().expect("A user snapshot was not provided, even though 'only_snapshotted_js_sources' is used.");
// Hook up the summary metrics if the user or subcommand requested them
let (op_summary_metrics, op_metrics_factory_fn) =
diff --git a/runtime/worker.rs b/runtime/worker.rs
index 5dc5db71d..e6da93d78 100644
--- a/runtime/worker.rs
+++ b/runtime/worker.rs
@@ -418,16 +418,13 @@ impl MainWorker {
ops::signal::deno_signal::init_ops_and_esm(),
ops::tty::deno_tty::init_ops_and_esm(),
ops::http::deno_http_runtime::init_ops_and_esm(),
- ops::bootstrap::deno_bootstrap::init_ops_and_esm({
- #[cfg(feature = "__runtime_js_sources")]
- {
- Some(Default::default())
- }
- #[cfg(not(feature = "__runtime_js_sources"))]
- {
+ ops::bootstrap::deno_bootstrap::init_ops_and_esm(
+ if options.startup_snapshot.is_some() {
None
- }
- }),
+ } else {
+ Some(Default::default())
+ },
+ ),
deno_permissions_worker::init_ops_and_esm(
permissions,
enable_testing_features,
@@ -435,14 +432,16 @@ impl MainWorker {
runtime::init_ops_and_esm(),
];
+ #[cfg(__runtime_js_sources)]
+ assert!(cfg!(not(feature = "only_snapshotted_js_sources")), "'__runtime_js_sources' is incompatible with 'only_snapshotted_js_sources'.");
+
for extension in &mut extensions {
- #[cfg(not(feature = "__runtime_js_sources"))]
- {
+ if options.startup_snapshot.is_some() {
extension.js_files = std::borrow::Cow::Borrowed(&[]);
extension.esm_files = std::borrow::Cow::Borrowed(&[]);
extension.esm_entry_point = None;
}
- #[cfg(feature = "__runtime_js_sources")]
+ #[cfg(not(feature = "only_snapshotted_js_sources"))]
{
use crate::shared::maybe_transpile_source;
for source in extension.esm_files.to_mut() {
@@ -456,17 +455,8 @@ impl MainWorker {
extensions.extend(std::mem::take(&mut options.extensions));
- #[cfg(all(
- feature = "include_js_files_for_snapshotting",
- not(feature = "__runtime_js_sources")
- ))]
- options
- .startup_snapshot
- .as_ref()
- .expect("Sources are not embedded and a user snapshot was not provided.");
-
- #[cfg(not(feature = "dont_use_runtime_snapshot"))]
- options.startup_snapshot.as_ref().expect("A user snapshot was not provided, if you want to create a runtime without a snapshot use 'dont_use_runtime_snapshot' Cargo feature.");
+ #[cfg(feature = "only_snapshotted_js_sources")]
+ options.startup_snapshot.as_ref().expect("A user snapshot was not provided, even though 'only_snapshotted_js_sources' is used.");
let has_notified_of_inspector_disconnect = AtomicBool::new(false);
let wait_for_inspector_disconnect_callback = Box::new(move || {