File pnpm.spec of Package pnpm

#
# spec file for package pnpm
#
# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


# to avoid empty debugfiles error on some distros
%global debug_package %{nil}
# The internal dependency generator adds lots of unnecessary Requires:
# and strange Provides: own(foo) because it slurps in all package.json
%global __nodejs_provides %{nil}
%global __nodejs_requires %{nil}
Name:           pnpm
Version:        10.13.1
Release:        0
Summary:        Fast, disk space efficient package manager
License:        MIT
Group:          Development/Languages/Other
URL:            https://pnpm.io/
Source:         https://registry.npmjs.org/%{name}/-/%{name}-%{version}.tgz
BuildRequires:  fdupes
BuildRequires:  nodejs-devel >= 18
BuildRequires:  nodejs-packaging
Requires:       bash
Requires:       nodejs(abi) >= 18
Recommends:     python3
Provides:       npm(%{name}) = %{version}
BuildArch:      noarch

%description
pnpm is a package manager for node.js

%package bash-completion
Summary:        Bash completion for %{name}
Group:          System/Shells
Requires:       bash-completion
Supplements:    (%{name} and bash-completion)

%description bash-completion
Bash command line completion support for %{name}.

%package zsh-completion
Summary:        Zsh completion for %{name}
Group:          System/Shells
Requires:       zsh
Supplements:    (%{name} and zsh)

%description zsh-completion
Zsh command line completion support for %{name}.

%package fish-completion
Summary:        Fish completion for %{name}
Group:          System/Shells
Requires:       fish
Supplements:    (%{name} and fish)

%description fish-completion
Fish command line completion support for %{name}.

%prep
%setup -q -n package

%build
# nothing to do

%install
%nodejs_install

# PATCH FILES

fix_executable() { chmod 775 "$1"; sed -i '1 s|^\(#!.*/\)env |\1|' "$1"; }
export -f fix_executable

# Patch hashbang in pnpm
sed -i -e 's|#!%{_bindir}/env node|#!%{_bindir}/node|' %{buildroot}%{nodejs_sitelib}/pnpm/bin/*

sed -i '1 s|^\(#!.*/\)env |\1|' %{buildroot}%{nodejs_sitelib}/pnpm/dist/node-gyp-bin/node-gyp

# Non-executable scripts
find %{buildroot}%{nodejs_sitelib}/pnpm/dist/node_modules -type f -path '*/bin/*' \
    -exec sh -c 'fix_executable {}' \;
fix_executable %{buildroot}%{nodejs_sitelib}/pnpm/dist/node_modules/glob/dist/esm/bin.mjs

# Remove unnecessary shebangs
sed -i '1!b;\|#!/|d' %{buildroot}%{nodejs_sitelib}/pnpm/dist/node_modules/glob/dist/esm/bin.d.mts
find %{buildroot}%{nodejs_sitelib}/pnpm/dist/node_modules/node-gyp/gyp -type f \
    -exec sed -i '1!b;\|#!/|d' {} \;

# SHELL COMPLETION

mkdir -p %{buildroot}%{_datadir}/bash-completion/completions
%{buildroot}%{_bindir}/pnpm completion bash > %{buildroot}%{_datadir}/bash-completion/completions/%{name}
mkdir -p %{buildroot}%{_datadir}/zsh/site-functions
%{buildroot}%{_bindir}/pnpm completion zsh > %{buildroot}%{_datadir}/zsh/site-functions/_%{name}
mkdir -p %{buildroot}%{_datadir}/fish/vendor_completions.d
%{buildroot}%{_bindir}/pnpm completion fish > %{buildroot}%{_datadir}/fish/vendor_completions.d/%{name}.fish

# CLEANUP

# Hidden files
find %{buildroot}%{nodejs_sitelib}/pnpm/dist/node_modules -type f -name '.*' -delete

# Hidden directories
find %{buildroot}%{nodejs_sitelib}/pnpm/dist/node_modules -type d -name '.*' -print0 | xargs -0 -n1 rm -rvf

# Non-Linux files
rm -rf %{buildroot}%{nodejs_sitelib}/pnpm/dist/vendor
rm -f %{buildroot}%{nodejs_sitelib}/pnpm/dist/reflink.{darwin,win32}*.node
rm -f %{buildroot}%{nodejs_sitelib}/pnpm/dist/node_modules/node-gyp/macOS_*
find %{buildroot}%{nodejs_sitelib}/pnpm/dist -type f \
    \( -name '*.cmd' -o -name '*.bat' -o -name '*.ps1' \) -delete

%fdupes %{buildroot}

%check

%files
%license LICENSE
%doc README.md
%{_bindir}/pnp{m,x}
%{nodejs_sitelib}

%files bash-completion
%{_datadir}/bash-completion/

%files zsh-completion
%{_datadir}/zsh/

%files fish-completion
%{_datadir}/fish/

%changelog
openSUSE Build Service is sponsored by