mirror of
https://github.com/denoland/deno.git
synced 2025-01-21 04:52:26 -05:00
Merge remote-tracking branch 'upstream/main' into check-workspace-member-compiler-options
This commit is contained in:
commit
9707974671
584 changed files with 4578 additions and 3949 deletions
30
Cargo.lock
generated
30
Cargo.lock
generated
|
@ -1232,7 +1232,6 @@ dependencies = [
|
|||
"deno_resolver",
|
||||
"deno_runtime",
|
||||
"deno_semver",
|
||||
"deno_sqlformat",
|
||||
"deno_task_shell",
|
||||
"deno_terminal 0.2.0",
|
||||
"deno_tower_lsp",
|
||||
|
@ -1292,6 +1291,7 @@ dependencies = [
|
|||
"sha2",
|
||||
"shell-escape",
|
||||
"spki",
|
||||
"sqlformat",
|
||||
"strsim",
|
||||
"tar",
|
||||
"tempfile",
|
||||
|
@ -1664,9 +1664,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "deno_graph"
|
||||
version = "0.85.0"
|
||||
version = "0.85.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9d097305aba3f119781fe82b4d5a85a1ad10c586a388ee4d754e5bf82901cc5c"
|
||||
checksum = "4c11027d9b4e9ff4f8bcb8316a1a5dd5241dc267380507e177457bc491696189"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
|
@ -2147,18 +2147,6 @@ dependencies = [
|
|||
"url",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "deno_sqlformat"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0e196799ec0cc240fac1fb5c5bf813ef92a9602740a059cfcbb20593b2deee52"
|
||||
dependencies = [
|
||||
"nom 7.1.3",
|
||||
"once_cell",
|
||||
"regex",
|
||||
"unicode_categories",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "deno_task_shell"
|
||||
version = "0.18.1"
|
||||
|
@ -6944,6 +6932,18 @@ dependencies = [
|
|||
"der",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sqlformat"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "44c38684453189293372e6fffa3bed1015d20488ce4cc09a23de050fd7411e46"
|
||||
dependencies = [
|
||||
"nom 7.1.3",
|
||||
"once_cell",
|
||||
"regex",
|
||||
"unicode_categories",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "stable_deref_trait"
|
||||
version = "1.2.0"
|
||||
|
|
|
@ -73,7 +73,7 @@ deno_cache_dir.workspace = true
|
|||
deno_config.workspace = true
|
||||
deno_core = { workspace = true, features = ["include_js_files_for_snapshotting"] }
|
||||
deno_doc = { version = "0.160.0", features = ["rust", "comrak"] }
|
||||
deno_graph = { version = "=0.85.0" }
|
||||
deno_graph = { version = "=0.85.1" }
|
||||
deno_lint = { version = "=0.68.0", features = ["docs"] }
|
||||
deno_lockfile.workspace = true
|
||||
deno_npm.workspace = true
|
||||
|
@ -151,8 +151,7 @@ serde_repr.workspace = true
|
|||
sha2.workspace = true
|
||||
shell-escape = "=0.1.5"
|
||||
spki = { version = "0.7", features = ["pem"] }
|
||||
# NOTE(bartlomieju): using temporary fork for now, revert back to `sqlformat-rs` later
|
||||
sqlformat = { package = "deno_sqlformat", version = "0.3.2" }
|
||||
sqlformat = "=0.3.2"
|
||||
strsim = "0.11.1"
|
||||
tar.workspace = true
|
||||
tempfile.workspace = true
|
||||
|
|
|
@ -3782,14 +3782,11 @@ impl Inner {
|
|||
fn task_definitions(&self) -> LspResult<Vec<TaskDefinition>> {
|
||||
let mut result = vec![];
|
||||
for config_file in self.config.tree.config_files() {
|
||||
if let Some(tasks) = json!(&config_file.json.tasks).as_object() {
|
||||
for (name, value) in tasks {
|
||||
let Some(command) = value.as_str() else {
|
||||
continue;
|
||||
};
|
||||
if let Some(tasks) = config_file.to_tasks_config().ok().flatten() {
|
||||
for (name, def) in tasks {
|
||||
result.push(TaskDefinition {
|
||||
name: name.clone(),
|
||||
command: command.to_string(),
|
||||
command: def.command.clone(),
|
||||
source_uri: url_to_uri(&config_file.specifier)
|
||||
.map_err(|_| LspError::internal_error())?,
|
||||
});
|
||||
|
|
|
@ -14,8 +14,6 @@ pub const LATEST_DIAGNOSTIC_BATCH_INDEX: &str =
|
|||
#[serde(rename_all = "camelCase")]
|
||||
pub struct TaskDefinition {
|
||||
pub name: String,
|
||||
// TODO(nayeemrmn): Rename this to `command` in vscode_deno.
|
||||
#[serde(rename = "detail")]
|
||||
pub command: String,
|
||||
pub source_uri: lsp::Uri,
|
||||
}
|
||||
|
|
|
@ -56,9 +56,6 @@ pub async fn start() -> Result<(), AnyError> {
|
|||
LanguageServer::performance_request,
|
||||
)
|
||||
.custom_method(lsp_custom::TASK_REQUEST, LanguageServer::task_definitions)
|
||||
// TODO(nayeemrmn): Rename this to `deno/taskDefinitions` in vscode_deno and
|
||||
// remove this alias.
|
||||
.custom_method("deno/task", LanguageServer::task_definitions)
|
||||
.custom_method(testing::TEST_RUN_REQUEST, LanguageServer::test_run_request)
|
||||
.custom_method(
|
||||
testing::TEST_RUN_CANCEL_REQUEST,
|
||||
|
|
|
@ -87,6 +87,7 @@ use super::serialization::RemoteModulesStore;
|
|||
use super::serialization::RemoteModulesStoreBuilder;
|
||||
use super::virtual_fs::FileBackedVfs;
|
||||
use super::virtual_fs::VfsBuilder;
|
||||
use super::virtual_fs::VfsFileSubDataKind;
|
||||
use super::virtual_fs::VfsRoot;
|
||||
use super::virtual_fs::VirtualDirectory;
|
||||
|
||||
|
@ -275,7 +276,9 @@ impl StandaloneModules {
|
|||
if specifier.scheme() == "file" {
|
||||
let path = deno_path_util::url_to_file_path(specifier)?;
|
||||
let bytes = match self.vfs.file_entry(&path) {
|
||||
Ok(entry) => self.vfs.read_file_all(entry)?,
|
||||
Ok(entry) => self
|
||||
.vfs
|
||||
.read_file_all(entry, VfsFileSubDataKind::ModuleGraph)?,
|
||||
Err(err) if err.kind() == ErrorKind::NotFound => {
|
||||
let bytes = match RealFs.read_file_sync(&path, None) {
|
||||
Ok(bytes) => bytes,
|
||||
|
@ -691,6 +694,7 @@ impl<'a> DenoCompileBinaryWriter<'a> {
|
|||
Some(source) => source,
|
||||
None => RealFs.read_file_sync(&file_path, None)?,
|
||||
},
|
||||
VfsFileSubDataKind::ModuleGraph,
|
||||
)
|
||||
.with_context(|| {
|
||||
format!("Failed adding '{}'", file_path.display())
|
||||
|
|
|
@ -17,6 +17,7 @@ use deno_runtime::deno_io::fs::FsResult;
|
|||
use deno_runtime::deno_io::fs::FsStat;
|
||||
|
||||
use super::virtual_fs::FileBackedVfs;
|
||||
use super::virtual_fs::VfsFileSubDataKind;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct DenoCompileFileSystem(Arc<FileBackedVfs>);
|
||||
|
@ -36,7 +37,8 @@ impl DenoCompileFileSystem {
|
|||
|
||||
fn copy_to_real_path(&self, oldpath: &Path, newpath: &Path) -> FsResult<()> {
|
||||
let old_file = self.0.file_entry(oldpath)?;
|
||||
let old_file_bytes = self.0.read_file_all(old_file)?;
|
||||
let old_file_bytes =
|
||||
self.0.read_file_all(old_file, VfsFileSubDataKind::Raw)?;
|
||||
RealFs.write_file_sync(
|
||||
newpath,
|
||||
OpenOptions {
|
||||
|
|
|
@ -56,6 +56,8 @@ use serialization::DenoCompileModuleSource;
|
|||
use std::borrow::Cow;
|
||||
use std::rc::Rc;
|
||||
use std::sync::Arc;
|
||||
use virtual_fs::FileBackedVfs;
|
||||
use virtual_fs::VfsFileSubDataKind;
|
||||
|
||||
use crate::args::create_default_npmrc;
|
||||
use crate::args::get_root_cert_store;
|
||||
|
@ -111,6 +113,7 @@ use self::file_system::DenoCompileFileSystem;
|
|||
|
||||
struct SharedModuleLoaderState {
|
||||
cjs_tracker: Arc<CjsTracker>,
|
||||
code_cache: Option<Arc<dyn CliCodeCache>>,
|
||||
fs: Arc<dyn deno_fs::FileSystem>,
|
||||
modules: StandaloneModules,
|
||||
node_code_translator: Arc<CliNodeCodeTranslator>,
|
||||
|
@ -118,8 +121,8 @@ struct SharedModuleLoaderState {
|
|||
npm_module_loader: Arc<NpmModuleLoader>,
|
||||
npm_req_resolver: Arc<CliNpmReqResolver>,
|
||||
npm_resolver: Arc<dyn CliNpmResolver>,
|
||||
vfs: Arc<FileBackedVfs>,
|
||||
workspace_resolver: WorkspaceResolver,
|
||||
code_cache: Option<Arc<dyn CliCodeCache>>,
|
||||
}
|
||||
|
||||
impl SharedModuleLoaderState {
|
||||
|
@ -514,7 +517,12 @@ impl NodeRequireLoader for EmbeddedModuleLoader {
|
|||
&self,
|
||||
path: &std::path::Path,
|
||||
) -> Result<String, AnyError> {
|
||||
Ok(self.shared.fs.read_text_file_lossy_sync(path, None)?)
|
||||
let file_entry = self.shared.vfs.file_entry(path)?;
|
||||
let file_bytes = self
|
||||
.shared
|
||||
.vfs
|
||||
.read_file_all(file_entry, VfsFileSubDataKind::ModuleGraph)?;
|
||||
Ok(String::from_utf8(file_bytes.into_owned())?)
|
||||
}
|
||||
|
||||
fn is_maybe_cjs(
|
||||
|
@ -817,6 +825,7 @@ pub async fn run(data: StandaloneData) -> Result<i32, AnyError> {
|
|||
let module_loader_factory = StandaloneModuleLoaderFactory {
|
||||
shared: Arc::new(SharedModuleLoaderState {
|
||||
cjs_tracker: cjs_tracker.clone(),
|
||||
code_cache: code_cache.clone(),
|
||||
fs: fs.clone(),
|
||||
modules,
|
||||
node_code_translator: node_code_translator.clone(),
|
||||
|
@ -826,10 +835,10 @@ pub async fn run(data: StandaloneData) -> Result<i32, AnyError> {
|
|||
fs.clone(),
|
||||
node_code_translator,
|
||||
)),
|
||||
code_cache: code_cache.clone(),
|
||||
npm_resolver: npm_resolver.clone(),
|
||||
workspace_resolver,
|
||||
npm_req_resolver,
|
||||
vfs,
|
||||
workspace_resolver,
|
||||
}),
|
||||
};
|
||||
|
||||
|
|
|
@ -32,6 +32,15 @@ use thiserror::Error;
|
|||
use crate::util;
|
||||
use crate::util::fs::canonicalize_path;
|
||||
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
pub enum VfsFileSubDataKind {
|
||||
/// Raw bytes of the file.
|
||||
Raw,
|
||||
/// Bytes to use for module loading. For example, for TypeScript
|
||||
/// files this will be the transpiled JavaScript source.
|
||||
ModuleGraph,
|
||||
}
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error(
|
||||
"Failed to strip prefix '{}' from '{}'", root_path.display(), target.display()
|
||||
|
@ -141,7 +150,11 @@ impl VfsBuilder {
|
|||
// inline the symlink and make the target file
|
||||
let file_bytes = std::fs::read(&target)
|
||||
.with_context(|| format!("Reading {}", path.display()))?;
|
||||
self.add_file_with_data_inner(&path, file_bytes)?;
|
||||
self.add_file_with_data_inner(
|
||||
&path,
|
||||
file_bytes,
|
||||
VfsFileSubDataKind::Raw,
|
||||
)?;
|
||||
} else {
|
||||
log::warn!(
|
||||
"{} Symlink target is outside '{}'. Excluding symlink at '{}' with target '{}'.",
|
||||
|
@ -219,25 +232,27 @@ impl VfsBuilder {
|
|||
) -> Result<(), AnyError> {
|
||||
let file_bytes = std::fs::read(path)
|
||||
.with_context(|| format!("Reading {}", path.display()))?;
|
||||
self.add_file_with_data_inner(path, file_bytes)
|
||||
self.add_file_with_data_inner(path, file_bytes, VfsFileSubDataKind::Raw)
|
||||
}
|
||||
|
||||
pub fn add_file_with_data(
|
||||
&mut self,
|
||||
path: &Path,
|
||||
data: Vec<u8>,
|
||||
sub_data_kind: VfsFileSubDataKind,
|
||||
) -> Result<(), AnyError> {
|
||||
let target_path = canonicalize_path(path)?;
|
||||
if target_path != path {
|
||||
self.add_symlink(path, &target_path)?;
|
||||
}
|
||||
self.add_file_with_data_inner(&target_path, data)
|
||||
self.add_file_with_data_inner(&target_path, data, sub_data_kind)
|
||||
}
|
||||
|
||||
fn add_file_with_data_inner(
|
||||
&mut self,
|
||||
path: &Path,
|
||||
data: Vec<u8>,
|
||||
sub_data_kind: VfsFileSubDataKind,
|
||||
) -> Result<(), AnyError> {
|
||||
log::debug!("Adding file '{}'", path.display());
|
||||
let checksum = util::checksum::gen(&[&data]);
|
||||
|
@ -253,8 +268,19 @@ impl VfsBuilder {
|
|||
let name = path.file_name().unwrap().to_string_lossy();
|
||||
let data_len = data.len();
|
||||
match dir.entries.binary_search_by(|e| e.name().cmp(&name)) {
|
||||
Ok(_) => {
|
||||
// already added, just ignore
|
||||
Ok(index) => {
|
||||
let entry = &mut dir.entries[index];
|
||||
match entry {
|
||||
VfsEntry::File(virtual_file) => match sub_data_kind {
|
||||
VfsFileSubDataKind::Raw => {
|
||||
virtual_file.offset = offset;
|
||||
}
|
||||
VfsFileSubDataKind::ModuleGraph => {
|
||||
virtual_file.module_graph_offset = offset;
|
||||
}
|
||||
},
|
||||
VfsEntry::Dir(_) | VfsEntry::Symlink(_) => unreachable!(),
|
||||
}
|
||||
}
|
||||
Err(insert_index) => {
|
||||
dir.entries.insert(
|
||||
|
@ -262,6 +288,7 @@ impl VfsBuilder {
|
|||
VfsEntry::File(VirtualFile {
|
||||
name: name.to_string(),
|
||||
offset,
|
||||
module_graph_offset: offset,
|
||||
len: data.len() as u64,
|
||||
}),
|
||||
);
|
||||
|
@ -302,7 +329,7 @@ impl VfsBuilder {
|
|||
let dir = self.add_dir(path.parent().unwrap())?;
|
||||
let name = path.file_name().unwrap().to_string_lossy();
|
||||
match dir.entries.binary_search_by(|e| e.name().cmp(&name)) {
|
||||
Ok(_) => unreachable!(),
|
||||
Ok(_) => Ok(()), // previously inserted
|
||||
Err(insert_index) => {
|
||||
dir.entries.insert(
|
||||
insert_index,
|
||||
|
@ -314,9 +341,9 @@ impl VfsBuilder {
|
|||
.collect::<Vec<_>>(),
|
||||
}),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn into_dir_and_files(self) -> (VirtualDirectory, Vec<Vec<u8>>) {
|
||||
|
@ -454,6 +481,12 @@ pub struct VirtualDirectory {
|
|||
pub struct VirtualFile {
|
||||
pub name: String,
|
||||
pub offset: u64,
|
||||
/// Offset file to use for module loading when it differs from the
|
||||
/// raw file. Often this will be the same offset as above for data
|
||||
/// such as JavaScript files, but for TypeScript files the `offset`
|
||||
/// will be the original raw bytes when included as an asset and this
|
||||
/// offset will be to the transpiled JavaScript source.
|
||||
pub module_graph_offset: u64,
|
||||
pub len: u64,
|
||||
}
|
||||
|
||||
|
@ -647,7 +680,7 @@ impl FileBackedVfsFile {
|
|||
.map_err(|err| err.into())
|
||||
}
|
||||
|
||||
fn read_to_end(&self) -> FsResult<Vec<u8>> {
|
||||
fn read_to_end(&self) -> FsResult<Cow<'static, [u8]>> {
|
||||
let read_pos = {
|
||||
let mut pos = self.pos.lock();
|
||||
let read_pos = *pos;
|
||||
|
@ -659,12 +692,20 @@ impl FileBackedVfsFile {
|
|||
read_pos
|
||||
};
|
||||
if read_pos > self.file.len {
|
||||
return Ok(Vec::new());
|
||||
return Ok(Cow::Borrowed(&[]));
|
||||
}
|
||||
if read_pos == 0 {
|
||||
Ok(
|
||||
self
|
||||
.vfs
|
||||
.read_file_all(&self.file, VfsFileSubDataKind::Raw)?,
|
||||
)
|
||||
} else {
|
||||
let size = (self.file.len - read_pos) as usize;
|
||||
let mut buf = vec![0; size];
|
||||
self.vfs.read_file(&self.file, read_pos, &mut buf)?;
|
||||
Ok(Cow::Owned(buf))
|
||||
}
|
||||
let size = (self.file.len - read_pos) as usize;
|
||||
let mut buf = vec![0; size];
|
||||
self.vfs.read_file(&self.file, read_pos, &mut buf)?;
|
||||
Ok(buf)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -703,11 +744,14 @@ impl deno_io::fs::File for FileBackedVfsFile {
|
|||
}
|
||||
|
||||
fn read_all_sync(self: Rc<Self>) -> FsResult<Vec<u8>> {
|
||||
self.read_to_end()
|
||||
self.read_to_end().map(|bytes| bytes.into_owned())
|
||||
}
|
||||
async fn read_all_async(self: Rc<Self>) -> FsResult<Vec<u8>> {
|
||||
let inner = (*self).clone();
|
||||
tokio::task::spawn_blocking(move || inner.read_to_end()).await?
|
||||
tokio::task::spawn_blocking(move || {
|
||||
inner.read_to_end().map(|bytes| bytes.into_owned())
|
||||
})
|
||||
.await?
|
||||
}
|
||||
|
||||
fn chmod_sync(self: Rc<Self>, _pathmode: u32) -> FsResult<()> {
|
||||
|
@ -878,8 +922,9 @@ impl FileBackedVfs {
|
|||
pub fn read_file_all(
|
||||
&self,
|
||||
file: &VirtualFile,
|
||||
sub_data_kind: VfsFileSubDataKind,
|
||||
) -> std::io::Result<Cow<'static, [u8]>> {
|
||||
let read_range = self.get_read_range(file, 0, file.len)?;
|
||||
let read_range = self.get_read_range(file, sub_data_kind, 0, file.len)?;
|
||||
match &self.vfs_data {
|
||||
Cow::Borrowed(data) => Ok(Cow::Borrowed(&data[read_range])),
|
||||
Cow::Owned(data) => Ok(Cow::Owned(data[read_range].to_vec())),
|
||||
|
@ -892,7 +937,12 @@ impl FileBackedVfs {
|
|||
pos: u64,
|
||||
buf: &mut [u8],
|
||||
) -> std::io::Result<usize> {
|
||||
let read_range = self.get_read_range(file, pos, buf.len() as u64)?;
|
||||
let read_range = self.get_read_range(
|
||||
file,
|
||||
VfsFileSubDataKind::Raw,
|
||||
pos,
|
||||
buf.len() as u64,
|
||||
)?;
|
||||
let read_len = read_range.len();
|
||||
buf[..read_len].copy_from_slice(&self.vfs_data[read_range]);
|
||||
Ok(read_len)
|
||||
|
@ -901,6 +951,7 @@ impl FileBackedVfs {
|
|||
fn get_read_range(
|
||||
&self,
|
||||
file: &VirtualFile,
|
||||
sub_data_kind: VfsFileSubDataKind,
|
||||
pos: u64,
|
||||
len: u64,
|
||||
) -> std::io::Result<Range<usize>> {
|
||||
|
@ -910,7 +961,11 @@ impl FileBackedVfs {
|
|||
"unexpected EOF",
|
||||
));
|
||||
}
|
||||
let file_offset = self.fs_root.start_file_offset + file.offset;
|
||||
let offset = match sub_data_kind {
|
||||
VfsFileSubDataKind::Raw => file.offset,
|
||||
VfsFileSubDataKind::ModuleGraph => file.module_graph_offset,
|
||||
};
|
||||
let file_offset = self.fs_root.start_file_offset + offset;
|
||||
let start = file_offset + pos;
|
||||
let end = file_offset + std::cmp::min(pos + len, file.len);
|
||||
Ok(start as usize..end as usize)
|
||||
|
@ -951,7 +1006,13 @@ mod test {
|
|||
#[track_caller]
|
||||
fn read_file(vfs: &FileBackedVfs, path: &Path) -> String {
|
||||
let file = vfs.file_entry(path).unwrap();
|
||||
String::from_utf8(vfs.read_file_all(file).unwrap().into_owned()).unwrap()
|
||||
String::from_utf8(
|
||||
vfs
|
||||
.read_file_all(file, VfsFileSubDataKind::Raw)
|
||||
.unwrap()
|
||||
.into_owned(),
|
||||
)
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -964,23 +1025,40 @@ mod test {
|
|||
let src_path = src_path.to_path_buf();
|
||||
let mut builder = VfsBuilder::new(src_path.clone()).unwrap();
|
||||
builder
|
||||
.add_file_with_data_inner(&src_path.join("a.txt"), "data".into())
|
||||
.add_file_with_data_inner(
|
||||
&src_path.join("a.txt"),
|
||||
"data".into(),
|
||||
VfsFileSubDataKind::Raw,
|
||||
)
|
||||
.unwrap();
|
||||
builder
|
||||
.add_file_with_data_inner(&src_path.join("b.txt"), "data".into())
|
||||
.add_file_with_data_inner(
|
||||
&src_path.join("b.txt"),
|
||||
"data".into(),
|
||||
VfsFileSubDataKind::Raw,
|
||||
)
|
||||
.unwrap();
|
||||
assert_eq!(builder.files.len(), 1); // because duplicate data
|
||||
builder
|
||||
.add_file_with_data_inner(&src_path.join("c.txt"), "c".into())
|
||||
.add_file_with_data_inner(
|
||||
&src_path.join("c.txt"),
|
||||
"c".into(),
|
||||
VfsFileSubDataKind::Raw,
|
||||
)
|
||||
.unwrap();
|
||||
builder
|
||||
.add_file_with_data_inner(
|
||||
&src_path.join("sub_dir").join("d.txt"),
|
||||
"d".into(),
|
||||
VfsFileSubDataKind::Raw,
|
||||
)
|
||||
.unwrap();
|
||||
builder
|
||||
.add_file_with_data_inner(&src_path.join("e.txt"), "e".into())
|
||||
.add_file_with_data_inner(
|
||||
&src_path.join("e.txt"),
|
||||
"e".into(),
|
||||
VfsFileSubDataKind::Raw,
|
||||
)
|
||||
.unwrap();
|
||||
builder
|
||||
.add_symlink(
|
||||
|
@ -1151,6 +1229,7 @@ mod test {
|
|||
.add_file_with_data_inner(
|
||||
temp_path.join("a.txt").as_path(),
|
||||
"0123456789".to_string().into_bytes(),
|
||||
VfsFileSubDataKind::Raw,
|
||||
)
|
||||
.unwrap();
|
||||
let (dest_path, virtual_fs) = into_virtual_fs(builder, &temp_dir);
|
||||
|
|
|
@ -9,6 +9,7 @@ use crate::args::RunFlags;
|
|||
use crate::colors;
|
||||
use color_print::cformat;
|
||||
use color_print::cstr;
|
||||
use deno_config::deno_json::NodeModulesDirMode;
|
||||
use deno_core::anyhow::Context;
|
||||
use deno_core::error::AnyError;
|
||||
use deno_core::serde_json::json;
|
||||
|
@ -288,6 +289,7 @@ async fn init_npm(name: &str, args: Vec<String>) -> Result<i32, AnyError> {
|
|||
},
|
||||
allow_scripts: PackagesAllowedScripts::All,
|
||||
argv: args,
|
||||
node_modules_dir: Some(NodeModulesDirMode::Auto),
|
||||
subcommand: DenoSubcommand::Run(RunFlags {
|
||||
script: script_name,
|
||||
..Default::default()
|
||||
|
|
|
@ -721,11 +721,9 @@ fn print_available_tasks(
|
|||
)?;
|
||||
if let Some(description) = &desc.task.description {
|
||||
let slash_slash = colors::italic_gray("//");
|
||||
writeln!(
|
||||
writer,
|
||||
" {slash_slash} {}",
|
||||
colors::italic_gray(description)
|
||||
)?;
|
||||
for line in description.split('\n') {
|
||||
writeln!(writer, " {slash_slash} {}", colors::italic_gray(line))?;
|
||||
}
|
||||
}
|
||||
writeln!(writer, " {}", desc.task.command)?;
|
||||
if !desc.task.dependencies.is_empty() {
|
||||
|
|
|
@ -27,7 +27,16 @@ pub fn is_importable_ext(path: &Path) -> bool {
|
|||
if let Some(ext) = get_extension(path) {
|
||||
matches!(
|
||||
ext.as_str(),
|
||||
"ts" | "tsx" | "js" | "jsx" | "mjs" | "mts" | "cjs" | "cts" | "json"
|
||||
"ts"
|
||||
| "tsx"
|
||||
| "js"
|
||||
| "jsx"
|
||||
| "mjs"
|
||||
| "mts"
|
||||
| "cjs"
|
||||
| "cts"
|
||||
| "json"
|
||||
| "wasm"
|
||||
)
|
||||
} else {
|
||||
false
|
||||
|
@ -222,6 +231,7 @@ mod test {
|
|||
assert!(is_script_ext(Path::new("foo.cjs")));
|
||||
assert!(is_script_ext(Path::new("foo.cts")));
|
||||
assert!(!is_script_ext(Path::new("foo.json")));
|
||||
assert!(!is_script_ext(Path::new("foo.wasm")));
|
||||
assert!(!is_script_ext(Path::new("foo.mjsx")));
|
||||
}
|
||||
|
||||
|
@ -243,6 +253,7 @@ mod test {
|
|||
assert!(is_importable_ext(Path::new("foo.cjs")));
|
||||
assert!(is_importable_ext(Path::new("foo.cts")));
|
||||
assert!(is_importable_ext(Path::new("foo.json")));
|
||||
assert!(is_importable_ext(Path::new("foo.wasm")));
|
||||
assert!(!is_importable_ext(Path::new("foo.mjsx")));
|
||||
}
|
||||
|
||||
|
|
|
@ -10,9 +10,10 @@
|
|||
/// <reference path="./lib.deno_fetch.d.ts" />
|
||||
/// <reference lib="esnext" />
|
||||
|
||||
import { core, primordials } from "ext:core/mod.js";
|
||||
import { core, internals, primordials } from "ext:core/mod.js";
|
||||
import {
|
||||
op_fetch,
|
||||
op_fetch_promise_is_settled,
|
||||
op_fetch_send,
|
||||
op_wasm_streaming_feed,
|
||||
op_wasm_streaming_set_url,
|
||||
|
@ -28,7 +29,10 @@ const {
|
|||
PromisePrototypeThen,
|
||||
PromisePrototypeCatch,
|
||||
SafeArrayIterator,
|
||||
SafePromisePrototypeFinally,
|
||||
String,
|
||||
StringPrototypeEndsWith,
|
||||
StringPrototypeSlice,
|
||||
StringPrototypeStartsWith,
|
||||
StringPrototypeToLowerCase,
|
||||
TypeError,
|
||||
|
@ -63,6 +67,12 @@ const REQUEST_BODY_HEADER_NAMES = [
|
|||
"content-type",
|
||||
];
|
||||
|
||||
const REDIRECT_SENSITIVE_HEADER_NAMES = [
|
||||
"authorization",
|
||||
"proxy-authorization",
|
||||
"cookie",
|
||||
];
|
||||
|
||||
/**
|
||||
* @param {number} rid
|
||||
* @returns {Promise<{ status: number, statusText: string, headers: [string, string][], url: string, responseRid: number, error: [string, string]? }>}
|
||||
|
@ -250,12 +260,14 @@ function httpRedirectFetch(request, response, terminator) {
|
|||
if (locationHeaders.length === 0) {
|
||||
return response;
|
||||
}
|
||||
|
||||
const currentURL = new URL(request.currentUrl());
|
||||
const locationURL = new URL(
|
||||
locationHeaders[0][1],
|
||||
response.url() ?? undefined,
|
||||
);
|
||||
if (locationURL.hash === "") {
|
||||
locationURL.hash = request.currentUrl().hash;
|
||||
locationURL.hash = currentURL.hash;
|
||||
}
|
||||
if (locationURL.protocol !== "https:" && locationURL.protocol !== "http:") {
|
||||
return networkError("Can not redirect to a non HTTP(s) url");
|
||||
|
@ -294,6 +306,28 @@ function httpRedirectFetch(request, response, terminator) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Drop confidential headers when redirecting to a less secure protocol
|
||||
// or to a different domain that is not a superdomain
|
||||
if (
|
||||
locationURL.protocol !== currentURL.protocol &&
|
||||
locationURL.protocol !== "https:" ||
|
||||
locationURL.host !== currentURL.host &&
|
||||
!isSubdomain(locationURL.host, currentURL.host)
|
||||
) {
|
||||
for (let i = 0; i < request.headerList.length; i++) {
|
||||
if (
|
||||
ArrayPrototypeIncludes(
|
||||
REDIRECT_SENSITIVE_HEADER_NAMES,
|
||||
byteLowerCase(request.headerList[i][0]),
|
||||
)
|
||||
) {
|
||||
ArrayPrototypeSplice(request.headerList, i, 1);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (request.body !== null) {
|
||||
const res = extractBody(request.body.source);
|
||||
request.body = res.body;
|
||||
|
@ -307,93 +341,150 @@ function httpRedirectFetch(request, response, terminator) {
|
|||
* @param {RequestInit} init
|
||||
*/
|
||||
function fetch(input, init = { __proto__: null }) {
|
||||
// There is an async dispatch later that causes a stack trace disconnect.
|
||||
// We reconnect it by assigning the result of that dispatch to `opPromise`,
|
||||
// awaiting `opPromise` in an inner function also named `fetch()` and
|
||||
// returning the result from that.
|
||||
let opPromise = undefined;
|
||||
// 1.
|
||||
const result = new Promise((resolve, reject) => {
|
||||
const prefix = "Failed to execute 'fetch'";
|
||||
webidl.requiredArguments(arguments.length, 1, prefix);
|
||||
// 2.
|
||||
const requestObject = new Request(input, init);
|
||||
// 3.
|
||||
const request = toInnerRequest(requestObject);
|
||||
// 4.
|
||||
if (requestObject.signal.aborted) {
|
||||
reject(abortFetch(request, null, requestObject.signal.reason));
|
||||
return;
|
||||
let span;
|
||||
try {
|
||||
if (internals.telemetry?.tracingEnabled) {
|
||||
span = new internals.telemetry.Span("fetch", { kind: 2 });
|
||||
internals.telemetry.enterSpan(span);
|
||||
}
|
||||
|
||||
// 7.
|
||||
let responseObject = null;
|
||||
// 9.
|
||||
let locallyAborted = false;
|
||||
// 10.
|
||||
function onabort() {
|
||||
locallyAborted = true;
|
||||
reject(
|
||||
abortFetch(request, responseObject, requestObject.signal.reason),
|
||||
);
|
||||
}
|
||||
requestObject.signal[abortSignal.add](onabort);
|
||||
// There is an async dispatch later that causes a stack trace disconnect.
|
||||
// We reconnect it by assigning the result of that dispatch to `opPromise`,
|
||||
// awaiting `opPromise` in an inner function also named `fetch()` and
|
||||
// returning the result from that.
|
||||
let opPromise = undefined;
|
||||
// 1.
|
||||
const result = new Promise((resolve, reject) => {
|
||||
const prefix = "Failed to execute 'fetch'";
|
||||
webidl.requiredArguments(arguments.length, 1, prefix);
|
||||
// 2.
|
||||
const requestObject = new Request(input, init);
|
||||
|
||||
if (!requestObject.headers.has("Accept")) {
|
||||
ArrayPrototypePush(request.headerList, ["Accept", "*/*"]);
|
||||
}
|
||||
if (span) {
|
||||
span.updateName(requestObject.method);
|
||||
span.setAttribute("http.request.method", requestObject.method);
|
||||
const url = new URL(requestObject.url);
|
||||
span.setAttribute("url.full", requestObject.url);
|
||||
span.setAttribute(
|
||||
"url.scheme",
|
||||
StringPrototypeSlice(url.protocol, 0, -1),
|
||||
);
|
||||
span.setAttribute("url.path", url.pathname);
|
||||
span.setAttribute("url.query", StringPrototypeSlice(url.search, 1));
|
||||
}
|
||||
|
||||
if (!requestObject.headers.has("Accept-Language")) {
|
||||
ArrayPrototypePush(request.headerList, ["Accept-Language", "*"]);
|
||||
}
|
||||
// 3.
|
||||
const request = toInnerRequest(requestObject);
|
||||
// 4.
|
||||
if (requestObject.signal.aborted) {
|
||||
reject(abortFetch(request, null, requestObject.signal.reason));
|
||||
return;
|
||||
}
|
||||
// 7.
|
||||
let responseObject = null;
|
||||
// 9.
|
||||
let locallyAborted = false;
|
||||
// 10.
|
||||
function onabort() {
|
||||
locallyAborted = true;
|
||||
reject(
|
||||
abortFetch(request, responseObject, requestObject.signal.reason),
|
||||
);
|
||||
}
|
||||
requestObject.signal[abortSignal.add](onabort);
|
||||
|
||||
// 12.
|
||||
opPromise = PromisePrototypeCatch(
|
||||
PromisePrototypeThen(
|
||||
mainFetch(request, false, requestObject.signal),
|
||||
(response) => {
|
||||
// 12.1.
|
||||
if (locallyAborted) return;
|
||||
// 12.2.
|
||||
if (response.aborted) {
|
||||
reject(
|
||||
abortFetch(
|
||||
request,
|
||||
responseObject,
|
||||
requestObject.signal.reason,
|
||||
),
|
||||
);
|
||||
if (!requestObject.headers.has("Accept")) {
|
||||
ArrayPrototypePush(request.headerList, ["Accept", "*/*"]);
|
||||
}
|
||||
|
||||
if (!requestObject.headers.has("Accept-Language")) {
|
||||
ArrayPrototypePush(request.headerList, ["Accept-Language", "*"]);
|
||||
}
|
||||
|
||||
// 12.
|
||||
opPromise = PromisePrototypeCatch(
|
||||
PromisePrototypeThen(
|
||||
mainFetch(request, false, requestObject.signal),
|
||||
(response) => {
|
||||
// 12.1.
|
||||
if (locallyAborted) return;
|
||||
// 12.2.
|
||||
if (response.aborted) {
|
||||
reject(
|
||||
abortFetch(
|
||||
request,
|
||||
responseObject,
|
||||
requestObject.signal.reason,
|
||||
),
|
||||
);
|
||||
requestObject.signal[abortSignal.remove](onabort);
|
||||
return;
|
||||
}
|
||||
// 12.3.
|
||||
if (response.type === "error") {
|
||||
const err = new TypeError(
|
||||
"Fetch failed: " + (response.error ?? "unknown error"),
|
||||
);
|
||||
reject(err);
|
||||
requestObject.signal[abortSignal.remove](onabort);
|
||||
return;
|
||||
}
|
||||
responseObject = fromInnerResponse(response, "immutable");
|
||||
|
||||
if (span) {
|
||||
span.setAttribute(
|
||||
"http.response.status_code",
|
||||
String(responseObject.status),
|
||||
);
|
||||
}
|
||||
|
||||
resolve(responseObject);
|
||||
requestObject.signal[abortSignal.remove](onabort);
|
||||
return;
|
||||
}
|
||||
// 12.3.
|
||||
if (response.type === "error") {
|
||||
const err = new TypeError(
|
||||
"Fetch failed: " + (response.error ?? "unknown error"),
|
||||
);
|
||||
reject(err);
|
||||
requestObject.signal[abortSignal.remove](onabort);
|
||||
return;
|
||||
}
|
||||
responseObject = fromInnerResponse(response, "immutable");
|
||||
resolve(responseObject);
|
||||
},
|
||||
),
|
||||
(err) => {
|
||||
reject(err);
|
||||
requestObject.signal[abortSignal.remove](onabort);
|
||||
},
|
||||
),
|
||||
(err) => {
|
||||
reject(err);
|
||||
requestObject.signal[abortSignal.remove](onabort);
|
||||
},
|
||||
);
|
||||
});
|
||||
if (opPromise) {
|
||||
PromisePrototypeCatch(result, () => {});
|
||||
return (async function fetch() {
|
||||
await opPromise;
|
||||
return result;
|
||||
})();
|
||||
);
|
||||
});
|
||||
|
||||
if (opPromise) {
|
||||
PromisePrototypeCatch(result, () => {});
|
||||
return (async function fetch() {
|
||||
try {
|
||||
await opPromise;
|
||||
return result;
|
||||
} finally {
|
||||
if (span) {
|
||||
internals.telemetry.endSpan(span);
|
||||
}
|
||||
}
|
||||
})();
|
||||
}
|
||||
// We need to end the span when the promise settles.
|
||||
// WPT has a test that aborted fetch is settled in the same tick.
|
||||
// This means we cannot wrap the promise if it is already settled.
|
||||
// But this is OK, because we can just immediately end the span
|
||||
// in that case.
|
||||
if (span) {
|
||||
// XXX: This should always be true, otherwise `opPromise` would be present.
|
||||
if (op_fetch_promise_is_settled(result)) {
|
||||
// It's already settled.
|
||||
internals.telemetry.endSpan(span);
|
||||
} else {
|
||||
// Not settled yet, we can return a new wrapper promise.
|
||||
return SafePromisePrototypeFinally(result, () => {
|
||||
internals.telemetry.endSpan(span);
|
||||
});
|
||||
}
|
||||
}
|
||||
return result;
|
||||
} finally {
|
||||
if (span) {
|
||||
internals.telemetry.exitSpan(span);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function abortFetch(request, responseObject, error) {
|
||||
|
@ -410,6 +501,19 @@ function abortFetch(request, responseObject, error) {
|
|||
return error;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the given string is a subdomain of the given domain.
|
||||
*
|
||||
* @param {String} subdomain
|
||||
* @param {String} domain
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
function isSubdomain(subdomain, domain) {
|
||||
const dot = subdomain.length - domain.length - 1;
|
||||
return dot > 0 && subdomain[dot] === "." &&
|
||||
StringPrototypeEndsWith(subdomain, domain);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the Response argument to the WebAssembly streaming APIs, after
|
||||
* resolving if it was passed as a promise. This function should be registered
|
||||
|
|
|
@ -27,6 +27,7 @@ use deno_core::futures::TryFutureExt;
|
|||
use deno_core::op2;
|
||||
use deno_core::url;
|
||||
use deno_core::url::Url;
|
||||
use deno_core::v8;
|
||||
use deno_core::AsyncRefCell;
|
||||
use deno_core::AsyncResult;
|
||||
use deno_core::BufView;
|
||||
|
@ -141,6 +142,7 @@ deno_core::extension!(deno_fetch,
|
|||
op_fetch_send,
|
||||
op_utf8_to_byte_string,
|
||||
op_fetch_custom_client<FP>,
|
||||
op_fetch_promise_is_settled,
|
||||
],
|
||||
esm = [
|
||||
"20_headers.js",
|
||||
|
@ -1206,3 +1208,8 @@ pub fn extract_authority(url: &mut Url) -> Option<(String, Option<String>)> {
|
|||
|
||||
None
|
||||
}
|
||||
|
||||
#[op2(fast)]
|
||||
fn op_fetch_promise_is_settled(promise: v8::Local<v8::Promise>) -> bool {
|
||||
promise.state() != v8::PromiseState::Pending
|
||||
}
|
||||
|
|
|
@ -34,8 +34,11 @@ const {
|
|||
ObjectHasOwn,
|
||||
ObjectPrototypeIsPrototypeOf,
|
||||
PromisePrototypeCatch,
|
||||
SafePromisePrototypeFinally,
|
||||
PromisePrototypeThen,
|
||||
String,
|
||||
StringPrototypeIncludes,
|
||||
StringPrototypeSlice,
|
||||
Symbol,
|
||||
TypeError,
|
||||
TypedArrayPrototypeGetSymbolToStringTag,
|
||||
|
@ -513,91 +516,139 @@ function fastSyncResponseOrStream(
|
|||
* This function returns a promise that will only reject in the case of abnormal exit.
|
||||
*/
|
||||
function mapToCallback(context, callback, onError) {
|
||||
return async function (req) {
|
||||
const asyncContext = getAsyncContext();
|
||||
setAsyncContext(context.asyncContext);
|
||||
|
||||
let mapped = async function (req, span) {
|
||||
// Get the response from the user-provided callback. If that fails, use onError. If that fails, return a fallback
|
||||
// 500 error.
|
||||
let innerRequest;
|
||||
let response;
|
||||
try {
|
||||
// Get the response from the user-provided callback. If that fails, use onError. If that fails, return a fallback
|
||||
// 500 error.
|
||||
let innerRequest;
|
||||
let response;
|
||||
try {
|
||||
innerRequest = new InnerRequest(req, context);
|
||||
const request = fromInnerRequest(innerRequest, "immutable");
|
||||
innerRequest.request = request;
|
||||
response = await callback(
|
||||
request,
|
||||
new ServeHandlerInfo(innerRequest),
|
||||
);
|
||||
innerRequest = new InnerRequest(req, context);
|
||||
const request = fromInnerRequest(innerRequest, "immutable");
|
||||
innerRequest.request = request;
|
||||
|
||||
// Throwing Error if the handler return value is not a Response class
|
||||
if (span) {
|
||||
span.updateName(request.method);
|
||||
span.setAttribute("http.request.method", request.method);
|
||||
const url = new URL(request.url);
|
||||
span.setAttribute("url.full", request.url);
|
||||
span.setAttribute(
|
||||
"url.scheme",
|
||||
StringPrototypeSlice(url.protocol, 0, -1),
|
||||
);
|
||||
span.setAttribute("url.path", url.pathname);
|
||||
span.setAttribute("url.query", StringPrototypeSlice(url.search, 1));
|
||||
}
|
||||
|
||||
response = await callback(
|
||||
request,
|
||||
new ServeHandlerInfo(innerRequest),
|
||||
);
|
||||
|
||||
// Throwing Error if the handler return value is not a Response class
|
||||
if (!ObjectPrototypeIsPrototypeOf(ResponsePrototype, response)) {
|
||||
throw new TypeError(
|
||||
"Return value from serve handler must be a response or a promise resolving to a response",
|
||||
);
|
||||
}
|
||||
|
||||
if (response.type === "error") {
|
||||
throw new TypeError(
|
||||
"Return value from serve handler must not be an error response (like Response.error())",
|
||||
);
|
||||
}
|
||||
|
||||
if (response.bodyUsed) {
|
||||
throw new TypeError(
|
||||
"The body of the Response returned from the serve handler has already been consumed",
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
try {
|
||||
response = await onError(error);
|
||||
if (!ObjectPrototypeIsPrototypeOf(ResponsePrototype, response)) {
|
||||
throw new TypeError(
|
||||
"Return value from serve handler must be a response or a promise resolving to a response",
|
||||
);
|
||||
}
|
||||
|
||||
if (response.type === "error") {
|
||||
throw new TypeError(
|
||||
"Return value from serve handler must not be an error response (like Response.error())",
|
||||
);
|
||||
}
|
||||
|
||||
if (response.bodyUsed) {
|
||||
throw new TypeError(
|
||||
"The body of the Response returned from the serve handler has already been consumed",
|
||||
"Return value from onError handler must be a response or a promise resolving to a response",
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
try {
|
||||
response = await onError(error);
|
||||
if (!ObjectPrototypeIsPrototypeOf(ResponsePrototype, response)) {
|
||||
throw new TypeError(
|
||||
"Return value from onError handler must be a response or a promise resolving to a response",
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
// deno-lint-ignore no-console
|
||||
console.error("Exception in onError while handling exception", error);
|
||||
response = internalServerError();
|
||||
}
|
||||
// deno-lint-ignore no-console
|
||||
console.error("Exception in onError while handling exception", error);
|
||||
response = internalServerError();
|
||||
}
|
||||
const inner = toInnerResponse(response);
|
||||
if (innerRequest?.[_upgraded]) {
|
||||
// We're done here as the connection has been upgraded during the callback and no longer requires servicing.
|
||||
if (response !== UPGRADE_RESPONSE_SENTINEL) {
|
||||
// deno-lint-ignore no-console
|
||||
console.error("Upgrade response was not returned from callback");
|
||||
context.close();
|
||||
}
|
||||
innerRequest?.[_upgraded]();
|
||||
return;
|
||||
}
|
||||
|
||||
// Did everything shut down while we were waiting?
|
||||
if (context.closed) {
|
||||
// We're shutting down, so this status shouldn't make it back to the client but "Service Unavailable" seems appropriate
|
||||
innerRequest?.close();
|
||||
op_http_set_promise_complete(req, 503);
|
||||
return;
|
||||
}
|
||||
|
||||
const status = inner.status;
|
||||
const headers = inner.headerList;
|
||||
if (headers && headers.length > 0) {
|
||||
if (headers.length == 1) {
|
||||
op_http_set_response_header(req, headers[0][0], headers[0][1]);
|
||||
} else {
|
||||
op_http_set_response_headers(req, headers);
|
||||
}
|
||||
}
|
||||
|
||||
fastSyncResponseOrStream(req, inner.body, status, innerRequest);
|
||||
} finally {
|
||||
setAsyncContext(asyncContext);
|
||||
}
|
||||
|
||||
if (span) {
|
||||
span.setAttribute(
|
||||
"http.response.status_code",
|
||||
String(response.status),
|
||||
);
|
||||
}
|
||||
|
||||
const inner = toInnerResponse(response);
|
||||
if (innerRequest?.[_upgraded]) {
|
||||
// We're done here as the connection has been upgraded during the callback and no longer requires servicing.
|
||||
if (response !== UPGRADE_RESPONSE_SENTINEL) {
|
||||
// deno-lint-ignore no-console
|
||||
console.error("Upgrade response was not returned from callback");
|
||||
context.close();
|
||||
}
|
||||
innerRequest?.[_upgraded]();
|
||||
return;
|
||||
}
|
||||
|
||||
// Did everything shut down while we were waiting?
|
||||
if (context.closed) {
|
||||
// We're shutting down, so this status shouldn't make it back to the client but "Service Unavailable" seems appropriate
|
||||
innerRequest?.close();
|
||||
op_http_set_promise_complete(req, 503);
|
||||
return;
|
||||
}
|
||||
|
||||
const status = inner.status;
|
||||
const headers = inner.headerList;
|
||||
if (headers && headers.length > 0) {
|
||||
if (headers.length == 1) {
|
||||
op_http_set_response_header(req, headers[0][0], headers[0][1]);
|
||||
} else {
|
||||
op_http_set_response_headers(req, headers);
|
||||
}
|
||||
}
|
||||
|
||||
fastSyncResponseOrStream(req, inner.body, status, innerRequest);
|
||||
};
|
||||
|
||||
if (internals.telemetry?.tracingEnabled) {
|
||||
const { Span, enterSpan, endSpan } = internals.telemetry;
|
||||
const origMapped = mapped;
|
||||
mapped = function (req, _span) {
|
||||
const oldCtx = getAsyncContext();
|
||||
setAsyncContext(context.asyncContext);
|
||||
const span = new Span("deno.serve", { kind: 1 });
|
||||
try {
|
||||
enterSpan(span);
|
||||
return SafePromisePrototypeFinally(
|
||||
origMapped(req, span),
|
||||
() => endSpan(span),
|
||||
);
|
||||
} finally {
|
||||
// equiv to exitSpan.
|
||||
setAsyncContext(oldCtx);
|
||||
}
|
||||
};
|
||||
} else {
|
||||
const origMapped = mapped;
|
||||
mapped = function (req, span) {
|
||||
const oldCtx = getAsyncContext();
|
||||
setAsyncContext(context.asyncContext);
|
||||
try {
|
||||
return origMapped(req, span);
|
||||
} finally {
|
||||
setAsyncContext(oldCtx);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
return mapped;
|
||||
}
|
||||
|
||||
type RawHandler = (
|
||||
|
@ -795,7 +846,7 @@ function serveHttpOn(context, addr, callback) {
|
|||
// Attempt to pull as many requests out of the queue as possible before awaiting. This API is
|
||||
// a synchronous, non-blocking API that returns u32::MAX if anything goes wrong.
|
||||
while ((req = op_http_try_wait(rid)) !== null) {
|
||||
PromisePrototypeCatch(callback(req), promiseErrorHandler);
|
||||
PromisePrototypeCatch(callback(req, undefined), promiseErrorHandler);
|
||||
}
|
||||
currentPromise = op_http_wait(rid);
|
||||
if (!ref) {
|
||||
|
@ -815,7 +866,7 @@ function serveHttpOn(context, addr, callback) {
|
|||
if (req === null) {
|
||||
break;
|
||||
}
|
||||
PromisePrototypeCatch(callback(req), promiseErrorHandler);
|
||||
PromisePrototypeCatch(callback(req, undefined), promiseErrorHandler);
|
||||
}
|
||||
|
||||
try {
|
||||
|
|
|
@ -63,3 +63,24 @@ export function fstatSync(
|
|||
const origin = new FsFile(fd, Symbol.for("Deno.internal.FsFile")).statSync();
|
||||
return CFISBIS(origin, options?.bigint || false);
|
||||
}
|
||||
|
||||
export function fstatPromise(fd: number): Promise<Stats>;
|
||||
export function fstatPromise(
|
||||
fd: number,
|
||||
options: { bigint: false },
|
||||
): Promise<Stats>;
|
||||
export function fstatPromise(
|
||||
fd: number,
|
||||
options: { bigint: true },
|
||||
): Promise<BigIntStats>;
|
||||
export function fstatPromise(
|
||||
fd: number,
|
||||
options?: statOptions,
|
||||
): Stats | BigIntStats {
|
||||
return new Promise((resolve, reject) => {
|
||||
fstat(fd, options, (err, stats) => {
|
||||
if (err) reject(err);
|
||||
else resolve(stats);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ import Dir from "ext:deno_node/_fs/_fs_dir.ts";
|
|||
import Dirent from "ext:deno_node/_fs/_fs_dirent.ts";
|
||||
import { exists, existsSync } from "ext:deno_node/_fs/_fs_exists.ts";
|
||||
import { fdatasync, fdatasyncSync } from "ext:deno_node/_fs/_fs_fdatasync.ts";
|
||||
import { fstat, fstatSync } from "ext:deno_node/_fs/_fs_fstat.ts";
|
||||
import { fstat, fstatPromise, fstatSync } from "ext:deno_node/_fs/_fs_fstat.ts";
|
||||
import { fsync, fsyncSync } from "ext:deno_node/_fs/_fs_fsync.ts";
|
||||
import { ftruncate, ftruncateSync } from "ext:deno_node/_fs/_fs_ftruncate.ts";
|
||||
import { futimes, futimesSync } from "ext:deno_node/_fs/_fs_futimes.ts";
|
||||
|
@ -174,6 +174,7 @@ const promises = {
|
|||
lstat: lstatPromise,
|
||||
stat: statPromise,
|
||||
statfs: statfsPromise,
|
||||
fstat: fstatPromise,
|
||||
link: linkPromise,
|
||||
unlink: unlinkPromise,
|
||||
chmod: chmodPromise,
|
||||
|
|
|
@ -16,6 +16,7 @@ export const readlink = fsPromises.readlink;
|
|||
export const symlink = fsPromises.symlink;
|
||||
export const lstat = fsPromises.lstat;
|
||||
export const stat = fsPromises.stat;
|
||||
export const fstat = fsPromises.fstat;
|
||||
export const link = fsPromises.link;
|
||||
export const unlink = fsPromises.unlink;
|
||||
export const chmod = fsPromises.chmod;
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
import { EventEmitter } from "node:events";
|
||||
import { Buffer } from "node:buffer";
|
||||
import { promises, read, write } from "node:fs";
|
||||
export type { BigIntStats, Stats } from "ext:deno_node/_fs/_fs_stat.ts";
|
||||
import {
|
||||
BinaryOptionsArgument,
|
||||
FileOptionsArgument,
|
||||
|
@ -141,6 +142,13 @@ export class FileHandle extends EventEmitter {
|
|||
// Note that Deno.close is not async
|
||||
return Promise.resolve(core.close(this.fd));
|
||||
}
|
||||
|
||||
stat(): Promise<Stats>;
|
||||
stat(options: { bigint: false }): Promise<Stats>;
|
||||
stat(options: { bigint: true }): Promise<BigIntStats>;
|
||||
stat(options?: { bigint: boolean }): Promise<Stats | BigIntStats> {
|
||||
return fsCall(promises.fstat, this, options);
|
||||
}
|
||||
}
|
||||
|
||||
function fsCall(fn, handle, ...args) {
|
||||
|
@ -152,7 +160,7 @@ function fsCall(fn, handle, ...args) {
|
|||
});
|
||||
}
|
||||
|
||||
return fn(handle, ...args);
|
||||
return fn(handle.fd, ...args);
|
||||
}
|
||||
|
||||
export default {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
||||
|
||||
import { core, primordials } from "ext:core/mod.js";
|
||||
import { core, internals, primordials } from "ext:core/mod.js";
|
||||
import {
|
||||
op_crypto_get_random_values,
|
||||
op_otel_instrumentation_scope_create_and_enter,
|
||||
|
@ -32,17 +32,17 @@ const {
|
|||
ObjectDefineProperty,
|
||||
WeakRefPrototypeDeref,
|
||||
String,
|
||||
StringPrototypePadStart,
|
||||
ObjectPrototypeIsPrototypeOf,
|
||||
DataView,
|
||||
DataViewPrototypeSetUint32,
|
||||
SafeWeakRef,
|
||||
TypedArrayPrototypeGetBuffer,
|
||||
} = primordials;
|
||||
const { AsyncVariable, setAsyncContext } = core;
|
||||
|
||||
let TRACING_ENABLED = false;
|
||||
let DETERMINISTIC = false;
|
||||
|
||||
// Note: These start at 0 in the JS library,
|
||||
// but start at 1 when serialized with JSON.
|
||||
enum SpanKind {
|
||||
INTERNAL = 0,
|
||||
SERVER = 1,
|
||||
|
@ -93,6 +93,11 @@ interface Attributes {
|
|||
|
||||
type SpanAttributes = Attributes;
|
||||
|
||||
interface SpanOptions {
|
||||
attributes?: Attributes;
|
||||
kind?: SpanKind;
|
||||
}
|
||||
|
||||
interface Link {
|
||||
context: SpanContext;
|
||||
attributes?: SpanAttributes;
|
||||
|
@ -356,7 +361,7 @@ export class Span {
|
|||
|
||||
#recording = TRACING_ENABLED;
|
||||
|
||||
#kind: number = 0;
|
||||
#kind: number = SpanKind.INTERNAL;
|
||||
#name: string;
|
||||
#startTime: number;
|
||||
#status: { code: number; message?: string } | null = null;
|
||||
|
@ -404,7 +409,7 @@ export class Span {
|
|||
span.#asyncContext = NO_ASYNC_CONTEXT;
|
||||
};
|
||||
|
||||
exitSpan = (span: Span) => {
|
||||
endSpan = (span: Span) => {
|
||||
const endTime = now();
|
||||
submit(
|
||||
span.#spanId,
|
||||
|
@ -431,7 +436,7 @@ export class Span {
|
|||
|
||||
constructor(
|
||||
name: string,
|
||||
attributes?: Attributes,
|
||||
options?: SpanOptions,
|
||||
) {
|
||||
if (!this.isRecording) {
|
||||
this.#name = "";
|
||||
|
@ -444,44 +449,17 @@ export class Span {
|
|||
|
||||
this.#name = name;
|
||||
this.#startTime = now();
|
||||
this.#attributes = attributes ?? { __proto__: null } as never;
|
||||
this.#attributes = options?.attributes ?? { __proto__: null } as never;
|
||||
this.#kind = options?.kind ?? SpanKind.INTERNAL;
|
||||
|
||||
const currentSpan: Span | {
|
||||
spanContext(): { traceId: string; spanId: string };
|
||||
} = CURRENT.get()?.getValue(SPAN_KEY);
|
||||
if (!currentSpan) {
|
||||
const buffer = new Uint8Array(TRACE_ID_BYTES + SPAN_ID_BYTES);
|
||||
if (currentSpan) {
|
||||
if (DETERMINISTIC) {
|
||||
DataViewPrototypeSetUint32(
|
||||
new DataView(TypedArrayPrototypeGetBuffer(buffer)),
|
||||
TRACE_ID_BYTES - 4,
|
||||
COUNTER,
|
||||
true,
|
||||
);
|
||||
COUNTER += 1;
|
||||
DataViewPrototypeSetUint32(
|
||||
new DataView(TypedArrayPrototypeGetBuffer(buffer)),
|
||||
TRACE_ID_BYTES + SPAN_ID_BYTES - 4,
|
||||
COUNTER,
|
||||
true,
|
||||
);
|
||||
COUNTER += 1;
|
||||
} else {
|
||||
op_crypto_get_random_values(buffer);
|
||||
}
|
||||
this.#traceId = TypedArrayPrototypeSubarray(buffer, 0, TRACE_ID_BYTES);
|
||||
this.#spanId = TypedArrayPrototypeSubarray(buffer, TRACE_ID_BYTES);
|
||||
} else {
|
||||
this.#spanId = new Uint8Array(SPAN_ID_BYTES);
|
||||
if (DETERMINISTIC) {
|
||||
DataViewPrototypeSetUint32(
|
||||
new DataView(TypedArrayPrototypeGetBuffer(this.#spanId)),
|
||||
SPAN_ID_BYTES - 4,
|
||||
COUNTER,
|
||||
true,
|
||||
);
|
||||
COUNTER += 1;
|
||||
this.#spanId = StringPrototypePadStart(String(COUNTER++), 16, "0");
|
||||
} else {
|
||||
this.#spanId = new Uint8Array(SPAN_ID_BYTES);
|
||||
op_crypto_get_random_values(this.#spanId);
|
||||
}
|
||||
// deno-lint-ignore prefer-primordials
|
||||
|
@ -493,6 +471,16 @@ export class Span {
|
|||
this.#traceId = context.traceId;
|
||||
this.#parentSpanId = context.spanId;
|
||||
}
|
||||
} else {
|
||||
if (DETERMINISTIC) {
|
||||
this.#traceId = StringPrototypePadStart(String(COUNTER++), 32, "0");
|
||||
this.#spanId = StringPrototypePadStart(String(COUNTER++), 16, "0");
|
||||
} else {
|
||||
const buffer = new Uint8Array(TRACE_ID_BYTES + SPAN_ID_BYTES);
|
||||
op_crypto_get_random_values(buffer);
|
||||
this.#traceId = TypedArrayPrototypeSubarray(buffer, 0, TRACE_ID_BYTES);
|
||||
this.#spanId = TypedArrayPrototypeSubarray(buffer, TRACE_ID_BYTES);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -717,4 +705,16 @@ export function bootstrap(
|
|||
}
|
||||
}
|
||||
|
||||
export const telemetry = { SpanExporter, ContextManager };
|
||||
export const telemetry = {
|
||||
SpanExporter,
|
||||
ContextManager,
|
||||
};
|
||||
internals.telemetry = {
|
||||
Span,
|
||||
enterSpan,
|
||||
exitSpan,
|
||||
endSpan,
|
||||
get tracingEnabled() {
|
||||
return TRACING_ENABLED;
|
||||
},
|
||||
};
|
||||
|
|
|
@ -109,6 +109,14 @@ fn starts_with_canonicalized(path: &Path, prefix: &str) -> bool {
|
|||
}
|
||||
}
|
||||
|
||||
fn is_file_removed(event_path: &PathBuf) -> bool {
|
||||
let exists_path = std::fs::exists(event_path);
|
||||
match exists_path {
|
||||
Ok(res) => !res,
|
||||
Err(_) => false,
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, thiserror::Error)]
|
||||
pub enum FsEventsError {
|
||||
#[error(transparent)]
|
||||
|
@ -150,6 +158,13 @@ fn start_watcher(
|
|||
})
|
||||
}) {
|
||||
let _ = sender.try_send(Ok(event.clone()));
|
||||
} else if event.paths.iter().any(is_file_removed) {
|
||||
let remove_event = FsEvent {
|
||||
kind: "remove",
|
||||
paths: event.paths.clone(),
|
||||
flag: None,
|
||||
};
|
||||
let _ = sender.try_send(Ok(remove_event));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -835,9 +835,9 @@ fn op_otel_span_set_dropped(
|
|||
#[smi] dropped_events_count: u32,
|
||||
) {
|
||||
if let Some(temporary_span) = state.try_borrow_mut::<TemporarySpan>() {
|
||||
temporary_span.0.dropped_attributes_count = dropped_attributes_count;
|
||||
temporary_span.0.links.dropped_count = dropped_links_count;
|
||||
temporary_span.0.events.dropped_count = dropped_events_count;
|
||||
temporary_span.0.dropped_attributes_count += dropped_attributes_count;
|
||||
temporary_span.0.links.dropped_count += dropped_links_count;
|
||||
temporary_span.0.events.dropped_count += dropped_events_count;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1360,26 +1360,31 @@ fn lsp_deno_task() {
|
|||
let temp_dir = context.temp_dir();
|
||||
temp_dir.write(
|
||||
"deno.jsonc",
|
||||
r#"{
|
||||
"tasks": {
|
||||
"build": "deno test"
|
||||
}
|
||||
}"#,
|
||||
json!({
|
||||
"tasks": {
|
||||
"build": "deno test",
|
||||
"serve": {
|
||||
"description": "Start the dev server",
|
||||
"command": "deno run -RN server.ts",
|
||||
},
|
||||
},
|
||||
})
|
||||
.to_string(),
|
||||
);
|
||||
|
||||
let mut client = context.new_lsp_command().build();
|
||||
client.initialize(|builder| {
|
||||
builder.set_config("./deno.jsonc");
|
||||
});
|
||||
|
||||
let res = client.write_request("deno/task", json!(null));
|
||||
|
||||
client.initialize_default();
|
||||
let res = client.write_request("deno/taskDefinitions", json!(null));
|
||||
assert_eq!(
|
||||
res,
|
||||
json!([
|
||||
{
|
||||
"name": "build",
|
||||
"detail": "deno test",
|
||||
"command": "deno test",
|
||||
"sourceUri": temp_dir.url().join("deno.jsonc").unwrap(),
|
||||
},
|
||||
{
|
||||
"name": "serve",
|
||||
"command": "deno run -RN server.ts",
|
||||
"sourceUri": temp_dir.url().join("deno.jsonc").unwrap(),
|
||||
}
|
||||
])
|
||||
|
|
|
@ -12,7 +12,6 @@ import * as JSONC from "@std/jsonc";
|
|||
type TestSuites = Record<string, string[]>;
|
||||
|
||||
interface Config {
|
||||
nodeVersion: string;
|
||||
/** Ignored files won't regenerated by the update script */
|
||||
ignore: TestSuites;
|
||||
/**
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
"nodeVersion": "18.12.1",
|
||||
"ignore": {
|
||||
"common": ["index.js", "internet.js"],
|
||||
"fixtures": [
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -11,12 +11,13 @@ import { ensureFile } from "@std/fs/ensure-file";
|
|||
import { writeAll } from "@std/io/write-all";
|
||||
import { withoutAll } from "@std/collections/without-all";
|
||||
import { relative } from "@std/path/posix/relative";
|
||||
import { version } from "./suite/node_version.ts";
|
||||
|
||||
import { config, ignoreList } from "../common.ts";
|
||||
|
||||
const encoder = new TextEncoder();
|
||||
|
||||
const NODE_VERSION = config.nodeVersion;
|
||||
const NODE_VERSION = version;
|
||||
|
||||
const NODE_IGNORED_TEST_DIRS = [
|
||||
"addons",
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit d12a68fc4930062c0bed26447a6b5245697e77c1
|
||||
Subproject commit 1c9511e584eb9d465bcd4b1e6c05ecedf7f15549
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
import { createRequire } from 'module';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
|
|
2
tests/node_compat/test/fixtures/a.js
vendored
2
tests/node_compat/test/fixtures/a.js
vendored
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
setInterval(function() {}, 9999);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
|
|
2
tests/node_compat/test/fixtures/loop.js
vendored
2
tests/node_compat/test/fixtures/loop.js
vendored
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
var t = 1;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
// Flags: --no-warnings --pending-deprecation
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 18.12.1
|
||||
// Taken from Node 20.11.1
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue