Skip to content

--enable-source-maps causes "TypeError [ERR_INVALID_URL]" in esm/resolve #38790

Closed
@maxholman

Description

@maxholman
  • Version: v16.2.0
  • Platform: Linux

What steps will reproduce the bug?

// index.js
import { Something } from './something.js';
// something.js
// Empty file, does NOT export `Something`
// package.json
{
  "type": "module"
}

To reproduce:

  • node index.js (throws a SyntaxError, this is expected behavior 👍)
  • node --enable-source-maps index.js (throws TypeError [ERR_INVALID_URL], unexpected behavior 👎)

What is the expected behavior?

$ node index.js

import { Something } from './something.js';
         ^^^^^^^^^
SyntaxError: The requested module './something.js' does not provide an export named 'Something'
    at ModuleJob._instantiate (node:internal/modules/esm/module_job:121:21)
    at async ModuleJob.run (node:internal/modules/esm/module_job:171:5)
    at async Loader.import (node:internal/modules/esm/loader:178:24)
    at async Object.loadESM (node:internal/process/esm_loader:68:5)

What do you see instead?

$ node --enable-source-maps index.js

TypeError [ERR_INVALID_URL]: Invalid URL
    at __node_internal_captureLargerStackTrace (node:internal/errors:456:5)
    at __node_internal_addCodeToName (node:internal/errors:191:9)
    at new NodeError (node:internal/errors:363:5)
    at onParseError (node:internal/url:537:9)
    at new URL (node:internal/url:613:5)
    at getPackageScopeConfig (node:internal/modules/esm/resolve:177:24)
    at packageResolve (node:internal/modules/esm/resolve:657:25)
    at moduleResolve (node:internal/modules/esm/resolve:739:18)
    at Loader.defaultResolve [as _resolve] (node:internal/modules/esm/resolve:853:11)
    at Loader.resolve (node:internal/modules/esm/loader:89:40)
    at ModuleJob._instantiate (node:internal/modules/esm/module_job:137:31)
    at async ModuleJob.run (node:internal/modules/esm/module_job:171:5)
    at async Loader.import (node:internal/modules/esm/loader:178:24)
    at async Object.loadESM (node:internal/process/esm_loader:68:5) {
  input: './package.json',
  code: 'ERR_INVALID_URL'

Additional information

A cursory review tracked this to ModuleJob._instantiate in esm/module_job.js.

The code seems to expect a full path as the first element in the array, but when --enable-source-maps is on, the stack does not have this path.

As a result, the full error message is passed down into esm/resolve instead of a pathname, resulting in an Invalid URL.

Metadata

Metadata

Assignees

No one assigned

    Labels

    confirmed-bugIssues with confirmed bugs.source mapsIssues and PRs related to source map support.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions