src: add detailed embedder process initialization API
So far, process initialization has been a bit all over the place
in Node.js. InitializeNodeWithArgs()
is our main public API
for this, but inclusion of items in it vs. InitializeOncePerProcess()
and PlatformInit()
has been random at best. Likewise,
some pieces of initialization have been guarded by
NODE_SHARED_MODE
, but also fairly randomly and without
any meaningful connection to shared library usage.
This leaves embedders in a position to cherry-pick some of the initialization code into their own code to make their application behave like typical Node.js applications to the degree to which they desire it.
Electron takes an alternative route and makes direct use of
InitializeOncePerProcess()
already while it is a private
API, with a TODO
to add it to the public API in Node.js.
This commit addresses that TODO
, and TODO
s around the
NODE_SHARED_MODE
usage. Specifically:
-
InitializeOncePerProcess()
andTearDownOncePerProcess()
are added to the public API. - The
flags
option of these functions are merged with theflags
option forInitializeNodeWithArgs()
, since they essentially share the same semantics. - The return value of the function is made an abstract class, rather than a struct, for easier API/ABI stability.
- Initialization code from
main()
is brought into these functions (since that makes sense in general). - Add a
TODO
for turningInitializeNodeWithArgs()
into a small wrapper aroundInitializeOncePerProcess()
and eventually removing it (at least one major release cycle each, presumably). - Remove
NODE_SHARED_MODE
guards and replace them with runtime options.