1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
use crate::ops::runtime::ppid;
use deno_core::serde_json;
use deno_core::serde_json::json;
use deno_core::ModuleSpecifier;

/// Common bootstrap options for MainWorker & WebWorker
#[derive(Clone)]
pub struct BootstrapOptions {
  /// Sets `Deno.args` in JS runtime.
  pub args: Vec<String>,
  pub cpu_count: usize,
  pub debug_flag: bool,
  pub enable_testing_features: bool,
  pub location: Option<ModuleSpecifier>,
  /// Sets `Deno.noColor` in JS runtime.
  pub no_color: bool,
  pub is_tty: bool,
  /// Sets `Deno.version.deno` in JS runtime.
  pub runtime_version: String,
  /// Sets `Deno.version.typescript` in JS runtime.
  pub ts_version: String,
  pub unstable: bool,
  pub user_agent: String,
}

impl BootstrapOptions {
  pub fn as_json(&self) -> String {
    let payload = json!({
      // Shared bootstrap args
      "args": self.args,
      "cpuCount": self.cpu_count,
      "debugFlag": self.debug_flag,
      "denoVersion": self.runtime_version,
      "location": self.location,
      "noColor": self.no_color,
      "isTty": self.is_tty,
      "tsVersion": self.ts_version,
      "unstableFlag": self.unstable,
      // Web worker only
      "enableTestingFeaturesFlag": self.enable_testing_features,
      // Env values
      "pid": std::process::id(),
      "ppid": ppid(),
      "target": env!("TARGET"),
      "v8Version": deno_core::v8_version(),
      "userAgent": self.user_agent,
    });
    serde_json::to_string_pretty(&payload).unwrap()
  }
}