evanw / node-source-map-support

Adds source map support to node.js (for stack traces)
MIT License
2.16k stars 222 forks source link

Removes error code from node errors #291

Closed cspotcode closed 2 years ago

cspotcode commented 2 years ago

Related to TypeStrong/ts-node#1403

On the new node 16.5, important information is being omitted from uncaught error output.

❯ node --version
v16.5.0
❯ npm why source-map-support
source-map-support@0.5.19

From vanilla node:

❯ node -e 'import("https://example.com")' 
node:internal/errors:463
    ErrorCaptureStackTrace(err);
    ^

Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only file and data URLs are supported by the default ESM loader. Received protocol 'https:'
    at new NodeError (node:internal/errors:370:5)
    at Loader.defaultResolve [as _resolve] (node:internal/modules/esm/resolve:839:11)
    at Loader.resolve (node:internal/modules/esm/loader:89:40)
    at Loader.getModuleJob (node:internal/modules/esm/loader:242:28)
    at Loader.import (node:internal/modules/esm/loader:177:28)
    at importModuleDynamically (node:internal/process/execution:87:29)
    at async importModuleDynamicallyWrapper (node:internal/vm/module:437:15) {
  code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME'
}

With source-map-support the output is modified in ways that I think should be considered a bug.

For example, [ERR_UNSUPPORTED_ESM_URL_SCHEME] is omitted:

❯ node --require source-map-support/register -e 'import("https://example.com")'
Error: Only file and data URLs are supported by the default ESM loader. Received protocol 'https:'
    at new NodeError (node:internal/errors:370:5)
    at Loader.defaultResolve [as _resolve] (node:internal/modules/esm/resolve:839:11)
    at Loader.resolve (node:internal/modules/esm/loader:89:40)
    at Loader.getModuleJob (node:internal/modules/esm/loader:242:28)
    at Loader.import (node:internal/modules/esm/loader:177:28)
    at importModuleDynamically (node:internal/process/execution:87:29)
    at importModuleDynamicallyWrapper (node:internal/vm/module:437:15)

This is not the same as #263, although anyone who attempts this reproduction will notice the lack of colored output.

cspotcode commented 2 years ago

I think source-map-support's prepareStackTrace implementation may need to be updated to match node's implementation: https://github.com/nodejs/node/blob/3cbaabc4622df1b4009b9d026a1a970bdbae6e89/lib/internal/errors.js#L90-L133

cspotcode commented 2 years ago

Here is the node PR which changed its behavior: https://github.com/nodejs/node/pull/39182/