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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.

pub use deno_broadcast_channel;
pub use deno_cache;
pub use deno_canvas;
pub use deno_console;
pub use deno_core;
pub use deno_cron;
pub use deno_crypto;
pub use deno_fetch;
pub use deno_ffi;
pub use deno_fs;
pub use deno_http;
pub use deno_io;
pub use deno_kv;
pub use deno_napi;
pub use deno_net;
pub use deno_node;
pub use deno_tls;
pub use deno_url;
pub use deno_web;
pub use deno_webgpu;
pub use deno_webidl;
pub use deno_websocket;
pub use deno_webstorage;

pub mod colors;
pub mod errors;
pub mod fmt_errors;
pub mod fs_util;
pub mod inspector_server;
pub mod js;
pub mod ops;
pub mod permissions;
pub mod snapshot;
pub mod tokio_util;
pub mod web_worker;
pub mod worker;

mod worker_bootstrap;
pub use worker_bootstrap::BootstrapOptions;
pub use worker_bootstrap::WorkerLogLevel;

mod shared;
pub use shared::runtime;

// NOTE(bartlomieju): keep IDs in sync with `runtime/90_deno_ns.js` (search for `unstableFeatures`)
pub static UNSTABLE_GRANULAR_FLAGS: &[(
  // flag name
  &str,
  // help text
  &str,
  // id to enable it in runtime/99_main.js
  i32,
)] = &[
  (
    deno_broadcast_channel::UNSTABLE_FEATURE_NAME,
    "Enable unstable `BroadcastChannel` API",
    1,
  ),
  (
    deno_cron::UNSTABLE_FEATURE_NAME,
    "Enable unstable Deno.cron API",
    2,
  ),
  (
    deno_ffi::UNSTABLE_FEATURE_NAME,
    "Enable unstable FFI APIs",
    3,
  ),
  (
    deno_fs::UNSTABLE_FEATURE_NAME,
    "Enable unstable file system APIs",
    4,
  ),
  (
    ops::http::UNSTABLE_FEATURE_NAME,
    "Enable unstable HTTP APIs",
    5,
  ),
  (
    deno_kv::UNSTABLE_FEATURE_NAME,
    "Enable unstable Key-Value store APIs",
    6,
  ),
  (
    deno_net::UNSTABLE_FEATURE_NAME,
    "Enable unstable net APIs",
    7,
  ),
  (
    "temporal",
    "Enable unstable Temporal API",
    // Not used in JS
    8,
  ),
  (
    "unsafe-proto",
    "Enable unsafe __proto__ support. This is a security risk.",
    // This number is used directly in the JS code. Search
    // for "unstableIds" to see where it's used.
    9,
  ),
  (
    deno_webgpu::UNSTABLE_FEATURE_NAME,
    "Enable unstable `WebGPU` API",
    10,
  ),
  (
    ops::worker_host::UNSTABLE_FEATURE_NAME,
    "Enable unstable Web Worker APIs",
    11,
  ),
];

#[cfg(test)]
mod test {
  use super::*;

  #[test]
  fn unstable_granular_flag_names_sorted() {
    let flags = UNSTABLE_GRANULAR_FLAGS
      .iter()
      .map(|(name, _, _)| name.to_string())
      .collect::<Vec<_>>();
    let mut sorted_flags = flags.clone();
    sorted_flags.sort();
    // sort the flags by name so they appear nicely in the help text
    assert_eq!(flags, sorted_flags);
  }
}