Skip to content

Commit

Permalink
chore: temporarily disable ext/node and use unstable ops (denoland#…
Browse files Browse the repository at this point in the history
  • Loading branch information
dsherret committed Aug 10, 2022
1 parent d6f789e commit 04d4021
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 15 deletions.
70 changes: 58 additions & 12 deletions ext/node/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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()),
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -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('\\')
Expand All @@ -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;
}
Expand All @@ -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("..")
Expand Down Expand Up @@ -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;
Expand All @@ -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(
Expand All @@ -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 {
Expand All @@ -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;
}
Expand All @@ -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;
}
Expand All @@ -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");
}
2 changes: 1 addition & 1 deletion runtime/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ mod not_docs {
deno_broadcast_channel::InMemoryBroadcastChannel::default(),
false, // No --unstable.
),
deno_node::init(),
// deno_node::init(), // todo(dsherret): re-enable
deno_ffi::init::<Permissions>(false),
deno_net::init::<Permissions>(
None, false, // No --unstable.
Expand Down
2 changes: 1 addition & 1 deletion runtime/web_worker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -419,7 +419,7 @@ impl WebWorker {
unstable,
options.unsafely_ignore_certificate_errors.clone(),
),
deno_node::init(),
// deno_node::init(), // todo(dsherret): re-enable
ops::os::init_for_worker(),
ops::permissions::init(),
ops::process::init(),
Expand Down
2 changes: 1 addition & 1 deletion runtime/worker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ impl MainWorker {
unstable,
options.unsafely_ignore_certificate_errors.clone(),
),
deno_node::init(),
// deno_node::init() // todo(dsherret): re-enable,
ops::os::init(exit_code.clone()),
ops::permissions::init(),
ops::process::init(),
Expand Down

0 comments on commit 04d4021

Please sign in to comment.