1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-23 15:49:44 -05:00

chore: temporarily disable ext/node and use unstable ops (#15438)

This commit is contained in:
David Sherret 2022-08-09 22:09:51 -04:00 committed by GitHub
parent d6f789eb05
commit 04d402116c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 61 additions and 15 deletions

View file

@ -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");
}

View file

@ -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.

View file

@ -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(),

View file

@ -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(),