Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

buffer: introduce Blob #36811

Closed
wants to merge 4 commits into from
Closed

buffer: introduce Blob #36811

wants to merge 4 commits into from

Conversation

@jasnell
Copy link
Member

@jasnell jasnell commented Jan 6, 2021

The Blob object is an immutable data buffer. This is a first step
towards alignment with the Blob Web API.

Signed-off-by: James M Snell jasnell@gmail.com

@nodejs-github-bot
Copy link
Contributor

@nodejs-github-bot nodejs-github-bot commented Jan 6, 2021

@nodejs-github-bot
Copy link
Contributor

@nodejs-github-bot nodejs-github-bot commented Jan 6, 2021

lib/internal/blob.js Outdated Show resolved Hide resolved
lib/internal/blob.js Outdated Show resolved Hide resolved
@targos
Copy link
Member

@targos targos commented Jan 6, 2021

I pushed a commit to add the WPT for Blob. There's one failure that looks worth fixing:

const blob = new Blob(); should create an empty blob, but it throws an error with this PR.

doc/api/buffer.md Outdated Show resolved Hide resolved
doc/api/buffer.md Outdated Show resolved Hide resolved
lib/internal/blob.js Outdated Show resolved Hide resolved
lib/internal/blob.js Outdated Show resolved Hide resolved
doc/api/buffer.md Show resolved Hide resolved
@mcollina
Copy link
Member

@mcollina mcollina commented Jan 6, 2021

I think we should add some support for Blob around before calling it stable. It's not of much use if it can't be used in fs, streams, crypto, etc..

doc/api/buffer.md Outdated Show resolved Hide resolved
src/node_blob.cc Outdated Show resolved Hide resolved
src/node_blob.cc Outdated Show resolved Hide resolved
src/node_blob.cc Show resolved Hide resolved
src/node_buffer.cc Outdated Show resolved Hide resolved
@benjamingr
Copy link
Member

@benjamingr benjamingr commented Jan 6, 2021

I'm happy to review this - but can you explain the motivation of having this in core?

For EventTarget/AbortController the motivation was quite clear to me - does Blob actually enable any new use cases we want to support?

doc/api/buffer.md Outdated Show resolved Hide resolved
doc/api/buffer.md Outdated Show resolved Hide resolved
doc/api/buffer.md Outdated Show resolved Hide resolved
doc/api/buffer.md Outdated Show resolved Hide resolved
src/node_buffer.cc Outdated Show resolved Hide resolved
@jasnell
Copy link
Member Author

@jasnell jasnell commented Jan 6, 2021

@mcollina:

I think we should add some support for Blob around before calling it stable. It's not of much use if it can't be used in fs, streams, crypto, etc..

Agreed.

@benjamingr:

I'm happy to review this - but can you explain the motivation of having this in core? ... For EventTarget/AbortController the motivation was quite clear to me - does Blob actually enable any new use cases we want to support?

Partly because it's a step towards supporting APIs like fetch and File (both of which require Blob). But also (in the future) to enable cases like:

const blob1 = await fs.promises.readAsBlob('path/to/some/file1')
const blob2 = await fs.promises.readAsBlob('path/to/some/file2')
const blobs = {
  foo: URL.createObjectURL(blob1),
  bar: URL.createObjectURL(blob2),
}

// blobs.foo is a blob:// URL that identifies a persistent memory
// location where blob is stored. The URL would work process wide
// and for multiple APIs...

const stream = ... // set up QUIC or HTTP stream somehow...
stream.send(blobs.foo) // references blob URL

// ... eventually...
const in = fs.createReadStream(new URL(blobs.foo));

// ... eventually...
const cipher = await subtle.crypto(alg, key, blob1);

Also see the conversation @mikeal started here: #27080 with regards to immutable buffers and the conversation from @bmeck on support for createObjectURL #16167 ...

lib/internal/blob.js Show resolved Hide resolved
ruyadorno added a commit that referenced this issue Jan 26, 2021
PR-URL: #37020

Notable changes:

* buffer:
  * introduce Blob (James M Snell) [#36811](#36811)
  * add base64url encoding option (Filip Skokan) [#36952](#36952)
* doc:
  * add @iansu to collaborators (Ian Sutherland) [#36951](#36951)
  * add @RaisinTen to collaborators (Darshan Sen) [#36998](#36998)
  * add @miladfarca to collaborators (Milad Fa) [#36934](#36934)
* fs:
  * allow position parameter to be a BigInt in read and readSync (raisinten) [#36190](#36190)
* http:
  * attach request as res.req (Ian Storm Taylor) [#36505](#36505)
  * expose urlToHttpOptions utility (Yongsheng Zhang) [#35960](#35960)
@jimmywarting
Copy link

@jimmywarting jimmywarting commented Jan 28, 2021

Cool, i would like to at least see support for fs.promises.getFile('4gb.dat') or like a lower end like fs.promises.getBlob('4gb.dat') since the File class don't exist yet? you could call it getAsBlob or getAsFile also if you like

readAsBlob(path) felt wrong to me, the file content shouldn't be read. The file should be wrapped around a Blob container. that's why eg the browsers filesystem api calls the method getFile in await fileHandle.getFile().
No data is being read and allocated into memory if you want to get a blob from a large filehandle.

readAsBlob feels more like it's reading all content and then constructs a Blob with the buffer it have read, wish is wrong.
much like new buffer.Blob([fs.readFile(path)])

We over at node-fetch and fetch-blob don't feel quite ready to use buffer.Blob quite yet. mostly b/c it's missing .stream() but more importantly fs.getFile(path)
the missing .stream() can be dealt with by monkey patching or make a helper functions that creates a whatwg or node stream from a blob

As both me and @mcollina have said before. It's not of much use if it can't be used from fs. i think fs should get support for getting blob first before we go into crypto, streams and other things and also writing blobs back to fs

@jimmywarting
Copy link

@jimmywarting jimmywarting commented Feb 11, 2021

I saw you mentioning implementing Blob.prototype.readable() in the fetch thread.

I have one small concern about that and interfering with the spec, if ppl start to rely on Blob.prototype.readable then they would want to have node's blob implementation in the browser also and dependencies of sub dependencies. would have to do if-node-then do this or that. we have had plenty of such requests in node-fetch but had to reject quite many such feature request and explain to them that it wouldn't be possible to do the same thing in the browser. We want it to be consistent across browser/node - such thing are better as a utility functions.

Wouldn't it be better to supply a temporary utility function that can slice a blob into chunks and read and emit each piece to a node stream instead?

I would be happy if Blob.prototype.stream just returned a partial pieces of the whatwg stream spec for now, which is the async iterator. and saying that ".stream() is partially implemented in a way that it only returns a object which is async iterable and yields Uint8Arrays"

Then we can do:

  • for await (let chunk of blob.stream()) in both browser and in node.
  • we can also do stream.Readable.from(blob.stream())

@jimmywarting
Copy link

@jimmywarting jimmywarting commented Feb 11, 2021

When i test if the input i get is a blob or not then i check the name with Symbol.toStringTag if it matches blob

That is currently missing.
you should add that

class Blob {
  [Symbol.toStringTag] = 'Blob'
}

it currently says it's a [object Object] when i call console.log(Object.prototype.toString.call(object))

@jimmywarting
Copy link

@jimmywarting jimmywarting commented Feb 11, 2021

something else that fails

> new buffer.Blob(['2']).slice(0, 500)
Uncaught:
RangeError [ERR_OUT_OF_RANGE]: The value of "end" is out of range. It must be less than or equal to length. Received 500

This should not happen.
slicing behaves much like string.slice and buffer.slice with negative values and such

currently had to add a own check with Math.min(x, y) to support your buffer.Blob version

just a tip: This is a good references if you want to support slicing over multiple async blob parts.
a slice is not as easy as to just slice one single internal arraybuffer container or updating a offset. Since it can have multiple async blob containers
it can be good to know how blob really works under the hood in some cases here is some of my research of how to build a good Blob class

targos added a commit to targos/node that referenced this issue Aug 8, 2021
The `Blob` object is an immutable data buffer. This is a first step
towards alignment with the `Blob` Web API.

Signed-off-by: James M Snell <jasnell@gmail.com>

PR-URL: nodejs#36811
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
targos added a commit to targos/node that referenced this issue Aug 8, 2021
PR-URL: nodejs#36811
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
targos added a commit to targos/node that referenced this issue Aug 8, 2021
The `Blob` object is an immutable data buffer. This is a first step
towards alignment with the `Blob` Web API.

Signed-off-by: James M Snell <jasnell@gmail.com>

PR-URL: nodejs#36811
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
targos added a commit to targos/node that referenced this issue Aug 8, 2021
PR-URL: nodejs#36811
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
targos added a commit to targos/node that referenced this issue Aug 13, 2021
The `Blob` object is an immutable data buffer. This is a first step
towards alignment with the `Blob` Web API.

Signed-off-by: James M Snell <jasnell@gmail.com>

PR-URL: nodejs#36811
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
targos added a commit to targos/node that referenced this issue Aug 13, 2021
PR-URL: nodejs#36811
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
targos added a commit that referenced this issue Aug 13, 2021
The `Blob` object is an immutable data buffer. This is a first step
towards alignment with the `Blob` Web API.

Signed-off-by: James M Snell <jasnell@gmail.com>

PR-URL: #36811
Backport-PR-URL: #39704
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
targos added a commit that referenced this issue Aug 13, 2021
PR-URL: #36811
Backport-PR-URL: #39704
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
MylesBorins added a commit that referenced this issue Aug 31, 2021
The `Blob` object is an immutable data buffer. This is a first step
towards alignment with the `Blob` Web API.

Signed-off-by: James M Snell <jasnell@gmail.com>

PR-URL: #36811
Backport-PR-URL: #39704
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
MylesBorins added a commit that referenced this issue Aug 31, 2021
PR-URL: #36811
Backport-PR-URL: #39704
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
targos added a commit that referenced this issue Sep 4, 2021
Notable changes:

assert:
  * change status of legacy asserts (James M Snell) #38113
async_hooks:
  * (SEMVER-MINOR) use new v8::Context PromiseHook API (Stephen Belanger) #36394
buffer:
  * (SEMVER-MINOR) introduce Blob (James M Snell) #36811
  * (SEMVER-MINOR) add base64url encoding option (Filip Skokan) #36952
child_process:
  * (SEMVER-MINOR) allow `options.cwd` receive a URL (Khaidi Chu) #38862
  * (SEMVER-MINOR) add timeout to spawn and fork (Nitzan Uziely) #37256
  * (SEMVER-MINOR) allow promisified exec to be cancel (Carlos Fuentes) #34249
  * (SEMVER-MINOR) add 'overlapped' stdio flag (Thiago Padilha) #29412
cli:
  * (SEMVER-MINOR) add -C alias for --conditions flag (Guy Bedford) #38755
  * (SEMVER-MINOR) add --node-memory-debug option (Anna Henningsen) #35537
deps:
  * (SEMVER-MINOR) V8: cherry-pick fa4cb172cde2 (Stephen Belanger) #38577
  * (SEMVER-MINOR) V8: cherry-pick 4c074516397b (Stephen Belanger) #36394
  * (SEMVER-MINOR) V8: cherry-pick 5f4413194480 (Stephen Belanger) #36394
  * (SEMVER-MINOR) V8: cherry-pick 272445f10927 (Stephen Belanger) #36394
  * (SEMVER-MINOR) V8: backport c0fceaa0669b (Stephen Belanger) #36394
dns:
  * (SEMVER-MINOR) add "tries" option to Resolve options (Luan Devecchi) #39610
  * (SEMVER-MINOR) allow `--dns-result-order` to change default dns verbatim (Ouyang Yadong) #38099
doc:
  * (SEMVER-MINOR) add missing change to resolver ctor (Luan Devecchi) #39610
  * refactor fs docs structure (Michaël Zasso) #37170
errors:
  * (SEMVER-MINOR) remove experimental from --enable-source-maps (Benjamin Coe) #37362
esm:
  * deprecate legacy main lookup for modules (Guy Bedford) #36918
fs:
  * (SEMVER-MINOR) allow empty string for temp directory prefix (Voltrex) #39028
  * (SEMVER-MINOR) allow no-params fsPromises fileHandle read (Nitzan Uziely) #38287
  * (SEMVER-MINOR) add support for async iterators to `fsPromises.writeFile` (HiroyukiYagihashi) #37490
  * improve fsPromises readFile performance (Nitzan Uziely) #37608
  * (SEMVER-MINOR) add fsPromises.watch() (James M Snell) #37179
  * (SEMVER-MINOR) allow `position` parameter to be a `BigInt` in read and readSync (Darshan Sen) #36190
http2:
  * (SEMVER-MINOR) add support for sensitive headers (Anna Henningsen) #34145
  * (SEMVER-MINOR) allow setting the local window size of a session (Yongsheng Zhang) #35978
inspector:
  * mark as stable (Gireesh Punathil) #37748
module:
  * (SEMVER-MINOR) add support for `URL` to `import.meta.resolve` (Antoine du Hamel) #38587
  * (SEMVER-MINOR) add support for `node:`‑prefixed `require(…)` calls (ExE Boss) #37246
net:
  * (SEMVER-MINOR) allow net.BlockList to use net.SocketAddress objects (James M Snell) #37917
  * (SEMVER-MINOR) add SocketAddress class (James M Snell) #37917
  * (SEMVER-MINOR) make net.BlockList cloneable (James M Snell) #37917
  * (SEMVER-MINOR) make blocklist family case insensitive (James M Snell) #34864
  * (SEMVER-MINOR) introduce net.BlockList (James M Snell) #34625
node-api:
  * (SEMVER-MINOR) allow retrieval of add-on file name (Gabriel Schulhof) #37195
os:
  * (SEMVER-MINOR) add os.devNull (Luigi Pinca) #38569
perf_hooks:
  * (SEMVER-MINOR) introduce createHistogram (James M Snell) #37155
process:
  * (SEMVER-MINOR) add api to enable source-maps programmatically (legendecas) #39085
  * (SEMVER-MINOR) add `'worker'` event (James M Snell) #38659
  * (SEMVER-MINOR) add direct access to rss without iterating pages (Adrien Maret) #34291
readline:
  * (SEMVER-MINOR) add AbortSignal support to interface (Nitzan Uziely) #37932
  * (SEMVER-MINOR) add support for the AbortController to the question method (Mattias Runge-Broberg) #33676
  * (SEMVER-MINOR) add history event and option to set initial history (Mattias Runge-Broberg) #33662
repl:
  * (SEMVER-MINOR) add auto‑completion for `node:`‑prefixed `require(…)` calls (ExE Boss) #37246
src:
  * (SEMVER-MINOR) call overload ctor from the original ctor (Darshan Sen) #39768
  * (SEMVER-MINOR) add a constructor overload for CallbackScope (Darshan Sen) #39768
  * (SEMVER-MINOR) fix align in cares_wrap.h (Luan) #39610
  * (SEMVER-MINOR) allow to negate boolean CLI flags (Michaël Zasso) #39023
  * (SEMVER-MINOR) add --heapsnapshot-near-heap-limit option (Joyee Cheung) #33010
  * (SEMVER-MINOR) move node_binding to modern THROW_ERR* (James M Snell) #35469
  * (SEMVER-MINOR) add way to get IsolateData and allocator from Environment (Anna Henningsen) #36441
  * (SEMVER-MINOR) allow preventing SetPrepareStackTraceCallback (Shelley Vohr) #36447
  * (SEMVER-MINOR) add maybe versions of EmitExit and EmitBeforeExit (Anna Henningsen) #35486
stream:
  * (SEMVER-MINOR) add readableDidRead if has been read from (Robert Nagy) #39589
  * (SEMVER-MINOR) pipeline accept Buffer as a valid first argument (Nitzan Uziely) #37739
test:
  * (SEMVER-MINOR) add wpt tests for Blob (Michaël Zasso) #36811
tls:
  * (SEMVER-MINOR) allow reading data into a static buffer (Andrey Pechkurov) #35753
tools:
  * (SEMVER-MINOR) add `Worker` to type-parser (James M Snell) #38659
url:
  * (SEMVER-MINOR) expose urlToHttpOptions utility (Yongsheng Zhang) #35960
util:
  * (SEMVER-MINOR) expose toUSVString (Robert Nagy) #39814
v8:
  * (SEMVER-MINOR) implement v8.stopCoverage() (Joyee Cheung) #33807
  * (SEMVER-MINOR) implement v8.takeCoverage() (Joyee Cheung) #33807
worker:
  * (SEMVER-MINOR) add setEnvironmentData/getEnvironmentData (James M Snell) #37486

PR-URL: TODO
targos added a commit that referenced this issue Sep 4, 2021
Notable changes:

assert:
  * change status of legacy asserts (James M Snell) #38113
buffer:
  * (SEMVER-MINOR) introduce Blob (James M Snell) #36811
  * (SEMVER-MINOR) add base64url encoding option (Filip Skokan) #36952
child_process:
  * (SEMVER-MINOR) allow `options.cwd` receive a URL (Khaidi Chu) #38862
  * (SEMVER-MINOR) add timeout to spawn and fork (Nitzan Uziely) #37256
  * (SEMVER-MINOR) allow promisified exec to be cancel (Carlos Fuentes) #34249
  * (SEMVER-MINOR) add 'overlapped' stdio flag (Thiago Padilha) #29412
cli:
  * (SEMVER-MINOR) add -C alias for --conditions flag (Guy Bedford) #38755
  * (SEMVER-MINOR) add --node-memory-debug option (Anna Henningsen) #35537
dns:
  * (SEMVER-MINOR) add "tries" option to Resolve options (Luan Devecchi) #39610
  * (SEMVER-MINOR) allow `--dns-result-order` to change default dns verbatim (Ouyang Yadong) #38099
doc:
  * (SEMVER-MINOR) add missing change to resolver ctor (Luan Devecchi) #39610
  * refactor fs docs structure (James M Snell) #37170
errors:
  * (SEMVER-MINOR) remove experimental from --enable-source-maps (Benjamin Coe) #37362
esm:
  * deprecate legacy main lookup for modules (Guy Bedford) #36918
fs:
  * (SEMVER-MINOR) allow empty string for temp directory prefix (Voltrex) #39028
  * (SEMVER-MINOR) allow no-params fsPromises fileHandle read (Nitzan Uziely) #38287
  * (SEMVER-MINOR) add support for async iterators to `fsPromises.writeFile` (HiroyukiYagihashi) #37490
  * improve fsPromises readFile performance (Nitzan Uziely) #37608
  * (SEMVER-MINOR) add fsPromises.watch() (James M Snell) #37179
  * (SEMVER-MINOR) allow `position` parameter to be a `BigInt` in read and readSync (Darshan Sen) #36190
http2:
  * (SEMVER-MINOR) add support for sensitive headers (Anna Henningsen) #34145
  * (SEMVER-MINOR) allow setting the local window size of a session (Yongsheng Zhang) #35978
inspector:
  * mark as stable (Gireesh Punathil) #37748
module:
  * (SEMVER-MINOR) add support for `URL` to `import.meta.resolve` (Antoine du Hamel) #38587
  * (SEMVER-MINOR) add support for `node:`‑prefixed `require(…)` calls (ExE Boss) #37246
net:
  * (SEMVER-MINOR) introduce net.BlockList (James M Snell) #34625
node-api:
  * (SEMVER-MINOR) allow retrieval of add-on file name (Gabriel Schulhof) #37195
os:
  * (SEMVER-MINOR) add os.devNull (Luigi Pinca) #38569
perf_hooks:
  * (SEMVER-MINOR) introduce createHistogram (James M Snell) #37155
process:
  * (SEMVER-MINOR) add api to enable source-maps programmatically (legendecas) #39085
  * (SEMVER-MINOR) add `'worker'` event (James M Snell) #38659
  * (SEMVER-MINOR) add direct access to rss without iterating pages (Adrien Maret) #34291
readline:
  * (SEMVER-MINOR) add AbortSignal support to interface (Nitzan Uziely) #37932
  * (SEMVER-MINOR) add support for the AbortController to the question method (Mattias Runge-Broberg) #33676
  * (SEMVER-MINOR) add history event and option to set initial history (Mattias Runge-Broberg) #33662
repl:
  * (SEMVER-MINOR) add auto‑completion for `node:`‑prefixed `require(…)` calls (ExE Boss) #37246
src:
  * (SEMVER-MINOR) call overload ctor from the original ctor (Darshan Sen) #39768
  * (SEMVER-MINOR) add a constructor overload for CallbackScope (Darshan Sen) #39768
  * (SEMVER-MINOR) allow to negate boolean CLI flags (Michaël Zasso) #39023
  * (SEMVER-MINOR) add --heapsnapshot-near-heap-limit option (Joyee Cheung) #33010
  * (SEMVER-MINOR) add way to get IsolateData and allocator from Environment (Anna Henningsen) #36441
  * (SEMVER-MINOR) allow preventing SetPrepareStackTraceCallback (Shelley Vohr) #36447
  * (SEMVER-MINOR) add maybe versions of EmitExit and EmitBeforeExit (Anna Henningsen) #35486
stream:
  * (SEMVER-MINOR) add readableDidRead if has been read from (Robert Nagy) #39589
  * (SEMVER-MINOR) pipeline accept Buffer as a valid first argument (Nitzan Uziely) #37739
tls:
  * (SEMVER-MINOR) allow reading data into a static buffer (Andrey Pechkurov) #35753
tools:
  * (SEMVER-MINOR) add `Worker` to type-parser (James M Snell) #38659
url:
  * (SEMVER-MINOR) expose urlToHttpOptions utility (Yongsheng Zhang) #35960
util:
  * (SEMVER-MINOR) expose toUSVString (Robert Nagy) #39814
v8:
  * (SEMVER-MINOR) implement v8.stopCoverage() (Joyee Cheung) #33807
  * (SEMVER-MINOR) implement v8.takeCoverage() (Joyee Cheung) #33807
worker:
  * (SEMVER-MINOR) add setEnvironmentData/getEnvironmentData (James M Snell) #37486

PR-URL: https://github.com/nodejs/node/pull/39990
targos added a commit that referenced this issue Sep 7, 2021
Notable changes:

assert:
  * change status of legacy asserts (James M Snell) #38113
buffer:
  * (SEMVER-MINOR) introduce Blob (James M Snell) #36811
  * (SEMVER-MINOR) add base64url encoding option (Filip Skokan) #36952
child_process:
  * (SEMVER-MINOR) allow `options.cwd` receive a URL (Khaidi Chu) #38862
  * (SEMVER-MINOR) add timeout to spawn and fork (Nitzan Uziely) #37256
  * (SEMVER-MINOR) allow promisified exec to be cancel (Carlos Fuentes) #34249
  * (SEMVER-MINOR) add 'overlapped' stdio flag (Thiago Padilha) #29412
cli:
  * (SEMVER-MINOR) add -C alias for --conditions flag (Guy Bedford) #38755
  * (SEMVER-MINOR) add --node-memory-debug option (Anna Henningsen) #35537
dns:
  * (SEMVER-MINOR) add "tries" option to Resolve options (Luan Devecchi) #39610
  * (SEMVER-MINOR) allow `--dns-result-order` to change default dns verbatim (Ouyang Yadong) #38099
doc:
  * (SEMVER-MINOR) add missing change to resolver ctor (Luan Devecchi) #39610
  * refactor fs docs structure (James M Snell) #37170
errors:
  * (SEMVER-MINOR) remove experimental from --enable-source-maps (Benjamin Coe) #37362
esm:
  * deprecate legacy main lookup for modules (Guy Bedford) #36918
fs:
  * (SEMVER-MINOR) allow empty string for temp directory prefix (Voltrex) #39028
  * (SEMVER-MINOR) allow no-params fsPromises fileHandle read (Nitzan Uziely) #38287
  * (SEMVER-MINOR) add support for async iterators to `fsPromises.writeFile` (HiroyukiYagihashi) #37490
  * improve fsPromises readFile performance (Nitzan Uziely) #37608
  * (SEMVER-MINOR) add fsPromises.watch() (James M Snell) #37179
  * (SEMVER-MINOR) allow `position` parameter to be a `BigInt` in read and readSync (Darshan Sen) #36190
http2:
  * (SEMVER-MINOR) add support for sensitive headers (Anna Henningsen) #34145
  * (SEMVER-MINOR) allow setting the local window size of a session (Yongsheng Zhang) #35978
inspector:
  * mark as stable (Gireesh Punathil) #37748
module:
  * (SEMVER-MINOR) add support for `URL` to `import.meta.resolve` (Antoine du Hamel) #38587
  * (SEMVER-MINOR) add support for `node:`‑prefixed `require(…)` calls (ExE Boss) #37246
net:
  * (SEMVER-MINOR) introduce net.BlockList (James M Snell) #34625
node-api:
  * (SEMVER-MINOR) allow retrieval of add-on file name (Gabriel Schulhof) #37195
os:
  * (SEMVER-MINOR) add os.devNull (Luigi Pinca) #38569
perf_hooks:
  * (SEMVER-MINOR) introduce createHistogram (James M Snell) #37155
process:
  * (SEMVER-MINOR) add api to enable source-maps programmatically (legendecas) #39085
  * (SEMVER-MINOR) add `'worker'` event (James M Snell) #38659
  * (SEMVER-MINOR) add direct access to rss without iterating pages (Adrien Maret) #34291
readline:
  * (SEMVER-MINOR) add AbortSignal support to interface (Nitzan Uziely) #37932
  * (SEMVER-MINOR) add support for the AbortController to the question method (Mattias Runge-Broberg) #33676
  * (SEMVER-MINOR) add history event and option to set initial history (Mattias Runge-Broberg) #33662
repl:
  * (SEMVER-MINOR) add auto‑completion for `node:`‑prefixed `require(…)` calls (ExE Boss) #37246
src:
  * (SEMVER-MINOR) call overload ctor from the original ctor (Darshan Sen) #39768
  * (SEMVER-MINOR) add a constructor overload for CallbackScope (Darshan Sen) #39768
  * (SEMVER-MINOR) allow to negate boolean CLI flags (Michaël Zasso) #39023
  * (SEMVER-MINOR) add --heapsnapshot-near-heap-limit option (Joyee Cheung) #33010
  * (SEMVER-MINOR) add way to get IsolateData and allocator from Environment (Anna Henningsen) #36441
  * (SEMVER-MINOR) allow preventing SetPrepareStackTraceCallback (Shelley Vohr) #36447
  * (SEMVER-MINOR) add maybe versions of EmitExit and EmitBeforeExit (Anna Henningsen) #35486
stream:
  * (SEMVER-MINOR) add readableDidRead if has been read from (Robert Nagy) #39589
  * (SEMVER-MINOR) pipeline accept Buffer as a valid first argument (Nitzan Uziely) #37739
tls:
  * (SEMVER-MINOR) allow reading data into a static buffer (Andrey Pechkurov) #35753
tools:
  * (SEMVER-MINOR) add `Worker` to type-parser (James M Snell) #38659
url:
  * (SEMVER-MINOR) expose urlToHttpOptions utility (Yongsheng Zhang) #35960
util:
  * (SEMVER-MINOR) expose toUSVString (Robert Nagy) #39814
v8:
  * (SEMVER-MINOR) implement v8.stopCoverage() (Joyee Cheung) #33807
  * (SEMVER-MINOR) implement v8.takeCoverage() (Joyee Cheung) #33807
worker:
  * (SEMVER-MINOR) add setEnvironmentData/getEnvironmentData (James M Snell) #37486

PR-URL: #39990
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

None yet

10 participants