1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-01 16:51:13 -05:00
Commit graph

8796 commits

Author SHA1 Message Date
Bartek Iwańczuk
159f444d16 fix(prompt): better output with control chars (#18108) 2023-03-10 13:02:28 +09:00
David Sherret
2e16551d24 chore(ci): ensure Rust toolchain installation is based on rust-toolchain.toml (#18104)
It seems like `dtolnay/rust-toolchain` does not want to support
rust-toolchain.toml unfortunately and we had thought it did.
2023-03-10 13:02:20 +09:00
Bartek Iwańczuk
2cd5f64695 fix: Split extension registration and snapshotting (#18098)
This commit partially reverts changes from
https://github.com/denoland/deno/pull/18095.

Turns out I made a mistake that became apparent when working
on removing "RuntimeOptions::extensions_with_js" in a follow up.
2023-03-10 13:02:12 +09:00
David Sherret
0c0b5c1195 refactor(tests/lsp): consolidate more into test LspClient and reduce verbosity (#18100) 2023-03-10 13:02:04 +09:00
Divy Srivastava
f4cf507683 chore: bump rusty_v8 to 0.64.0 (#18096) 2023-03-10 13:01:55 +09:00
Bartek Iwańczuk
566db8921b chore: update Rust to 1.68.0 (#18102) 2023-03-10 13:01:49 +09:00
Bartek Iwańczuk
09de6a11d6 refactor: Split extension registration for runtime and snapshotting (#18095)
This commit splits "<ext_name>::init" functions into "init_ops" and
"init_ops_and_esm". That way we don't have to construct list of
ESM sources on each startup if we're running with a snapshot.

In a follow up commit "deno_core" will be changed to not have a split
between "extensions" and "extensions_with_js" - it will be embedders'
responsibility to pass appropriately configured extensions.

Prerequisite for https://github.com/denoland/deno/pull/18080
2023-03-10 13:01:41 +09:00
Divy Srivastava
716409e81e fix(ext/webstorage): check size of inputs before insert (#18087) 2023-03-10 13:01:34 +09:00
Bartek Iwańczuk
9ebbd23ced refactor(core): Extension::builder_with_deps (#18093)
Prerequisite for https://github.com/denoland/deno/pull/18080
2023-03-10 13:01:23 +09:00
Kenta Moriuchi
cd9f11ae38 fix(rumtime): Add Deno. prefix for registered symbols (#18086) 2023-03-10 13:01:17 +09:00
Bartek Iwańczuk
80d1b29587 perf(core): over-allocate in ModuleMap when running from snapshot (#18083)
This commit changes "ModuleMap" initialization to over-allocate by 16
for vectors storing module information and module V8 handles. In 99%
cases there's gonna be at least one additional module loaded, so it's
very wasteful to have to reallocate when the module is executed (IIRC
Rust will double the size of the vector) and move all of the elements.
2023-03-10 13:01:07 +09:00
Bartek Iwańczuk
f9b43044ef perf: don't add unload event listener (#18082)
This commit changes how "unload" event is handled - before
this commit an event listener was added unconditionally in
the runtime bootstrapping function, which for some reason was
very expensive (0.3ms). Instead of adding an event listener,
a check was added to "dispatchEvent" function that performs
the same action (so it's only called if there's an event dispatched).
2023-03-10 13:00:11 +09:00
David Sherret
9e08d43d68 refactor(lsp): improve test client initialization (#18015) 2023-03-10 12:59:47 +09:00
Roy Ivy III
e60677ddcf fix(runtime/windows): ensure Deno.stdin.setRaw(false) properly disables raw mode (#17983) 2023-03-10 12:59:34 +09:00
David Sherret
b064c95e93 fix(npm): improve peer dependency resolution with circular dependencies (#18069)
This improves peer dependency resolution yet again. We did not handle
scenarios like the following:

```
// a -> b -> c -> d -> c -> b (peer)
```

...which would maybe work ok the first time its run in some cases, but
then lead to a lockfile that would error on load.

This now keeps track of circular dependencies and updates nodes
accordingly. That said, there is still a lurking bug in this code
somewhere that I've added a comment for (there is a mitigation on the
tail end that seems to work well). The current state is much better than
before and I can look into it later. I think it's something small that's
incorrect.
2023-03-10 12:59:23 +09:00
Divy Srivastava
c39695736e feat(core): prevent isolate drop for CLI main worker (#18059)
```
Benchmark 1: deno run -A ../empty.js
  Time (mean ± σ):      20.5 ms ±   0.5 ms    [User: 13.4 ms, System: 5.1 ms]
  Range (min … max):    19.8 ms …  24.0 ms    119 runs

Benchmark 2: target/release/deno run -A ../empty.js
  Time (mean ± σ):      18.8 ms ±   0.3 ms    [User: 13.0 ms, System: 4.9 ms]
  Range (min … max):    18.3 ms …  19.9 ms    129 runs
  ```

---------

Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
2023-03-10 12:59:15 +09:00
Bartek Iwańczuk
81a9784116 chore: update tempfile dependency (#18077) 2023-03-10 12:59:04 +09:00
Miroslav Bajtoš
1b71011d75 deps: bump once_cell to ^1.17.1 (#18075) 2023-03-10 12:58:55 +09:00
Bartek Iwańczuk
88bf50c812 Revert "perf: disable snapshot compression (#18061)" (#18074)
This reverts commit d12b039e1a.

It was landed as an experiment and it confirms much faster startup
if not compression is applied.
2023-03-10 12:58:49 +09:00
David Sherret
35c889d1ad fix: attempt to only allow one deno process to update the node_modules folder at a time (#18058)
This is implemented in such a way that it should still allow processes
to go through when a file lock wasn't properly cleaned up and the OS
hasn't released it yet (but with a 200ms-ish delay).

Closes #18039
2023-03-10 12:58:41 +09:00
Bartek Iwańczuk
793089bdf0 refactor: rename InternalModuleLoader to ExtModuleLoader, use ext: scheme for snapshotted modules (#18041)
This commit renames "deno_core::InternalModuleLoader" to
"ExtModuleLoader" and changes the specifiers used by the 
modules loaded from this loader to "ext:".

"internal:" scheme was really ambiguous and it's more characters than
"ext:", which should result in slightly smaller snapshot size.

Closes https://github.com/denoland/deno/issues/18020
2023-03-10 12:58:25 +09:00
Bartek Iwańczuk
81293440be refactor(runtime): conditionally register Extension with source files (#18068)
Since we are snapshotting extension source at build time, there's no
need to define list of sources for the extension at runtime.

This commit changes "deno_node" extension by removing "init_polyfill"
function in favor of "init_polyfill_ops_and_esm()" and "init_polyfill_ops()".

The former is used during snapshot and when "deno_runtime" is compiled
with "dont_create_runtime_snapshot" cargo feature flag. The latter is used
when running a worker from an existing snapshot.

This is a start of a bigger refactor to all extensions - thanks to this
change, we don't have to iterate over all defined source files for extension at
runtime, and because of that we don't have to create a filepath for each of the
source files. It's not a big deal, but we are iterating over 300 files on each start,
and concatenating 3 strings before creating a "PathBuf" for ~200 of them.
This is already visible on the startup flamegraphs and should be avoided.
2023-03-10 12:58:18 +09:00
Bartek Iwańczuk
daab06b458 perf: move setting up Deno namespace to snapshot time (#18067)
No need to do it on startup every time.
2023-03-10 12:58:12 +09:00
Bartek Iwańczuk
3e16c3fe36 refactor(core): don't use Result in ExtensionBuilder::state (#18066)
There's no point for this API to expect result. If something fails it should
result in a panic during build time to signal to embedder that setup is
wrong.
2023-03-10 12:58:06 +09:00
Caleb Cox
ec69d8c8ab fix(cli): add space after period in --v8-flags (#18063)
Add space between period and "Any" in `--v8-flags` help text.
2023-03-10 12:57:58 +09:00
Bartek Iwańczuk
a9af072e2d perf: move runtime bootstrap code to snapshot time (#18062)
This commit moves some of the code from "99_main.js" to
be executed during the snapshot time instead of on each
worker bootstrap. These should minimally help with startup
time benchmark.
2023-03-10 12:57:46 +09:00
ayame113
36fc29869a chore(docs): Fixed manual link (#18060) 2023-03-10 12:57:26 +09:00
Bartek Iwańczuk
05eecec2f0 perf: disable snapshot compression (#18061)
This commit disables snapshot compression for the CLI snapshot.]

Decompressing the snapshot on startup takes ~2.5ms.
2023-03-10 12:57:19 +09:00
Bartek Iwańczuk
b67df0f07b refactor: Add "deno_fs" extension crate (#18040)
This commit factors out APIs related to file system from "runtime/"
to a separate "deno_fs" extension crate.
2023-03-10 12:57:09 +09:00
Nick Hanley
c879a00cc9 chore(tests): use temp dir in test missing_deno_dir (#18057)
Fixes #18056
2023-03-10 12:56:57 +09:00
Tristan F
406c95230f chore: remove duplicate copyright disclaimer (#18055)
Removes duplicate copyright disclaimer from `/lockfile/lib.rs`
2023-03-10 12:56:47 +09:00
Bartek Iwańczuk
91ea2cdc57 refactor: use v8::String::new_external_onebyte_static where appropriate (#18051) 2023-03-10 12:56:33 +09:00
David Sherret
bd6fd4ea5f chore(tests): ability to capture stdout and stderr separately (#18035)
This is to allow making assertions on stdout and stderr separately.
2023-03-10 12:56:18 +09:00
Divy Srivastava
f065380414 fix(ext/node): remove unused _hex module (#18045) 2023-03-10 12:56:05 +09:00
Divy Srivastava
38b4411cae perf(ext/node): improve createHash performance (#18033)
```
> deno run -A ../test.mjs
cpu: unknown
runtime: deno 1.31.1 (aarch64-apple-darwin)

benchmark      time (avg)             (min … max)       p75       p99      p995
------------------------------------------------- -----------------------------
             2.22 µs/iter      (2.2 µs … 2.28 µs)   2.22 µs   2.28 µs   2.28 µs

> target/release/deno run -A test.mjs
cpu: unknown
runtime: deno 1.31.1 (aarch64-apple-darwin)

benchmark      time (avg)             (min … max)       p75       p99      p995
------------------------------------------------- -----------------------------
            864.9 ns/iter   (825.05 ns … 1.22 µs) 864.93 ns   1.22 µs   1.22 µs
```
2023-03-10 12:55:55 +09:00
Bartek Iwańczuk
ce7a23b86d refactor: move "pathFromURL" to deno_web extension (#18037)
This API is required by several extensions like "ext/node", "ext/ffi"
and also FS APIs that we want to move to a separate crate. Because 
of that "pathFromURL" API was moved to "deno_web" extension so
other extension crates can rely on it.
2023-03-10 12:55:47 +09:00
Bartek Iwańczuk
b6a4b1c794 refactor(core): InternalModuleLoader checks if all files were used (#18005)
This commit changes "InternalModuleLoader" from "deno_core" to 
store a list of used modules during snapshotting. If a module was not
used during snapshotting "InternalModuleLoader" will panic in its "Drop"
handler signaling to the embedder that they made a mistake somewhere.
2023-03-10 12:55:33 +09:00
Bartek Iwańczuk
4fbc51ca46 refactor: move definition of Deno.build from "runtime" to "core" (#18036)
We use information about build in several extension crates like
"ext/node" or "runtime/". In an effort to move "fs" APIs to a separate 
crate it is a prerequisite to have this information available outside 
of the "runtime/" crate.

This commit moves definition of "build" object to "Deno.core" that is 
later forwarded to "Deno.build".
2023-03-10 12:55:19 +09:00
Nayeem Rahman
38ed6d55f7 fix(check): include dts files in tsc roots (#18026) 2023-03-10 12:55:13 +09:00
Divy Srivastava
be3d72876a chore(ext/node): cleanup empty internal_bindings (#18032) 2023-03-10 12:52:10 +09:00
Filip Skokan
7e0cc3cb2f fix(ext/crypto): correctly limit ECDSA and hash algorithms (#18030)
Closes #18029
2023-03-10 12:52:00 +09:00
Bartek Iwańczuk
d583c593c0 refactor(runtime): merge "spawn" into "process" (#18022)
This commit merges "runtime/js/40_spawn.js" into
"runtime/js/40_process.js", and "runtime::ops::spawn" 
into "runtime::ops::process".

It makes little sense to have them separated given that we want to
factor out these APIs into a separate extension crate.
2023-03-10 12:51:42 +09:00
Divy Srivastava
f9a235f2eb chore(core): remove argc field from OpDecl (#18024)
https://github.com/denoland/deno/pull/18023#discussion_r1125611859
2023-03-10 12:51:31 +09:00
Aapo Alasuutari
8db0d393c3 feat(ext/ffi): Make External pointers keep reference to V8 buffer (#17955) 2023-03-10 12:51:22 +09:00
Divy Srivastava
ed6b60ddbe feat(ops): relational ops (#18023)
Join two independent ops into one. A fast impl of one + a slow callback
of another. Here's an example showing optimized paths for latin-1 via
fast call and the next-best fallback using V8 apis.

```rust
#[op(v8)]
fn op_encoding_encode_into_fallback(
  scope: &mut v8::HandleScope,
  input: serde_v8::Value,
// ...

#[op(fast, slow = op_encoding_encode_into_fallback)]
fn op_encoding_encode_into(
  input: Cow<'_, str>,
// ...
```

Benchmark results of the fallback path:
```
time target/release/deno run -A --unstable ./cli/tests/testdata/benches/text_encoder_into_perf.js
________________________________________________________
Executed in   70.90 millis    fish           external
   usr time   57.76 millis    0.23 millis   57.53 millis
   sys time   17.02 millis    1.28 millis   15.74 millis

target/release/deno_main run -A --unstable ./cli/tests/testdata/benches/text_encoder_into_perf.js
________________________________________________________
Executed in  154.00 millis    fish           external
   usr time   67.14 millis    0.26 millis   66.88 millis
   sys time   38.82 millis    1.47 millis   37.35 millis
```
2023-03-10 12:48:52 +09:00
Bartek Iwańczuk
dea5de1c45 refactor(runtime): remove 40_files.js, 40_write_file.js and 40_read_file.js (#18018)
JavaScript APIs from "runtime/js/40_files.js" combined abstractions
for stdio streams ("Stdout", "Stderr", "Stdin") and file system file
("File", "FsFile"). APIs from "runtime/js/40_read_file.js" and 
"runtime/js/40_write_file.js" were implemented using ops from 
"runtime/ops/fs.rs".

This file was removed and relevant APIs were moved to "deno_io/12_io.js"
and "runtime/js/30_fs.js".

This work is meant to enable factoring out "deno_fs" crate.
2023-03-10 12:47:49 +09:00
Bartek Iwańczuk
1b1de27958 refactor: remove unused 40_diagnostics.js file (#18021)
This file was not used anywhere - even though it exposed an unstable
"Deno.DiagnosticCategory" API. Seems like a left over from when we
had "Deno.emit" API.
2023-03-10 12:47:38 +09:00
Bartek Iwańczuk
ce75e31625 refactor(core): include_js_files! 'dir' option doesn't change specifiers (#18019)
This commit changes "include_js_files!" macro from "deno_core"
in a way that "dir" option doesn't cause specifiers to be rewritten 
to include it.

Example:
```
include_js_files! {
  dir "js",
  "hello.js",
}
```

The above definition required embedders to use:
`import ... from "internal:<ext_name>/js/hello.js"`. 
But with this change, the "js" directory in which the files are stored
is an implementation detail, which for embedders results in: 
`import ... from "internal:<ext_name>/hello.js"`.

The directory the files are stored in, is an implementation detail and 
in some cases might result in a significant size difference for the 
snapshot. As an example, in "deno_node" extension, we store the 
source code in "polyfills" directory; which resulted in each specifier 
to look like "internal:deno_node/polyfills/<module_name>", but with 
this change it's "internal:deno_node/<module_name>". 

Given that "deno_node" has over 100 files, many of them having 
several import specifiers to the same extension, this change removes
10 characters from each import specifier.
2023-03-10 12:47:26 +09:00
Andreu Botella
c58790ef13 test(compile): Add a test for dynamic imports in deno compile (#18017)
denoland/eszip#115 added support for statically-analyzed dynamic imports
in eszip, which made `deno compile` support dynamic imports starting
from #17858. This PR adds a test for it.

----

This test is adapted from PR #17663.

Closes #17908
2023-03-10 12:47:20 +09:00
David Sherret
65d6704818 refactor: remove Semaphore::new(1) and use TaskQueue (#18014) 2023-03-10 12:47:14 +09:00