diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2022-08-09 22:09:51 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-09 22:09:51 -0400 |
commit | 04d402116cb1cb6512fd5f47ab5ee8c3bc0559d0 (patch) | |
tree | 21464bf9c37d1f572a98f2bfec7a51b056f4694d /ext/node/lib.rs | |
parent | d6f789eb05e18dd8887e8e409736773bdf2e0e00 (diff) |
chore: temporarily disable `ext/node` and use unstable ops (#15438)
Diffstat (limited to 'ext/node/lib.rs')
-rw-r--r-- | ext/node/lib.rs | 70 |
1 files changed, 58 insertions, 12 deletions
diff --git a/ext/node/lib.rs b/ext/node/lib.rs index 80296a6cc..c61e27079 100644 --- a/ext/node/lib.rs +++ b/ext/node/lib.rs @@ -5,9 +5,12 @@ use deno_core::include_js_files; use deno_core::normalize_path; use deno_core::op; use deno_core::Extension; +use deno_core::OpState; use std::path::PathBuf; -pub fn init() -> Extension { +pub struct Unstable(pub bool); + +pub fn init(unstable: bool) -> Extension { Extension::builder() .js(include_js_files!( prefix "deno:ext/node", @@ -29,11 +32,26 @@ pub fn init() -> Extension { op_require_path_basename::decl(), op_require_read_file::decl(), ]) + .state(move |state| { + state.put(Unstable(unstable)); + Ok(()) + }) .build() } +fn check_unstable(state: &OpState) { + let unstable = state.borrow::<Unstable>(); + + if !unstable.0 { + eprintln!("Unstable API 'require'. The --unstable flag must be provided.",); + std::process::exit(70); + } +} + #[op] -pub fn op_require_init_paths() -> Vec<String> { +pub fn op_require_init_paths(state: &mut OpState) -> Vec<String> { + check_unstable(state); + let (home_dir, node_path) = if cfg!(windows) { ( std::env::var("USERPROFILE").unwrap_or_else(|_| "".into()), @@ -80,7 +98,11 @@ pub fn op_require_init_paths() -> Vec<String> { } #[op] -pub fn op_require_node_module_paths(from: String) -> Vec<String> { +pub fn op_require_node_module_paths( + state: &mut OpState, + from: String, +) -> Vec<String> { + check_unstable(state); // Guarantee that "from" is absolute. let from = deno_core::resolve_path(&from) .unwrap() @@ -126,7 +148,8 @@ pub fn op_require_node_module_paths(from: String) -> Vec<String> { } #[op] -fn op_require_proxy_path(filename: String) -> String { +fn op_require_proxy_path(state: &mut OpState, filename: String) -> String { + check_unstable(state); // Allow a directory to be passed as the filename let trailing_slash = if cfg!(windows) { filename.ends_with('\\') @@ -143,7 +166,11 @@ fn op_require_proxy_path(filename: String) -> String { } #[op] -fn op_require_is_request_relative(request: String) -> bool { +fn op_require_is_request_relative( + state: &mut OpState, + request: String, +) -> bool { + check_unstable(state); if request.starts_with("./") { return true; } @@ -167,10 +194,12 @@ fn op_require_is_request_relative(request: String) -> bool { #[op] fn op_require_resolve_lookup_paths( + state: &mut OpState, request: String, maybe_parent_paths: Option<Vec<String>>, parent_filename: String, ) -> Option<Vec<String>> { + check_unstable(state); if !request.starts_with('.') || (request.len() > 1 && !request.starts_with("..") @@ -207,12 +236,14 @@ fn op_require_resolve_lookup_paths( } #[op] -fn op_require_path_is_absolute(p: String) -> bool { +fn op_require_path_is_absolute(state: &mut OpState, p: String) -> bool { + check_unstable(state); PathBuf::from(p).is_absolute() } #[op] -fn op_require_stat(filename: String) -> i32 { +fn op_require_stat(state: &mut OpState, filename: String) -> i32 { + check_unstable(state); if let Ok(metadata) = std::fs::metadata(&filename) { if metadata.is_file() { return 0; @@ -225,7 +256,11 @@ fn op_require_stat(filename: String) -> i32 { } #[op] -fn op_require_real_path(request: String) -> Result<String, AnyError> { +fn op_require_real_path( + state: &mut OpState, + request: String, +) -> Result<String, AnyError> { + check_unstable(state); let mut canonicalized_path = PathBuf::from(request).canonicalize()?; if cfg!(windows) { canonicalized_path = PathBuf::from( @@ -239,7 +274,8 @@ fn op_require_real_path(request: String) -> Result<String, AnyError> { } #[op] -fn op_require_path_resolve(parts: Vec<String>) -> String { +fn op_require_path_resolve(state: &mut OpState, parts: Vec<String>) -> String { + check_unstable(state); assert!(!parts.is_empty()); let mut p = PathBuf::from(&parts[0]); if parts.len() > 1 { @@ -251,23 +287,27 @@ fn op_require_path_resolve(parts: Vec<String>) -> String { } #[op] -fn op_require_path_dirname(request: String) -> String { +fn op_require_path_dirname(state: &mut OpState, request: String) -> String { + check_unstable(state); let p = PathBuf::from(request); p.parent().unwrap().to_string_lossy().to_string() } #[op] -fn op_require_path_basename(request: String) -> String { +fn op_require_path_basename(state: &mut OpState, request: String) -> String { + check_unstable(state); let p = PathBuf::from(request); p.file_name().unwrap().to_string_lossy().to_string() } #[op] fn op_require_try_self_parent_path( + state: &mut OpState, has_parent: bool, maybe_parent_filename: Option<String>, maybe_parent_id: Option<String>, ) -> Option<String> { + check_unstable(state); if !has_parent { return None; } @@ -288,10 +328,12 @@ fn op_require_try_self_parent_path( #[op] fn op_require_try_self( + state: &mut OpState, has_parent: bool, maybe_parent_filename: Option<String>, maybe_parent_id: Option<String>, ) -> Option<String> { + check_unstable(state); if !has_parent { return None; } @@ -311,6 +353,10 @@ fn op_require_try_self( } #[op] -fn op_require_read_file(_filename: String) -> Result<String, AnyError> { +fn op_require_read_file( + state: &mut OpState, + _filename: String, +) -> Result<String, AnyError> { + check_unstable(state); todo!("not implemented"); } |