Skip to content

[BUG] npm outdated --json only lists a single entry for each package, producing less than without --json #6630

@TomStrepsil

Description

@TomStrepsil

Is there an existing issue for this?

  • I have searched the existing issues

This issue exists in the latest npm version

  • I am using the latest npm

Current Behavior

npm outdated in a project with workspaces can produce:

Package    Current    Wanted    Latest  Location           Depended by
xxx        1.0.00     1.0.00    1.1.00  node_modules/xxx   workspace1@npm:workspace1name@1.0.0
xxx        1.0.00     1.0.00    1.1.00  node_modules/xxx   workspace2@npm:workspace2name@1.0.0
xxx        1.0.00     1.0.00    1.1.00  node_modules/xxx   rootProject

...but when doing npm outdated --json, only details of the last dependent is shown:

{
  "xxx": {
    "current": "1.0.00",
    "wanted": "1.0.00",
    "latest": "1.1.00",
    "dependent": "rootProject",
    "location": "../rootProject/node_modules/xxx"
  }

Hence, seems like whatever reducer is producing the json is flattening to the last dependent, rather than providing a full list that would be available without --json.

To get around this, one must call npm outdated --json --workspace=xxx for each workspace, then consolidate the results. Presumably the --json option shouldn't produce less information than the tabular format?

Expected Behavior

Either the output needs to include an array per dependency:

{
  "xxx": [
    {
      "current": "1.0.00",
      "wanted": "1.0.00",
      "latest": "1.1.00",
      "dependent": "workspace1",
      "location": "../rootProject/node_modules/xxx"
    },
    {
      "current": "1.0.00",
      "wanted": "1.0.00",
      "latest": "1.1.00",
      "dependent": "workspace2",
      "location": "../rootProject/node_modules/xxx"
    },
    {
      "current": "1.0.00",
      "wanted": "1.0.00",
      "latest": "1.1.00",
      "dependent": "rootProject",
      "location": "../rootProject/node_modules/xxx"
    }
  ]
}

..or if "dependent" isn't needed in the output as a key, just key a map by dependent:

{
  "xxx": {
    "rootProject": {
       "current": "1.0.00",
       "wanted": "1.0.00",
       "latest": "1.1.00",
       "location": "../rootProject/node_modules/xxx"
    },
    "workspace1": {
       "current": "1.0.00",
       "wanted": "1.0.00",
       "latest": "1.1.00",
       "location": "../rootProject/node_modules/xxx"
    },
    "workspace2": {
       "current": "1.0.00",
       "wanted": "1.0.00",
       "latest": "1.1.00",
       "location": "../rootProject/node_modules/xxx"
    }
  }
}

Steps To Reproduce

npm outdated --json with a project that includes workspaces (with or without the --workspaces flag)

Environment

  • npm: 9.5.0
  • Node.js: v18.16.1
  • OS Name: Ventura 13.4.1
  • System Model Name: Macbook Pro

Metadata

Metadata

Assignees

Labels

Bugthing that needs fixingconfig:displayIssues dealing with display of data to terminal

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions