Skip to content

Can’t import stream promises API with ECMAScript Modules #35731

@alexewerlof

Description

@alexewerlof
  • Version:

v12.17.0 (current LTS)
v14.14.0 (LTS in a few days)

  • Platform:

Linux 5.4.0-51-generic

  • Subsystem:

'stream'

What steps will reproduce the bug?

The documentation says:

The stream/promises API provides an alternative set of asynchronous utility functions for streams that return Promise objects rather than using callbacks. The API is accessible via require('stream/promises') or require('stream').promises.

Which is fine. However, when using the ESM syntax it does not work like other APIs like 'fs' or 'dns':

import { promises as fsPromises } from 'fs' // no error thrown
import { promises as dnsPromises } from 'dns' // no error thrown
import { promises as streamPromises } from 'stream'
//       ^^^^^^^^
// SyntaxError: The requested module 'stream' does not provide an export named 'promises'
//     at ModuleJob._instantiate (internal/modules/esm/module_job.js:98:21)
//     at async ModuleJob.run (internal/modules/esm/module_job.js:143:5)
//     at async Loader.import (internal/modules/esm/loader.js:165:24)
//     at async Object.loadESM (internal/process/esm_loader.js:68:5)

What is the expected behavior?

It should work just like 'fs' or 'dns' promises.

This issue is similar to #21014 or the fix in #32953

What do you see instead?

Throws a SyntaxError.

Additional information

I have made a repo to demonstrate the issue. There are various syntaxes, but 2.js shows the issue pretty well.

Metadata

Metadata

Assignees

No one assigned

    Labels

    esmIssues and PRs related to the ECMAScript Modules implementation.streamIssues and PRs related to the stream subsystem.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions