Enforce explicit npm: prefix and improve error handling for missing packages
Summary
This PR enhances Devbox's npm package support by enforcing an explicit npm: prefix for npm packages, removing implicit transformation of scoped packages (e.g., @angular/cli no longer auto-transforms). It improves version parsing for npm-prefixed packages, refactors the parsing logic for better maintainability, and provides clearer error messages when npm packages are not found in Nixpkgs. Users now get actionable guidance, including a workaround to set npm's global prefix and install manually.
Partially fixes #2300
Changes Made
- Enforced explicit
npm:prefix inparsePackageInputandnewPackage. - Updated error handling in
initDefaultNamesfor user-friendly npm package not-found messages. - Refactored code to extract helper functions and consolidate logic.
- Updated tests to reflect new behavior.
How was it tested?
- Built the local Devbox binary and tested installation of valid npm packages (e.g.,
npm:lodash). - Attempted installation of non-existent npm packages (e.g.,
npm:@github/copilot) to verify improved error messages. - Ran unit tests to ensure no regressions.
- Verified that bare scoped packages (e.g.,
@angular/cli) are no longer transformed.
Community Contribution License
All community contributions in this pull request are licensed to the project maintainers under the terms of the Apache 2 License.
By creating this pull request, I represent that I have the right to license the contributions to the project maintainers under the Apache 2 License as stated in the Community Contribution License.