Commit graph

7708 commits

Author SHA1 Message Date
Bartek Iwańczuk
5ea90de199
feat(jupyter): allow to install and maintain multiple kernels (#29249)
Some checks are pending
ci / test release macos-aarch64 (push) Blocked by required conditions
ci / bench release linux-x86_64 (push) Blocked by required conditions
ci / lint debug linux-x86_64 (push) Blocked by required conditions
ci / lint debug macos-x86_64 (push) Blocked by required conditions
ci / lint debug windows-x86_64 (push) Blocked by required conditions
ci / test debug linux-x86_64 (push) Blocked by required conditions
ci / test release linux-x86_64 (push) Blocked by required conditions
ci / test debug macos-x86_64 (push) Blocked by required conditions
ci / test release macos-x86_64 (push) Blocked by required conditions
ci / test debug windows-x86_64 (push) Blocked by required conditions
ci / test release windows-x86_64 (push) Blocked by required conditions
ci / pre-build (push) Waiting to run
ci / test debug linux-aarch64 (push) Blocked by required conditions
ci / test release linux-aarch64 (push) Blocked by required conditions
ci / test debug macos-aarch64 (push) Blocked by required conditions
ci / build wasm32 (push) Blocked by required conditions
ci / publish canary (push) Blocked by required conditions
This commit changes the `deno jupyter` subcommand:
- `deno jupyter` now accepts additional `--name` argument to 
allow installing and maintaing multiple kernelsspec - useful when 
one wants to install a stable kernel and a debug/canary kernel
- `deno jupyter --install` now accepts additional `--display` 
argument to allow customizing display name of the kernel - the 
default one is "Deno"
- `deno jupyter --install` no longer blindly installs kernelspec, 
instead it first checks if a kernelspec already exists and if so, 
returns an error suggesting to use `--force` flag
- `deno jupyter --help` no longer shows `--unstable` flag

Closes https://github.com/denoland/deno/issues/29219
Closes https://github.com/denoland/deno/issues/29220
2025-05-13 16:56:16 +00:00
Nayeem Rahman
9b0707baa2
fix(check): don't assert unique normalized specifiers (#29274) 2025-05-13 16:16:38 +00:00
Luca Casonato
3b6c70e5b2
feat(ext/fetch): add support for fetch on unix sockets (#29154)
This commit adds support for using Unix socket proxies in `fetch` API.

This is facilitated by passing an appropriate `Deno.HttpClient` instance
to the `fetch` API:
```
const client = Deno.createHttpClient({
  proxy: {
    transport: "unix",
    path: "/path/to/unix.sock",
  },
});

await fetch("http://localhost/ping", { client });
```

Closes https://github.com/denoland/deno/issues/8821

---------

Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
2025-05-13 18:06:17 +02:00
Yusuke Tanaka
9b2b1c41f5
fix(cli): configure v8 isolate with cgroups-constrained memory limit (#29078)
This change configures V8 isolates to respect memory limits imposed by
cgroups on Linux.

It adds support for detecting both cgroups v1 and v2 memory limits,
enabling Deno to properly adapt to containerized environments with
memory constraints. When cgroups information is unavailable or not
applicable, it falls back to using the system's total memory as before.

Closes #29077

## Test

For testing, I created a ubuntu VM with 1Gi memory. Within this VM, set
up a cgroup with 512Mi memory limit, then ran the following script to
see how much heap size limit the V8 isolate had.

```js
import * as v8 from "node:v8";

console.log(v8.getHeapStatistics());
```

### Ubuntu 20.04

In this version of ubuntu, hybrid mode is enabled by default.

```
$ cat /proc/self/cgroup
12:rdma:/
11:blkio:/user.slice
10:devices:/user.slice
9:cpu,cpuacct:/user.slice
8:pids:/user.slice/user-1000.slice/session-3.scope
7:memory:/user.slice/user-1000.slice/session-3.scope
6:perf_event:/
5:freezer:/
4:net_cls,net_prio:/
3:hugetlb:/
2:cpuset:/
1:name=systemd:/user.slice/user-1000.slice/session-3.scope
0::/user.slice/user-1000.slice/session-3.scope
```

Create a new cgroup with 512Mi memory limit and run the above script in
this cgroup:

```
$ sudo cgcreate -g memory:/mygroup
$ sudo cgset -r memory.limit_in_bytes=$((512 * 1024 * 1024)) mygroup
$ sudo cgexec -g memory:mygroup ./deno run main.mjs
{
  total_heap_size: 7745536,
  total_heap_size_executable: 0,
  total_physical_size: 7090176,
  total_available_size: 266348216,
  used_heap_size: 6276752,
  heap_size_limit: 271581184,
  malloced_memory: 303200,
  peak_malloced_memory: 140456,
  does_zap_garbage: 0,
  number_of_native_contexts: 1,
  number_of_detached_contexts: 0,
  total_global_handles_size: 24576,
  used_global_handles_size: 22432,
  external_memory: 3232012
}
```

This indicates that the isolate was informed of cgroup-constrained
memory limit (512Mi) and hence got ~270M heap limit.

### Ubuntu 22.04

In this version of ubuntu, cgroup v2 is used.

```
$ cat /proc/self/cgroup
0::/user.slice/user-1000.slice/session-3.scope
```

Run the above script using `systemd-run`:

```
$ sudo systemd-run --property=MemoryMax=512M --pty bash -c '/home/ubuntu/deno run /home/ubuntu/main.mjs'
{
  total_heap_size: 7745536,
  total_heap_size_executable: 0,
  total_physical_size: 7090176,
  total_available_size: 266348184,
  used_heap_size: 6276784,
  heap_size_limit: 271581184,
  malloced_memory: 303200,
  peak_malloced_memory: 140456,
  does_zap_garbage: 0,
  number_of_native_contexts: 1,
  number_of_detached_contexts: 0,
  total_global_handles_size: 24576,
  used_global_handles_size: 22432,
  external_memory: 3232012
}
```

Again the isolate got ~270M heap limit properly.
Note that it should have had bigger heap limit if the entire system
memory, i.e. 1Gi, had been passed to V8. In fact, if we run the same
script outside the cgroup, it does display larger `heap_size_limit` like
below:

```
$ ./deno run main.mjs
{
  total_heap_size: 7745536,
  total_heap_size_executable: 0,
  total_physical_size: 7090176,
  total_available_size: 546580152,
  used_heap_size: 6276752,
  heap_size_limit: 551813120,
  malloced_memory: 303200,
  peak_malloced_memory: 140456,
  does_zap_garbage: 0,
  number_of_native_contexts: 1,
  number_of_detached_contexts: 0,
  total_global_handles_size: 24576,
  used_global_handles_size: 22432,
  external_memory: 3232012
}
```

---------

Signed-off-by: Yusuke Tanaka <wing0920@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-05-14 00:07:59 +09:00
narumincho
2f876b52d1
feat(lsp): add description in TaskDefinition (#29244) 2025-05-12 23:33:38 +01:00
David Sherret
1b36304381
fix(check): write lockfile after type checking (#29265)
Type checking might discover `npm:@types/node`, so write after type
checking.
2025-05-12 15:31:38 -04:00
Christian Svensson
5ddbb36d3f
feat(coverage): add dark-mode to HTML coverage report (#29267)
Some checks are pending
ci / pre-build (push) Waiting to run
ci / test debug linux-aarch64 (push) Blocked by required conditions
ci / test release linux-aarch64 (push) Blocked by required conditions
ci / test debug macos-aarch64 (push) Blocked by required conditions
ci / test release macos-aarch64 (push) Blocked by required conditions
ci / bench release linux-x86_64 (push) Blocked by required conditions
ci / lint debug linux-x86_64 (push) Blocked by required conditions
ci / lint debug macos-x86_64 (push) Blocked by required conditions
ci / lint debug windows-x86_64 (push) Blocked by required conditions
ci / test debug linux-x86_64 (push) Blocked by required conditions
ci / test release linux-x86_64 (push) Blocked by required conditions
ci / test debug macos-x86_64 (push) Blocked by required conditions
ci / test release macos-x86_64 (push) Blocked by required conditions
ci / test debug windows-x86_64 (push) Blocked by required conditions
ci / test release windows-x86_64 (push) Blocked by required conditions
ci / build wasm32 (push) Blocked by required conditions
ci / publish canary (push) Blocked by required conditions
This PR adds `color-scheme: light dark` support for the HTML coverage
report. It uses `light-dark(#fff, #000)` to provide colors for each
color scheme.

- There's been [one other change to `coverage/style.css` file
before](66185e0d1d),
so is it fine to to change this file more or should this file stay close
to Istanbul original code?
- I don't think there's any existing tests for the styles, so I could
not see any easy way to add unit tests for these changes
- IMO these changes work without a theme toggle, but I could try adding
one [with some `<head>`
script](https://github.com/denoland/deno/blob/main/cli/tools/coverage/reporter.rs/#L533)
and a button in the navbar if required to land this PR


## Screenshots

<details>
<summary><strong>Coverage summary</strong></summary>

### Before


![image](https://github.com/user-attachments/assets/0a8a9fa7-e597-4ede-baef-4daeef93d237)

### After


![image](https://github.com/user-attachments/assets/6c76ee19-3df1-460d-b191-941cdb26017b)

</details>

<details>
<summary><strong>File coverage<strong></summary>

### Before


![image](https://github.com/user-attachments/assets/8062280a-4209-4ad3-b931-c4816b30881f)

### After


![image](https://github.com/user-attachments/assets/5fcd7a22-549f-4d93-97ab-071224e45e42)

</details>

Closes #29266
2025-05-12 19:37:03 +02:00
David Sherret
e601df6bfb
fix: allow specifying otel config in --env-file (#29240)
Alternative to https://github.com/denoland/deno/pull/28127 that does cli
flag parsing, then env file loading, then resolves config with env vars.

This also fixes several other issues related to env vars in the
--env-file not being used for certain config.

Closes https://github.com/denoland/deno/issues/27851
Closes https://github.com/denoland/deno/issues/29171
Closes https://github.com/denoland/deno/pull/28127
Closes #29256
2025-05-11 21:09:52 -04:00
Bartek Iwańczuk
2fe200f6ef
fix(coverage): don't panic if all covered files are ignored via directive (#29250)
Closes https://github.com/denoland/deno/issues/29218
2025-05-12 02:47:32 +02:00
Marshall Walker
c9d456b74a
fix(cache): added support for the --env-file flag (#29160)
Adds support for the --env-file flag, allowing environment variables
such as DENO_AUTH_TOKENS to be loaded from a file.
2025-05-09 19:03:11 -07:00
Luca Casonato
4f5cb9516b
perf(publish): fetch all missing package status in parallel (#27935) 2025-05-09 10:45:27 -05:00
Elias Rhouzlane
9188c79ab4
fix(cli/hmr): print compile error with exception details (#27597)
Fix https://github.com/denoland/deno/issues/27577

---------

Co-authored-by: David Sherret <dsherret@users.noreply.github.com>
Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
2025-05-08 23:39:31 +00:00
Jonh Alexis
f8615e404c
fix(fmt): indent width should be ignored when formatting with use tabs set to true (#29205) 2025-05-08 22:00:13 +00:00
ud2
2211bb4e67
fix(dts): add Atomics.pause, Promise.try and RegExp.escape (#29186) 2025-05-08 23:16:35 +02:00
Marvin Hagemeister
c015b8affd
feat(unstable): support comments in lint plugin (#29189)
This PR adds support for comments in the AST for lint plugins.

- The `Program` node has a `comments` field pointing to an array of all
comments.
- `SourceCode.getAllComments()`: Returns all comments (same as
`program.comments`)
- `SourceCode.getCommentsBefore(node)`: Get all comments before this
Node
- `SourceCode.getCommentsAfter(node)`: Get all comments after this Node
- `SourceCode.getCommentsInside(node)`: Get all comments inside this
Node

ESLint docs:
-
https://eslint.org/docs/latest/extend/custom-rules#accessing-the-source-code
- https://eslint.org/docs/latest/extend/custom-rules#accessing-comments
2025-05-08 21:59:36 +02:00
Divy Srivastava
9d0a833e7b
fix: bump default @types/node version range to 22.15.14 (#28407)
Fixes https://github.com/denoland/deno/pull/28168#discussion_r1982740706

---------

Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
2025-05-08 17:44:22 +00:00
Nayeem Rahman
59ffc1987c
fix(lsp): discard quick fixes importing /node_modules/ paths (#29194) 2025-05-08 17:08:10 +01:00
Nayeem Rahman
fc74cfe885
fix(lsp): use correct resolution kind when checking for no-export-npm (#29180) 2025-05-08 16:30:15 +01:00
David Sherret
d372c0d607
refactor: move more code into ResolverFactory (#29202)
1. Renames `DenoResolver` to `RawDenoResolver`
2. Renames `DenoGraphResolver` to `DenoResolver`
3. Shifts down creation of `DenoGraphResolver` and
`HasPackageJsonDepFlag` to `ResolverFactory`
2025-05-07 16:07:51 +00:00
Lino Le Van
49d19d718e
fix(types): Change ffi native type from Uint8Array -> Uint8Array<ArrayBuffer> (#29127)
This was missed in the TypeScript 5.7 migration PR
(https://github.com/denoland/deno/pull/27857).
2025-05-07 17:53:27 +02:00
Nayeem Rahman
4c8b208c6c
perf(lsp): don't diff 10,000+ line files for formatting (#29162) 2025-05-07 16:51:04 +01:00
Nayeem Rahman
be294f3319
perf(lsp): truncate json files larger than 10mb (#29192) 2025-05-07 15:05:06 +01:00
David Sherret
3a13653a21
refactor: move CjsTracker to ResolverFactory (#29188) 2025-05-06 22:07:46 +00:00
snek
842a07710f
fix: terminate control sock event with newline (#29184)
these should be newline terminated
2025-05-06 14:51:40 +00:00
Bartek Iwańczuk
d8857b9aee
fix(fmt): upgrade markup_fmt and malva (#29168)
Closes https://github.com/denoland/deno/issues/29034
2025-05-05 15:39:22 -05:00
snek
5c6c52d132
fix: update deno_core (#29166)
for https://github.com/denoland/deno_core/pull/1111
2025-05-05 13:58:34 -05:00
snek
f47c4ea5e7
feat(unstable): notify control sock on serving (#29173)
send an event over the control socket when deno.serve is listening.
2025-05-05 17:27:17 +00:00
snek
b6d1d5931a
feat: support unconfigured runtime in serve subcommand (#29172)
Support the unconfigured runtime when using `deno serve`.
2025-05-05 16:08:10 +00:00
Timothy J. Aveni
9f363c0b96
docs: remove quotes around undefined in Deno.env.get example (#29159)
`Deno.env.get` returns undefined when the environment variable is not
present. I initially interpreted this doc string to indicate that it
would return the string literal `"undefined"`, which isn't right.

Could use backticks here as above, but a little confusing in a JS
context where this also indicates a (template) string literal.
2025-05-04 21:20:41 +02:00
David Sherret
7ae0f14a90
refactor(deno_resolver): extract out CLI's deno_graph::source::Resolver (#29143) 2025-05-03 15:44:08 -04:00
David Sherret
f42cb0816e
refactor: ability for deno_npm_cache to compile to Wasm (#29138)
More work towards getting Deno's crates working from JavaScript.
2025-05-02 16:52:40 -04:00
Bartek Iwańczuk
4ded37a1e7
build: Use separate version.txt file to define crate version (#29136) 2025-05-02 10:30:03 -04:00
David Sherret
539e41b8d4
fix(npm): respect etag for npm packument caching (#29130)
Stores the etag in a `_deno.etag` property on the json object of the
packument.
2025-05-02 09:49:05 -04:00
David Sherret
2bc8b9b7c7
fix(vendor): strip jsr version meta module graph data (#29120)
This removes the `moduleGraphX` data from the `<version>_meta.json`
files for jsr packages when copying from the global cache to the local
one. This property is not really useful to vendor because it's just a
performance optimization when downloading the files and someone may be
changing the data in the files leading to the `moduleGraph` data to be
out of date.
2025-05-01 15:05:23 +00:00
David Sherret
92cdce16f0
fix(flags): do not panic parsing invalid --allow-import flag (#29118)
Closes https://github.com/denoland/deno/issues/29116
2025-04-30 16:41:21 -04:00
snek
bc1ced8260
refactor: allow lazy main module (#28929)
implement lazy(?) mode. an unconfigured jsruntime is created if
DENO_UNSTABLE_CONTROL_SOCK is present, and later passed into deno_runtime to be
configured and used.
2025-04-30 19:59:20 +00:00
Nayeem Rahman
8c57929058
fix(lsp): ignore 'for await' diagnostics in jupyter cells (#29114) 2025-04-30 17:24:52 +01:00
Bartek Iwańczuk
8773b5f5b0
v2.3.1 (#29107)
Fixes wrong version printed with `deno --version`.
2025-04-30 10:48:46 +00:00
denobot
61574bb9c9
2.3.0 (#29102)
Bumped versions for 2.3.0

---------

Co-authored-by: bartlomieju <bartlomieju@users.noreply.github.com>
Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
2025-04-30 09:49:31 +02:00
Nayeem Rahman
2508286d7a
fix(lsp): prefer relative auto-import specifier against import map (#29098) 2025-04-30 05:50:17 +01:00
David Sherret
2b746c3137
feat(check): support erasableSyntaxOnly for type checking (#29097)
Only when using `--check` or `deno check`. Doesn't have this hooked up
as part of the swc emit.
2025-04-30 02:38:07 +00:00
Nathan Whitaker
c22d17824b
perf(fs): don't canonicalize path when opening file if --allow-all is passed (#28716)
Fixes #28702.

Super artificial benchmark:

```ts
const perf = performance;

async function asyncOpen() {
  const start = perf.now();
  for (let i = 0; i < 100_000; i++) {
    const file = await Deno.open("./foo.txt");
    file.close();
  }
  const end = perf.now();
  console.log(end - start);
}

function syncOpen() {
  const start = perf.now();
  for (let i = 0; i < 100_000; i++) {
    const file = Deno.openSync("./foo.txt");
    file.close();
  }
  const end = perf.now();
  console.log(end - start);
}

if (Deno.args[0]?.trim() === "async") {
  await asyncOpen();
} else {
  syncOpen();
}
```

Results (average of 10 for each):

```
deno sync               1785.59
deno-this-pr sync       491.69
deno async              1839.71
deno-this-pr async      528.78
```

---------

Co-authored-by: David Sherret <dsherret@users.noreply.github.com>
2025-04-29 23:16:24 +00:00
Nathan Whitaker
6d0035411b
feat(clean): deno clean --except <paths>, remove all cache data except what's needed to run paths (#28424)
Closes https://github.com/denoland/deno/issues/27229.


TODO:
- [x] Tests
- [x] Make some changes to `deno_cache_dir` so we can get the paths for
the local http cache
- [x] Right now this leaves the node modules setup cache in an incorrect
state (removes the symlinks, but doesn't update the setup cache)
- [ ] ~~Handle code cache and other sqlite caches?~~
2025-04-29 22:42:17 +00:00
Laurence Rowe
bc346b1825
feat(cli): support --single-threaded v8 flag (#29066) 2025-04-29 18:40:27 -04:00
Yoshiya Hinosawa
58b679a1d6
feat(check): detect tsconfig.json at workspace root (#29092)
This PR adds detection of `tsconfig.json` at the root of a workspace
when there exists either a deno.json or package.json. If a project
already has `deno.json` with a `compilerOptions` value the
`tsconfig.json` is ignored.
2025-04-29 21:54:22 +00:00
David Sherret
490c9c9099
fix: break unstable lockfile v5 to remove "has" from property names (#29095)
Lockfile v5 hasn't stabilized yet, so going to do this breaking change
in order to make the property names shorter.
2025-04-29 14:17:54 -04:00
chirsz
c9a50401f3
fix(ext/webgpu): fix incorrect description of UnsafeWindowSurface (#28976)
`NSView*` should be the third argument when the system is "cocoa".

Co-authored-by: Divy Srivastava <dj.srivastava23@gmail.com>
2025-04-29 20:54:12 +05:30
snek
25b9abcdf8
feat: use new feature checker (#29091)
we need to be able to set the feature checker after creating the runtime
to support lazy init
2025-04-29 17:18:14 +02:00
Cyan
6311d50567
fix(repl): panic when user delete globalThis.globalThis (#28960) 2025-04-29 10:15:10 -04:00
Efe
49dbe697e5
fix(compile): pass default v8 args during compile (#29084) 2025-04-29 10:13:54 -04:00