Skip to content

doc: stream.pipeline documentation is misleading WRT 'Iterable' as a valid first argument. #36437

@rbuckton

Description

@rbuckton

📗 API Reference Docs Problem

  • Version: v14.7.0
  • Platform: Windows 10 (64-bit)
  • Subsystem: stream

Location

Affected URL(s):

Description

The documentation states the following:

image

This is misleading, as an Array is a valid Iterable, yet using an Array as the first argument with multiple streams results in an error:

const stream = require("stream");

async function main() {
    await stream.pipeline(
        /*stream1*/ [1, 2, 3],
        /*stream2*/ new stream.PassThrough({ objectMode: true }),
        /*callback*/ () => { console.log("done"); });
}

main().catch(e => console.error(e));

Output:

TypeError [ERR_INVALID_ARG_TYPE]: The "source" argument must be of type function or an instance of Stream, Iterable, or AsyncIterable. Received type number (1)
    at Function.pipeline (internal/streams/pipeline.js:199:15)
    at main (D:\dev\scratch\pipeline\index.js:4:18)
    at Object.<anonymous> (D:\dev\scratch\pipeline\index.js:10:1)
    at Module._compile (internal/modules/cjs/loader.js:1256:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1277:10)
    at Module.load (internal/modules/cjs/loader.js:1105:32)
    at Function.Module._load (internal/modules/cjs/loader.js:967:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
    at internal/main/run_main_module.js:17:47 {
  code: 'ERR_INVALID_ARG_TYPE'
}

However, if you change [1, 2, 3] to [1, 2, 3].values() then the call evaluates successfully. It seems like stream.pipeline sees the first argument is an Array and always picks stream.pipeline(streams, callback), even if there is a destination and may be one or more transforms.

The way the parameters are represented is also confusing. It looks like they are sorted alphabetically rather than based on the "overload" being called, so the "Returns:" bullet points don't make much sense.


  • I would like to work on this issue and submit a pull request.

Metadata

Metadata

Assignees

No one assigned

    Labels

    docIssues and PRs related to the documentations.good first issueIssues that are suitable for first-time contributors.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