Skip to content

fix: key stage download --json output by package name#9380

Merged
reggi merged 1 commit into
latestfrom
fix/stage-download-json-key
May 20, 2026
Merged

fix: key stage download --json output by package name#9380
reggi merged 1 commit into
latestfrom
fix/stage-download-json-key

Conversation

@reggi
Copy link
Copy Markdown
Contributor

@reggi reggi commented May 20, 2026

npm stage download <id> --json currently emits the package contents under a literal "undefined" key because logTar is called without a key option.

Before

{
  "undefined": {
    "name": "polo-meow-meow-meow",
    "version": "1.0.3",
    ...
  }
}

After

{
  "polo-meow-meow-meow": {
    "name": "polo-meow-meow-meow",
    "version": "1.0.3",
    ...
  }
}

This matches the JSON shape of npm publish --json and npm pack --json.

Background

The key == null fallback in lib/utils/tar.js (that would have rendered a bare object when no key was passed) was removed from latest in #9247 ("fix: sync json output of pack and publish") as a BREAKING CHANGE. Per that PR:

BREAKING CHANGE: the --json output of npm pack and npm publish have changed. They are now always consistent, and in the same format.

Previously, npm pack would output an array of entries and npm publish an object. The npm publish object also changed forms depending on if workspaces were being published.

Now, the output is always an object with the package name as the top level index.

When #9201 (npm stage) landed, it added a new logTar caller in lib/commands/stage/download.js that did not pass a key, silently violating the v12 contract established in #9247 and producing the "undefined" wrapper. This PR brings the new caller into compliance.

Repro

npm stage download <stage-id> --json

A follow-up backports this to release/v11 for consistent output across branches: #9381.

`npm stage download <id> --json` was emitting the package contents
under a literal "undefined" key because `logTar` is called without a
`key` option. Pass `pkgContents.name` so the JSON output is keyed by
the package name, matching `npm publish --json` and `npm pack --json`.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@reggi reggi requested review from a team as code owners May 20, 2026 18:30
@reggi reggi changed the title fix(stage): key download --json output by package name fix: key stage download --json output by package name May 20, 2026
@reggi reggi merged commit 2a13550 into latest May 20, 2026
22 checks passed
@reggi reggi deleted the fix/stage-download-json-key branch May 20, 2026 18:47
reggi added a commit that referenced this pull request May 20, 2026
Backports #9380 to `release/v11` to keep `npm stage download --json`
output consistent across branches.

On `release/v11`, the `key == null` guard in `lib/utils/tar.js` was
emitting the bare object (no wrapper key). This change adds a key so the
output matches `latest` and aligns with `npm publish --json` / `npm pack
--json`.

### Before (on release/v11)

```json
{
  "name": "polo-meow-meow-meow",
  "version": "1.0.3",
  ...
}
```

### After

```json
{
  "polo-meow-meow-meow": {
    "name": "polo-meow-meow-meow",
    "version": "1.0.3",
    ...
  }
}
```

### Background

The `key == null` fallback in `lib/utils/tar.js` (still present on
`release/v11`) was removed from `latest` in #9247 ("fix: sync json
output of pack and publish") as a `BREAKING CHANGE`. Per that PR:

> BREAKING CHANGE: the --json output of `npm pack` and `npm publish`
have changed. They are now always consistent, and in the same format.
>
> Previously, `npm pack` would output an array of entries and `npm
publish` an object. The `npm publish` object also changed forms
depending on if workspaces were being published.
>
> Now, the output is always an object with the package name as the top
level index.

That breaking change was intentionally not backported to v11
(maintenance branch), so the fallback still exists here. This backport
keeps the call-site contract aligned across branches so consumers get
the same `{ "<pkg>": {...} }` shape on both.

Clean cherry-pick of 9f7834d from #9380.

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants