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

bootstrap: implement run-time user-land snapshots via --build-snapshot and --snapshot-blob #38905

Closed
wants to merge 6 commits into from

Conversation

joyeecheung
Copy link
Member

@joyeecheung joyeecheung commented Jun 2, 2021

This patch introduces --build-snapshot and --snapshot-blob options for creating and using user land snapshots.

For the initial iteration, user land CJS modules and ESM are not yet supported in the snapshot, so only one single file can be snapshotted (users can bundle their applications into a single script with their bundler of choice to build a snapshot though).

A subset of builtins should already work, and support for more builtins are being added. This PR includes tests checking that the TypeScript compiler and the marked markdown renderer (and the builtins they use) can be snapshotted and deserialized.

To generate a snapshot using snapshot.js as entry point and write the snapshot blob to snapshot.blob:

$ echo "globalThis.foo = 'I am from the snapshot'" > snapshot.js
$ node --snapshot-blob snapshot.blob --build-snapshot snapshot.js 

To restore application state from snapshot.blob, with index.js as the entry point script for the deserialized application:

$ echo "console.log(globalThis.foo)" > index.js
$ node --snapshot-blob snapshot.blob index.js
I am from the snapshot

Users can also use the v8.startupSnapshot API to specify an entry point at snapshot building time, thus avoiding the need of an additional entry script at deserialization time:

$ echo "require('v8').startupSnapshot.setDeserializeMainFunction(() => console.log('I am from the snapshot'))" > snapshot.js
$ node --snapshot-blob snapshot.blob --build-snapshot snapshot.js 
$ node --snapshot-blob snapshot.blob
I am from the snapshot

Note that this patch only adds functionality to the node executable for building run-time user-land snapshots, the generated snapshot is stored into a separate file on disk. Building a single binary with both Node.js and an embedded snapshot has already been possible with the --node-snapshot-main option to the configure script if the user compiles Node.js from source. It would be a different task to enable the node executable to produce a single binary that contains both Node.js and an embedded snapshot without building Node.js from source, which should be layered on top of the SEA (Single Executable Apps) initiative.

Known limitations/bugs that are being fixed in the V8 upstream:

More known limitations/bugs in the tracking issue: #44014

Refs: #35711

@github-actions github-actions bot added c++ Issues and PRs that require attention from people who are familiar with C++. lib / src Issues and PRs related to general changes in the lib or src directory. needs-ci PRs that need a full CI run. labels Jun 2, 2021
@joyeecheung joyeecheung marked this pull request as draft June 2, 2021 17:06
@nodejs-github-bot

This comment has been minimized.

@bl-ue
Copy link
Contributor

bl-ue commented Jun 2, 2021

Wow, that's really cool. Can't wait! ❤️

Copy link
Member

@addaleax addaleax left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

src/node.cc Outdated Show resolved Hide resolved
src/node.cc Outdated Show resolved Hide resolved
src/util.cc Outdated Show resolved Hide resolved
@targos
Copy link
Member

targos commented Jun 2, 2021

What is the compatibility of the snapshot blob WRT V8/Node version, other CLI flags, etc?

@targos
Copy link
Member

targos commented Jun 2, 2021

And what happens if you try to load a snapshot with the wrong version of the runtime?

@joyeecheung
Copy link
Member Author

joyeecheung commented Jun 3, 2021

What is the compatibility of the snapshot blob WRT V8/Node version, other CLI flags, etc?

@targos The blob requires the version of V8/Node to be the same between build time and load time - V8 checks the versions explicitly, and abort if there is a mismatch, while at the moment Node.js should work as long as the number/kind/order of external references etc. match between the binaries used to build and load the snapshot (what happens when there is a mismatch depends on what the mismatch actually is, I would say it's most likely that the process would abort when some V8 casting type check fails e.g. casting e.g. a String to a Function, because one version expects value at blob index n to be a String and the other expects value at blob index n to be a Function). Maybe we could explicitly check the Node.js versions as well so when there is a mismatch users can understand what's wrong immediately.

The CLI flags can vary between between build time and load time, to some extent, it depends on the actual flags being used.

@targos
Copy link
Member

targos commented Jun 3, 2021

Maybe we could explicitly check the Node.js versions as well so when there is a mismatch users can understand what's wrong immediately.

Seems like a good idea.

@joyeecheung
Copy link
Member Author

Also that reminded me that we need to regenerate process.argv and friends when the process is restored from a user land snapshot, otherwise they will be part of the JS state being captured and stay that way..

@joyeecheung
Copy link
Member Author

joyeecheung commented Jun 10, 2021

Another thing that we need to watch out for: right now some modules cache access to getOptionValue() which means they would ignore the values of these flags at snapshot restoration time (if passed differently). Same goes for process.env. It's hard to say whether always dynamically querying the values of these things internally is a good idea for user land snapshots, depending on what exactly the flags are, but I think for the initial version of this we just need to make sure that if the user uses the same flags to build and restore snapshots then they are fine. We can think about how to allow users to configure the flag behaviors in later iterations. (I think one approach that might work is to have two sets of flags available, one for the flags used at snapshot building time and one for the flags actually used to launch the instance, and allow code to access both to adjust based on their needs).

@addaleax
Copy link
Member

It's hard to say whether always dynamically querying the values of these things

Fwiw, I think it’s generally a good idea not to cache these values, so that they become configurable – independently of snapshot support.

@joyeecheung
Copy link
Member Author

Fwiw, I think it’s generally a good idea not to cache these values, so that they become configurable – independently of snapshot support.

At the source code level I agree - not caching it directly via the form of something like const value = getOptionValue('--some-flag') gives us the opportunity to refresh them should we choose to. If a flag shouldn't be dynamically configurable for some reason (maybe security) we can just warn or error from the function that returns these values, but I think those should be the rare case.

@joyeecheung
Copy link
Member Author

joyeecheung commented Jun 11, 2021

Updated the prototype a bit, now it loads the snapshot entry point from JS (the snapshot would only be generated when it runs to completion), this gives us more control in e.g. warning about unsupported modules. I've split some smaller commits to other PRs, there's also a small V8 debuggability thing that I'll upstream later.

Some issues I discovered:

  • After src: set PromiseHooks by Environment #38821 the environment keeps a list of weak references to all vm contexts created in it. Right now in the V8 API there is no way to record a weak reference to a context in the snapshot, so building user land snapshots with any vm contexts not yet GC'ed would crash right now (even if promise hooks aren't enabled, because the implementation always track the contexts so that it can add hooks to them on demand later). We could probably work around this for now by always tracking the contexts in the snapshot and setting the references to weak when restoring them, and let V8 GC them later if necessary. In the long term we can add an API in V8 to track weak references in snapshots.
  • For some reason spinning the loop at snapshot building time results in inconsistencies in the JS land so e.g. REPL would stop working. There are still a bunch of refactoring to be done to make those runtime stuff queried lazily, but I guess we can just spin the loop for the experimental version, even if it breaks when there are runtime differences between snapshot building time and loading time?

(Also, I realized that many modules just require the CJS module loader at the top level, which would in turn require the ESM loader at the top level, which leaves a promise immediately. Not sure how to work around that promise yet but I guess for now we could just make sure that other modules only load those loaders when they actually need to...)

@jasnell
Copy link
Member

jasnell commented Jun 11, 2021

At the source code level I agree - not caching it directly via the form of something like const value = getOptionValue('--some-flag') gives us the opportunity to refresh them should we choose to. If a flag shouldn't be dynamically configurable for some reason (maybe security) we can just warn or error from the function that returns these values, but I think those should be the rare case.

It's likely worth opening a separate issue for this particular piece. I agree that getting away from caching as a module-scope const would be a good thing.

joyeecheung added a commit that referenced this pull request Jun 21, 2021
Split the running of the instance so that it can be reused
by the snapshot builder when we need to run the loop for
user code.

PR-URL: #39007
Refs: #35711
Refs: #38905
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
joyeecheung added a commit that referenced this pull request Jun 21, 2021
This is only necessary for the snapshot builder (because we
have no way to resurrect the handles at the moment). In addition,
print the handles if the debug flag is set or if the queues
are not empty after snapshot is created.

PR-URL: #39007
Refs: #35711
Refs: #38905
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
danielleadams pushed a commit that referenced this pull request Jun 21, 2021
Split the running of the instance so that it can be reused
by the snapshot builder when we need to run the loop for
user code.

PR-URL: #39007
Refs: #35711
Refs: #38905
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
danielleadams pushed a commit that referenced this pull request Jun 21, 2021
This is only necessary for the snapshot builder (because we
have no way to resurrect the handles at the moment). In addition,
print the handles if the debug flag is set or if the queues
are not empty after snapshot is created.

PR-URL: #39007
Refs: #35711
Refs: #38905
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
joyeecheung added a commit that referenced this pull request Jun 21, 2021
This way, internal modules can still require the module
and cache the function getOptionValue() early (therefore
these code can be included in the snapshots), but the
options map won't be serialized from C++ land until the
option values are actually queried.

PR-URL: #38993
Refs: #35711
Refs: #38905
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Zijian Liu <lxxyxzj@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
@joyeecheung joyeecheung force-pushed the snapshot-user branch 2 times, most recently from 3ae6d68 to 28f6bec Compare June 21, 2021 16:53
@ruyadorno
Copy link
Member

Note to releasers: this needs to be backported after the two PRs mentioned above #38905 (comment) or there would be conflicts

That worked! thanks @joyeecheung!

Removing the backport-blocked-v18.x label here and in other commits that depended on this one.

ruyadorno pushed a commit that referenced this pull request Aug 23, 2022
PR-URL: #38905
Refs: #35711
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
ruyadorno pushed a commit that referenced this pull request Aug 23, 2022
This patch introduces `--build-snapshot` and `--snapshot-blob` options
for creating and using user land snapshots.

For the initial iteration, user land CJS modules and ESM are not yet
supported in the snapshot, so only one single file can be snapshotted
(users can bundle their applications into a single script with their
bundler of choice to build a snapshot though).

A subset of builtins should already work, and support for more builtins
are being added. This PR includes tests checking that the TypeScript
compiler and the marked markdown renderer (and the builtins they use)
can be snapshotted and deserialized.

To generate a snapshot using `snapshot.js` as entry point and write the
snapshot blob to `snapshot.blob`:

```
$ echo "globalThis.foo = 'I am from the snapshot'" > snapshot.js
$ node --snapshot-blob snapshot.blob --build-snapshot snapshot.js
```

To restore application state from `snapshot.blob`, with `index.js` as
the entry point script for the deserialized application:

```
$ echo "console.log(globalThis.foo)" > index.js
$ node --snapshot-blob snapshot.blob index.js
I am from the snapshot
```

Users can also use the `v8.startupSnapshot` API to specify an entry
point at snapshot building time, thus avoiding the need of an additional
entry script at deserialization time:

```
$ echo "require('v8').startupSnapshot.setDeserializeMainFunction(() => console.log('I am from the snapshot'))" > snapshot.js
$ node --snapshot-blob snapshot.blob --build-snapshot snapshot.js
$ node --snapshot-blob snapshot.blob
I am from the snapshot
```

Note that this patch only adds functionality to the `node` executable
for building run-time user-land snapshots, the generated snapshot is
stored into a separate file on disk. Building a single binary with both
Node.js and an embedded snapshot has already been possible with the
`--node-snapshot-main` option to the `configure` script if the user
compiles Node.js from source. It would be a different task to enable the
`node` executable to produce a single binary that contains both Node.js
and an embedded snapshot without building Node.js from source, which
should be layered on top of the SEA (Single Executable Apps) initiative.

Known limitations/bugs that are being fixed in the upstream:

- V8 hits a DCHECK when deserializing certain mutated globals, e.g.
  `Error.stackTraceLimit` (it should work fine in the release build,
  however): https://chromium-review.googlesource.com/c/v8/v8/+/3319481
- Layout of V8's read-only heap can be inconsistent after
  deserialization, resulting in memory corruption:
  https://bugs.chromium.org/p/v8/issues/detail?id=12921

PR-URL: #38905
Refs: #35711
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
ruyadorno pushed a commit that referenced this pull request Aug 23, 2022
PR-URL: #38905
Refs: #35711
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
ruyadorno pushed a commit that referenced this pull request Aug 23, 2022
PR-URL: #38905
Refs: #35711
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
ruyadorno pushed a commit that referenced this pull request Aug 23, 2022
PR-URL: #38905
Refs: #35711
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
ruyadorno added a commit that referenced this pull request Aug 23, 2022
Notable changes:

* bootstrap:
  * implement run-time user-land snapshots via --build-snapshot and
  --snapshot-blob (Joyee Cheung) in #38905
* crypto:
  * (SEMVER-MINOR) allow zero-length IKM in HKDF and in webcrypto PBKDF2
  (Filip Skokan) #44201
  * (SEMVER-MINOR) allow zero-length secret KeyObject
  (Filip Skokan) #44201
* deps:
  * upgrade npm to 8.18.0 (npm team) #44263 - Adds a new npm query cmd
* doc:
  * add Erick Wendel to collaborators (Erick Wendel) #44088
  * add MoLow to collaborators (Moshe Atlow) #44214
  * deprecate --trace-atomics-wait (Keyhan Vakil) #44093
* http:
  * (SEMVER-MINOR) make idle http parser count configurable
  (theanarkh) #43974
* net:
  * (SEMVER-MINOR) add local family (theanarkh) #43975
* src:
  * (SEMVER-MINOR) print source map error source on demand
  (Chengzhong Wu) #43875
* tls:
  * (SEMVER-MINOR) pass a valid socket on tlsClientError
  (Daeyeon Jeong) #44021

PR-URL: TBD
ruyadorno added a commit that referenced this pull request Aug 23, 2022
Notable changes:

* bootstrap:
  * implement run-time user-land snapshots via --build-snapshot and
  --snapshot-blob (Joyee Cheung) in #38905
* crypto:
  * (SEMVER-MINOR) allow zero-length IKM in HKDF and in webcrypto PBKDF2
  (Filip Skokan) #44201
  * (SEMVER-MINOR) allow zero-length secret KeyObject
  (Filip Skokan) #44201
* deps:
  * upgrade npm to 8.18.0 (npm team) #44263 - Adds a new npm query cmd
* doc:
  * add Erick Wendel to collaborators (Erick Wendel) #44088
  * add MoLow to collaborators (Moshe Atlow) #44214
  * deprecate --trace-atomics-wait (Keyhan Vakil) #44093
* http:
  * (SEMVER-MINOR) make idle http parser count configurable
  (theanarkh) #43974
* net:
  * (SEMVER-MINOR) add local family (theanarkh) #43975
* src:
  * (SEMVER-MINOR) print source map error source on demand
  (Chengzhong Wu) #43875
* tls:
  * (SEMVER-MINOR) pass a valid socket on tlsClientError
  (Daeyeon Jeong) #44021

PR-URL: #44353
ruyadorno added a commit that referenced this pull request Aug 23, 2022
Notable changes:

* bootstrap:
  * implement run-time user-land snapshots via --build-snapshot and
  --snapshot-blob (Joyee Cheung) in #38905
* crypto:
  * (SEMVER-MINOR) allow zero-length IKM in HKDF and in webcrypto PBKDF2
  (Filip Skokan) #44201
  * (SEMVER-MINOR) allow zero-length secret KeyObject
  (Filip Skokan) #44201
* deps:
  * upgrade npm to 8.18.0 (npm team) #44263 - Adds a new npm query cmd
* doc:
  * add Erick Wendel to collaborators (Erick Wendel) #44088
  * add theanarkh to collaborators (theanarkh) #44131
  * add MoLow to collaborators (Moshe Atlow) #44214
  * add cola119 to collaborators (cola119) #44248
  * deprecate --trace-atomics-wait (Keyhan Vakil) #44093
* http:
  * (SEMVER-MINOR) make idle http parser count configurable
  (theanarkh) #43974
* net:
  * (SEMVER-MINOR) add local family (theanarkh) #43975
* src:
  * (SEMVER-MINOR) print source map error source on demand
  (Chengzhong Wu) #43875
* tls:
  * (SEMVER-MINOR) pass a valid socket on tlsClientError
  (Daeyeon Jeong) #44021

PR-URL: #44353
ruyadorno added a commit that referenced this pull request Aug 24, 2022
Notable changes:

* bootstrap:
  * implement run-time user-land snapshots via --build-snapshot and
  --snapshot-blob (Joyee Cheung) in #38905
* crypto:
  * (SEMVER-MINOR) allow zero-length IKM in HKDF and in webcrypto PBKDF2
  (Filip Skokan) #44201
  * (SEMVER-MINOR) allow zero-length secret KeyObject
  (Filip Skokan) #44201
* deps:
  * upgrade npm to 8.18.0 (npm team) #44263 - Adds a new npm query cmd
* doc:
  * add Erick Wendel to collaborators (Erick Wendel) #44088
  * add theanarkh to collaborators (theanarkh) #44131
  * add MoLow to collaborators (Moshe Atlow) #44214
  * add cola119 to collaborators (cola119) #44248
  * deprecate --trace-atomics-wait (Keyhan Vakil) #44093
* http:
  * (SEMVER-MINOR) make idle http parser count configurable
  (theanarkh) #43974
* net:
  * (SEMVER-MINOR) add local family (theanarkh) #43975
* src:
  * (SEMVER-MINOR) print source map error source on demand
  (Chengzhong Wu) #43875
* tls:
  * (SEMVER-MINOR) pass a valid socket on tlsClientError
  (Daeyeon Jeong) #44021

PR-URL: #44353
sidwebworks pushed a commit to sidwebworks/node that referenced this pull request Aug 26, 2022
Notable changes:

* bootstrap:
  * implement run-time user-land snapshots via --build-snapshot and
  --snapshot-blob (Joyee Cheung) in nodejs#38905
* crypto:
  * (SEMVER-MINOR) allow zero-length IKM in HKDF and in webcrypto PBKDF2
  (Filip Skokan) nodejs#44201
  * (SEMVER-MINOR) allow zero-length secret KeyObject
  (Filip Skokan) nodejs#44201
* deps:
  * upgrade npm to 8.18.0 (npm team) nodejs#44263 - Adds a new npm query cmd
* doc:
  * add Erick Wendel to collaborators (Erick Wendel) nodejs#44088
  * add theanarkh to collaborators (theanarkh) nodejs#44131
  * add MoLow to collaborators (Moshe Atlow) nodejs#44214
  * add cola119 to collaborators (cola119) nodejs#44248
  * deprecate --trace-atomics-wait (Keyhan Vakil) nodejs#44093
* http:
  * (SEMVER-MINOR) make idle http parser count configurable
  (theanarkh) nodejs#43974
* net:
  * (SEMVER-MINOR) add local family (theanarkh) nodejs#43975
* src:
  * (SEMVER-MINOR) print source map error source on demand
  (Chengzhong Wu) nodejs#43875
* tls:
  * (SEMVER-MINOR) pass a valid socket on tlsClientError
  (Daeyeon Jeong) nodejs#44021

PR-URL: nodejs#44353
@gajus
Copy link

gajus commented Aug 27, 2022

It would be a different task to enable the node executable to produce a single binary that contains both Node.js and an embedded snapshot without building Node.js from source, which should be layered on top of the SEA (Single Executable Apps) initiative.

Where can I track progress of this?

@joyeecheung
Copy link
Member Author

@gajus The SEA effort is tracked in https://github.com/nodejs/single-executable and currently most activities take place in https://github.com/nodejs/single-executable/discussions

Fyko pushed a commit to Fyko/node that referenced this pull request Sep 15, 2022
PR-URL: nodejs#38905
Refs: nodejs#35711
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Fyko pushed a commit to Fyko/node that referenced this pull request Sep 15, 2022
This patch introduces `--build-snapshot` and `--snapshot-blob` options
for creating and using user land snapshots.

For the initial iteration, user land CJS modules and ESM are not yet
supported in the snapshot, so only one single file can be snapshotted
(users can bundle their applications into a single script with their
bundler of choice to build a snapshot though).

A subset of builtins should already work, and support for more builtins
are being added. This PR includes tests checking that the TypeScript
compiler and the marked markdown renderer (and the builtins they use)
can be snapshotted and deserialized.

To generate a snapshot using `snapshot.js` as entry point and write the
snapshot blob to `snapshot.blob`:

```
$ echo "globalThis.foo = 'I am from the snapshot'" > snapshot.js
$ node --snapshot-blob snapshot.blob --build-snapshot snapshot.js
```

To restore application state from `snapshot.blob`, with `index.js` as
the entry point script for the deserialized application:

```
$ echo "console.log(globalThis.foo)" > index.js
$ node --snapshot-blob snapshot.blob index.js
I am from the snapshot
```

Users can also use the `v8.startupSnapshot` API to specify an entry
point at snapshot building time, thus avoiding the need of an additional
entry script at deserialization time:

```
$ echo "require('v8').startupSnapshot.setDeserializeMainFunction(() => console.log('I am from the snapshot'))" > snapshot.js
$ node --snapshot-blob snapshot.blob --build-snapshot snapshot.js
$ node --snapshot-blob snapshot.blob
I am from the snapshot
```

Note that this patch only adds functionality to the `node` executable
for building run-time user-land snapshots, the generated snapshot is
stored into a separate file on disk. Building a single binary with both
Node.js and an embedded snapshot has already been possible with the
`--node-snapshot-main` option to the `configure` script if the user
compiles Node.js from source. It would be a different task to enable the
`node` executable to produce a single binary that contains both Node.js
and an embedded snapshot without building Node.js from source, which
should be layered on top of the SEA (Single Executable Apps) initiative.

Known limitations/bugs that are being fixed in the upstream:

- V8 hits a DCHECK when deserializing certain mutated globals, e.g.
  `Error.stackTraceLimit` (it should work fine in the release build,
  however): https://chromium-review.googlesource.com/c/v8/v8/+/3319481
- Layout of V8's read-only heap can be inconsistent after
  deserialization, resulting in memory corruption:
  https://bugs.chromium.org/p/v8/issues/detail?id=12921

PR-URL: nodejs#38905
Refs: nodejs#35711
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Fyko pushed a commit to Fyko/node that referenced this pull request Sep 15, 2022
PR-URL: nodejs#38905
Refs: nodejs#35711
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Fyko pushed a commit to Fyko/node that referenced this pull request Sep 15, 2022
PR-URL: nodejs#38905
Refs: nodejs#35711
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Fyko pushed a commit to Fyko/node that referenced this pull request Sep 15, 2022
PR-URL: nodejs#38905
Refs: nodejs#35711
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Fyko pushed a commit to Fyko/node that referenced this pull request Sep 15, 2022
Notable changes:

* bootstrap:
  * implement run-time user-land snapshots via --build-snapshot and
  --snapshot-blob (Joyee Cheung) in nodejs#38905
* crypto:
  * (SEMVER-MINOR) allow zero-length IKM in HKDF and in webcrypto PBKDF2
  (Filip Skokan) nodejs#44201
  * (SEMVER-MINOR) allow zero-length secret KeyObject
  (Filip Skokan) nodejs#44201
* deps:
  * upgrade npm to 8.18.0 (npm team) nodejs#44263 - Adds a new npm query cmd
* doc:
  * add Erick Wendel to collaborators (Erick Wendel) nodejs#44088
  * add theanarkh to collaborators (theanarkh) nodejs#44131
  * add MoLow to collaborators (Moshe Atlow) nodejs#44214
  * add cola119 to collaborators (cola119) nodejs#44248
  * deprecate --trace-atomics-wait (Keyhan Vakil) nodejs#44093
* http:
  * (SEMVER-MINOR) make idle http parser count configurable
  (theanarkh) nodejs#43974
* net:
  * (SEMVER-MINOR) add local family (theanarkh) nodejs#43975
* src:
  * (SEMVER-MINOR) print source map error source on demand
  (Chengzhong Wu) nodejs#43875
* tls:
  * (SEMVER-MINOR) pass a valid socket on tlsClientError
  (Daeyeon Jeong) nodejs#44021

PR-URL: nodejs#44353
codebytere added a commit to electron/electron that referenced this pull request Oct 24, 2022
bootstrap: implement run-time user-land snapshots via --build-snapshot and --snapshot-blob
codebytere added a commit to electron/electron that referenced this pull request Oct 24, 2022
bootstrap: implement run-time user-land snapshots via --build-snapshot and --snapshot-blob
codebytere added a commit to electron/electron that referenced this pull request Oct 26, 2022
bootstrap: implement run-time user-land snapshots via --build-snapshot and --snapshot-blob
codebytere added a commit to electron/electron that referenced this pull request Nov 8, 2022
bootstrap: implement run-time user-land snapshots via --build-snapshot and --snapshot-blob
codebytere added a commit to electron/electron that referenced this pull request Nov 8, 2022
bootstrap: implement run-time user-land snapshots via --build-snapshot and --snapshot-blob
codebytere added a commit to electron/electron that referenced this pull request Nov 10, 2022
* chore: update to Node.js v18

* child_process: improve argument validation

nodejs/node#41305

* bootstrap: support configure-time user-land snapshot

nodejs/node#42466

* chore: update GN patch

* src: disambiguate terms used to refer to builtins and addons

nodejs/node#44135

* src: use a typed array internally for process._exiting

nodejs/node#43883

* chore: lib/internal/bootstrap -> lib/internal/process

* src: disambiguate terms used to refer to builtins and addons

nodejs/node#44135

* chore: remove redudant browserGlobals patch

* chore: update BoringSSL patch

* src: allow embedder-provided PageAllocator in NodePlatform

nodejs/node#38362

* chore: fixup Node.js crypto tests

- nodejs/node#44171
- nodejs/node#41600

* lib: add Promise methods to avoid-prototype-pollution lint rule

nodejs/node#43849

* deps: update V8 to 10.1

nodejs/node#42657

* src: add kNoBrowserGlobals flag for Environment

nodejs/node#40532

* chore: consolidate asar initialization patches

* deps: update V8 to 10.1

nodejs/node#42657

* deps: update V8 to 9.8

nodejs/node#41610

* src,crypto: remove AllocatedBuffers from crypto_spkac

nodejs/node#40752

* build: enable V8's shared read-only heap

nodejs/node#42809

* src: fix ssize_t error from nghttp2.h

nodejs/node#44393

* chore: fixup ESM patch

* chore: fixup patch indices

* src: merge NativeModuleEnv into NativeModuleLoader

nodejs/node#43824

* [API] Pass OOMDetails to OOMErrorCallback

https://chromium-review.googlesource.com/c/v8/v8/+/3647827

* src: iwyu in cleanup_queue.cc

* src: return Maybe from a couple of functions

nodejs/node#39603

* src: clean up embedder API

nodejs/node#35897

* src: refactor DH groups to delete crypto_groups.h

nodejs/node#43896

* deps,src: use SIMD for normal base64 encoding

nodejs/node#39775

* chore: remove deleted source file

* chore: update patches

* chore: remove deleted source file

* lib: add fetch

nodejs/node#41749

* chore: remove nonexistent node specs

* test: split report OOM tests

nodejs/node#44389

* src: trace fs async api

nodejs/node#44057

* http: trace http request / response

nodejs/node#44102

* test: split test-crypto-dh.js

nodejs/node#40451

* crypto: introduce X509Certificate API

nodejs/node#36804

* src: split property helpers from node::Environment

nodejs/node#44056

* nodejs/node#38905

bootstrap: implement run-time user-land snapshots via --build-snapshot and --snapshot-blob

* lib,src: implement WebAssembly Web API

nodejs/node#42701

* fixup! deps,src: use SIMD for normal base64 encoding

* fixup! src: refactor DH groups to delete crypto_groups.h

* chore: fixup base64 GN file

* fix: check that node::InitializeContext() returns true

* chore: delete _noBrowserGlobals usage

* chore: disable fetch in renderer procceses

* dns: default to verbatim=true in dns.lookup()

nodejs/node#39987

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
khalwa pushed a commit to solarwindscloud/electron that referenced this pull request Feb 22, 2023
* chore: update to Node.js v18

* child_process: improve argument validation

nodejs/node#41305

* bootstrap: support configure-time user-land snapshot

nodejs/node#42466

* chore: update GN patch

* src: disambiguate terms used to refer to builtins and addons

nodejs/node#44135

* src: use a typed array internally for process._exiting

nodejs/node#43883

* chore: lib/internal/bootstrap -> lib/internal/process

* src: disambiguate terms used to refer to builtins and addons

nodejs/node#44135

* chore: remove redudant browserGlobals patch

* chore: update BoringSSL patch

* src: allow embedder-provided PageAllocator in NodePlatform

nodejs/node#38362

* chore: fixup Node.js crypto tests

- nodejs/node#44171
- nodejs/node#41600

* lib: add Promise methods to avoid-prototype-pollution lint rule

nodejs/node#43849

* deps: update V8 to 10.1

nodejs/node#42657

* src: add kNoBrowserGlobals flag for Environment

nodejs/node#40532

* chore: consolidate asar initialization patches

* deps: update V8 to 10.1

nodejs/node#42657

* deps: update V8 to 9.8

nodejs/node#41610

* src,crypto: remove AllocatedBuffers from crypto_spkac

nodejs/node#40752

* build: enable V8's shared read-only heap

nodejs/node#42809

* src: fix ssize_t error from nghttp2.h

nodejs/node#44393

* chore: fixup ESM patch

* chore: fixup patch indices

* src: merge NativeModuleEnv into NativeModuleLoader

nodejs/node#43824

* [API] Pass OOMDetails to OOMErrorCallback

https://chromium-review.googlesource.com/c/v8/v8/+/3647827

* src: iwyu in cleanup_queue.cc

* src: return Maybe from a couple of functions

nodejs/node#39603

* src: clean up embedder API

nodejs/node#35897

* src: refactor DH groups to delete crypto_groups.h

nodejs/node#43896

* deps,src: use SIMD for normal base64 encoding

nodejs/node#39775

* chore: remove deleted source file

* chore: update patches

* chore: remove deleted source file

* lib: add fetch

nodejs/node#41749

* chore: remove nonexistent node specs

* test: split report OOM tests

nodejs/node#44389

* src: trace fs async api

nodejs/node#44057

* http: trace http request / response

nodejs/node#44102

* test: split test-crypto-dh.js

nodejs/node#40451

* crypto: introduce X509Certificate API

nodejs/node#36804

* src: split property helpers from node::Environment

nodejs/node#44056

* nodejs/node#38905

bootstrap: implement run-time user-land snapshots via --build-snapshot and --snapshot-blob

* lib,src: implement WebAssembly Web API

nodejs/node#42701

* fixup! deps,src: use SIMD for normal base64 encoding

* fixup! src: refactor DH groups to delete crypto_groups.h

* chore: fixup base64 GN file

* fix: check that node::InitializeContext() returns true

* chore: delete _noBrowserGlobals usage

* chore: disable fetch in renderer procceses

* dns: default to verbatim=true in dns.lookup()

nodejs/node#39987

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
c++ Issues and PRs that require attention from people who are familiar with C++. lib / src Issues and PRs related to general changes in the lib or src directory. needs-ci PRs that need a full CI run. semver-minor PRs that contain new features and should be released in the next minor version. snapshot Issues and PRs related to the startup snapshot
Projects
None yet
Development

Successfully merging this pull request may close these issues.