I contribute to denoland/deno_std as a hobby, and I've been looking at denoland/deno_std/node a lot, so I thought I'd take a quick look at the architectural differences between the nodejs/node and denoland/deno_std/node APIs at this point in time (2021/12/16).
Where to implement the API
It is implemented in node/lib.
Using Query string as an example, the logic is implemented in node/lib/querystring.js and exported at here.
In addition, internal code that does not need to be exported is implemented in node/lib/internal.
In Query string, functions such as encordStr are exported, and imported at
For example, the domainToASCII implementation is in node/src/node_url.cc.
Also, primordials are used in many places.
You can read more about primordials in the suggestions around prototype pollution and primordials.js(Japanese article).
For example, Query string is implemented in
querystring.ts, and Buffer is implemented in node/buffer.js, and node/buffer.d.ts is specified in
@deno-types of node/buffer.ts.
The equivalent of Node's internalBinding is implemented by TypeScript in node/internal_binding.
The primordials are implemented in denoland/deno, but not in denoland/deno_std.