summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2023-09-16perf(ext/http): optimize `set_response` for small responses (#20527)Marcos Casagrande
This PR introduces an optimization to `set_response` to reduce the overhead for responses with a payload size less than 64 bytes. Performance gains are more noticeable when `is_request_compressible` enters the slow path, ie: `-H 'Accept-Encoding: unknown'` ### Benchmarks ```js Deno.serve({ port: 3000 }, () => new Response("hello")); ``` ``` wrk -d 10s --latency -H 'Accept-Encoding: slow' http://127.0.0.1:3000 ``` --- **main** ``` Running 10s test @ http://127.0.0.1:3000 2 threads and 10 connections Thread Stats Avg Stdev Max +/- Stdev Latency 44.72us 28.12us 3.10ms 97.95% Req/Sec 112.73k 8.25k 123.66k 91.09% 2264092 requests in 10.10s, 308.77MB read Requests/sec: 224187.08 Transfer/sec: 30.57MB ``` **this PR** ``` Running 10s test @ http://127.0.0.1:3000 2 threads and 10 connections Thread Stats Avg Stdev Max +/- Stdev Latency 42.91us 20.57us 2.04ms 97.36% Req/Sec 116.61k 7.95k 204.81k 88.56% 2330970 requests in 10.10s, 317.89MB read Requests/sec: 230806.32 Transfer/sec: 31.48MB ```
2023-09-16feat(lsp): include source in auto import completion label (#20523)Nayeem Rahman
2023-09-16perf: improve async op santizer speed and accuracy (#20501)Luca Casonato
This commit improves async op sanitizer speed by only delaying metrics collection if there are pending ops. This results in a speedup of around 30% for small CPU bound unit tests. It performs this check and possible delay on every collection now, fixing an issue with parent test leaks into steps.
2023-09-16feat: Add "deno jupyter" subcommand (#20337)Bartek Iwańczuk
This commit adds "deno jupyter" subcommand which provides a Deno kernel for Jupyter notebooks. The implementation is mostly based on Deno's REPL and reuses large parts of it (though there's some clean up that needs to happen in follow up PRs). Not all functionality of Jupyter kernel is implemented and some message type are still not implemented (eg. "inspect_request") but the kernel is fully working and provides all the capatibilities that the Deno REPL has; including TypeScript transpilation and npm packages support. Closes https://github.com/denoland/deno/issues/13016 --------- Co-authored-by: Adam Powers <apowers@ato.ms> Co-authored-by: Kyle Kelley <rgbkrk@gmail.com>
2023-09-15feat(ext/node): http2.connect() API (#19671)Bartek Iwańczuk
This commit improves compatibility of "node:http2" module by polyfilling "connect" method and "ClientHttp2Session" class. Basic operations like streaming, header and trailer handling are working correctly. Refing/unrefing is still a TODO and "npm:grpc-js/grpc" is not yet working correctly. --------- Co-authored-by: Matt Mastracci <matthew@mastracci.com>
2023-09-15fix(test): share fail fast tracker between threads (#20515)Nayeem Rahman
2023-09-15chore(ext/http): fix a rejection test (#20514)Matt Mastracci
Use `assertRejects` to actually catch errors.
2023-09-15fix(ext/http): ensure aborted bodies throw (#20503)Matt Mastracci
Fixes #20502 -- ensure that Hyper errors make it through to JS.
2023-09-15fix: init v8 platform once on main thread (#20495)Luca Casonato
This is a mitigation for segfaults happening in V8 on CPU with MPK (memory protected keys). After much trail and error we found that unless V8 platform is initialized on main thread the segfaults start appears once JIT kicks in. "deno test" and "deno bench" were affected by this problem. Fixes https://github.com/denoland/deno/issues/19926 Fixes https://github.com/denoland/deno/issues/20243 Fixes https://github.com/denoland/deno/issues/20450 --------- Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
2023-09-14refactor: rewrite more ops to op2 macro (#20478)Bartek Iwańczuk
2023-09-14chore(cli): update chrono to remove broken time dep (#20508)Matt Mastracci
Fixes the last dependabot security warning
2023-09-14chore: update deno_core + cargo update (#20507)Matt Mastracci
2023-09-14feat: explicit resource management in TypeScript (#20506)David Sherret
This adds support for `using` and `await using` declarations in TypeScript only. We need to wait for v8 to support it for this to work in JS.
2023-09-14refactor: remove `DENO_UNSTABLE_NPM_SYNC_DOWNLOAD` and custom sync ↵David Sherret
functionality (#20504) https://github.com/denoland/deno/pull/20488 enables us to remove this functionality. This is better because our test suite is now not testing a separate code path.
2023-09-14chore(tests): ability to pattern match unordered lines (#20488)David Sherret
This adds the ability to pattern match unordered lines. For example, the downloading messages may appear in any order ``` [UNORDERED_START] Download https://localhost:4546/a.ts Download https://localhost:4546/b.ts [UNORDERED_END] Hello! ``` Additionally, I've made the pattern matching slightly more strict and the output better.
2023-09-14fix: output traces for op sanitizer in more cases (#20494)Luca Casonato
This adds traces for the "started outside test, closed inside test" case.
2023-09-14refactor: rewrite ext/node to op2 (#20489)Bartek Iwańczuk
2023-09-14feat(ext/web): Add name to Deno.customInspect of File objects (#20415)lionel-rowe
Fixes https://github.com/denoland/deno/issues/20414
2023-09-13refactor: use TaskQueue from deno_unsync (#20485)David Sherret
2023-09-13chore(test_util): ensure that extra expectations are an error even without a ↵Matt Mastracci
filter (#20483) Running `tools/wpt.ts` with a filter would cause an error if there were extra, leftover expectations in expectations.json. These errors would not appear if no filter was passed, often leaving the filtered version of the test runner broken. This also introduces a smarter bit of logic where filters can be specified with a leading slash (`tools/wpt.ts run -- /url` is equivalent to `tools/wpt.ts run -- url`)
2023-09-13chore: bump deno_core and cargo update (#20480)Matt Mastracci
Bump deno_core, pulling in new rusty_v8. Requires some op2/deprecation fixes.
2023-09-13refactor: move `deno_core::TaskQueue` to `cli::util::sync` (#20481)David Sherret
TaskQueue is being removed from `deno_core` and replaced with an unsync version in deno_unsyc. https://github.com/denoland/deno_core/pull/193 This is a change in preparation for that. The remaining `deno_core::TaskQueue` usage in this repo should be replaced with `deno_core::unsync::TaskQueue` once upgraded.
2023-09-13feat(lsp): WorkspaceSettings::disablePaths (#20475)Nayeem Rahman
2023-09-13refactor: rewrite ext/crypto to op2 (#20477)Bartek Iwańczuk
2023-09-12fix(devcontainer): Add build deps and update extension in devcontainer (#20467)Laurence Rowe
* Installs `cmake` and `protoc` build dependencies in the docker container. * Replaced deprecated TOML extension with its suggested alternative. Note: At least 16GB is required to build Deno, so ensure you use 'New with options' and select at least the 4-core/16GB machine type when starting in GitHub Codespaces.
2023-09-12refactor: rewrite ext/net/ ops to op2 (#20471)Bartek Iwańczuk
2023-09-12fix(lsp): match enable_paths by whole path components (#20470)Nayeem Rahman
2023-09-12refactor: rewrite cli/ ops to op2 (#20462)Bartek Iwańczuk
2023-09-12fix(init): skip existing files instead of erroring (#20434)Leigh McCulloch
### What Skip writing files from the template if the files already exist in the project directory. ### Why When I run deno init in a directory that already has a main.ts, or one of the other template files, I usually want to initialize a workspace around a file I've started working in. A hard error in this case seems counter productive. An informational message about what's being skipped seems sufficient. Close #20433
2023-09-12refactor: rewrite ext/io, ext/webstorage ops to op2 (#20461)Bartek Iwańczuk
2023-09-12refactor: strongly typed TSC ops (#20466)Bartek Iwańczuk
Removes usage of `serde_json::Value` in several ops used in TSC, in favor of using strongly typed structs. This will unblock more changes in https://github.com/denoland/deno/pull/20462.
2023-09-12fix(ext/http): create a graceful shutdown API (#20387)Matt Mastracci
This PR implements a graceful shutdown API for Deno.serve, allowing all current connections to drain from the server before shutting down, while preventing new connections from being started or new transactions on existing connections from being created. We split the cancellation handle into two parts: a listener handle, and a connection handle. A graceful shutdown cancels the listener only, while allowing the connections to drain. The connection handle aborts all futures. If the listener handle is cancelled, we put the connections into graceful shutdown mode, which disables keep-alive on http/1.1 and uses http/2 mechanisms for http/2 connections. In addition, we now guarantee that all connections are complete or cancelled, and all resources are cleaned up when the server `finished` promise resolves -- we use a Rust-side server refcount for this. Performance impact: does not appear to affect basic serving performance by more than 1% (~126k -> ~125k) --------- Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
2023-09-11chore: update inner #\![allow] to #[allow] (#20463)Matt Mastracci
Functions should generally be annotated with `#[allow]` blocks rather than using inner `#![allow]` annotations.
2023-09-12refactor: rewrite runtime/ ops to op2 (#20459)Bartek Iwańczuk
2023-09-11perf(node/net): optimize socket reads for 'npm:ws' package (#20449)Bartek Iwańczuk
Fixes performance regression introduced by https://github.com/denoland/deno/pull/20223 and https://github.com/denoland/deno/pull/20314. It's enough to have one "shared" buffer per socket and no locking mechanism is required.
2023-09-11fix: exclude internal JS files from coverage (#20448)Marvin Hagemeister
2023-09-10fix(lsp): always enable semantic tokens responses (#20440)Nayeem Rahman
2023-09-10chore: speed up test name escapeing (#20439)Marvin Hagemeister
2023-09-09feat: TypeScript 5.2 (#20425)David Sherret
Without `using` declarations or decorator metadata (waiting for that in v8).
2023-09-09fix(lsp): respect configured exclusions for testing APIs (#20427)Nayeem Rahman
LSP testing APIs now obey the various file inclusion settings: - Modules shown in the text explorer now respect the `exclude`, `test.exclude` and `test.include` fields in `deno.json`, as well as `deno.enablePaths` in VSCode settings. - Modules with testing code lens now respect the `"exclude"`, `test.exclude` and `test.include` fields in `deno.json`. Code lens already respects `deno.enablePaths`.
2023-09-09feat(cli): allow --log-level=trace for additional deep debugging (#20426)Matt Mastracci
This allows us to opt in to extremely detailed tracing from dependency libraries, like so: ``` cargo run --features tracing/log,tracing/max_level_trace -- test --log-level=trace -A --unstable ./cli/tests/unit/serve_test.ts ``` It will not impact normal operation as it requires the `tracing/max_level_trace` and `tracing/log` to be active. Note that tracing is already a dependency -- this just makes it a direct dep of cli so we can access its features more easily.
2023-09-09Reland "refactor(lsp): clean up "enablePaths" handling (#20388)" (#20423)Nayeem Rahman
2023-09-08feat: lockfile v3 (#20424)David Sherret
Details: https://github.com/denoland/deno_lockfile/pull/8
2023-09-08fix(compile): support providing flags as args (#20422)David Sherret
Closes #20413
2023-09-08fix(fmt/markdown): improve ignore comment handling (#20421)David Sherret
Two bug fixes: * https://github.com/dprint/dprint-plugin-markdown/pull/85 * https://github.com/dprint/dprint-plugin-markdown/pull/84
2023-09-08Revert "refactor(lsp): clean up "enablePaths" handling (#20388)" (#20419)Nayeem Rahman
This reverts commit 4a11603c76b13ecf92ce3141ec317a42ae9f8d1d.
2023-09-08fix(ext/kv): same `expireIn` should generate same `expireAt` (#20396)Heyang Zhou
Co-authored-by: Luca Casonato <hello@lcas.dev>
2023-09-08fix: empty include in config file excludes all (#20404)Nayeem Rahman
2023-09-08chore(lsp): remove TestingSettings::enable (#20407)Nayeem Rahman
2023-09-08fix(ext/node/ops/zlib/brotli): Allow decompressing more than 4096 bytes (#20301)Curran McConnell
Fixes https://github.com/denoland/deno/issues/19816 In that issue, I suggest switching over the other brotli functionality to the Rust API provided by the `brotli` crate. Here, I only do that with the `brotli_decompress` function to fix the bug with buffers longer than 4096 bytes.