From 2a55f5003109b9a87461da6c8094f174d473735f Mon Sep 17 00:00:00 2001 From: Yoshiya Hinosawa Date: Fri, 17 Nov 2023 14:57:13 +0900 Subject: [PATCH] fix(runtime): snapshot options op missing during snapshot (#21235) Porting https://github.com/denoland/deno/pull/21233 to release branch Co-authored-by: Divy Srivastava --- runtime/Cargo.toml | 1 + runtime/build.rs | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index d57a1f4c4c73a2..fcb84113b62bb6 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -62,6 +62,7 @@ deno_websocket.workspace = true deno_webstorage.workspace = true deno_napi.workspace = true flate2 = { workspace = true, features = ["default"] } +serde.workspace = true [target.'cfg(windows)'.build-dependencies] winres.workspace = true diff --git a/runtime/build.rs b/runtime/build.rs index 24204faafee21e..b38fd558bada8c 100644 --- a/runtime/build.rs +++ b/runtime/build.rs @@ -13,13 +13,34 @@ mod startup_snapshot { use super::*; use deno_cache::SqliteBackedCache; use deno_core::error::AnyError; + use deno_core::op2; use deno_core::snapshot_util::*; use deno_core::Extension; + use deno_core::OpState; use deno_http::DefaultHttpPropertyExtractor; use shared::maybe_transpile_source; use shared::runtime; use std::path::Path; + // Keep in sync with `runtime/ops/bootstrap.rs` + #[derive(serde::Serialize, Default)] + #[serde(rename_all = "camelCase")] + pub struct SnapshotOptions { + pub deno_version: String, + pub ts_version: String, + pub v8_version: &'static str, + pub target: String, + } + + // TODO(@littledivy): Remove this once we get rid of deno_runtime snapshots. + #[op2] + #[serde] + pub fn op_snapshot_options(_: &mut OpState) -> SnapshotOptions { + SnapshotOptions::default() + } + + deno_core::extension!(snapshot, ops = [op_snapshot_options],); + #[derive(Clone)] struct Permissions; @@ -232,6 +253,7 @@ mod startup_snapshot { deno_fs::deno_fs::init_ops_and_esm::(fs.clone()), deno_node::deno_node::init_ops_and_esm::(None, fs), runtime::init_ops_and_esm(), + snapshot::init_ops_and_esm(), ]; for extension in &mut extensions {