mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-25 16:33:15 +00:00
npmHooks.npmInstallHook: extract npmInstall{Manuals,Executables}
This commit is contained in:
parent
c1c478cd72
commit
80a2825733
@ -7,6 +7,8 @@
|
||||
, prefetch-npm-deps
|
||||
, diffutils
|
||||
, installShellFiles
|
||||
, nodejsInstallManuals
|
||||
, nodejsInstallExecutables
|
||||
}:
|
||||
|
||||
{
|
||||
@ -39,9 +41,10 @@
|
||||
propagatedBuildInputs = [
|
||||
installShellFiles
|
||||
makeWrapper
|
||||
nodejsInstallManuals
|
||||
nodejsInstallExecutables
|
||||
];
|
||||
substitutions = {
|
||||
hostNode = "${nodejs}/bin/node";
|
||||
jq = "${jq}/bin/jq";
|
||||
};
|
||||
} ./npm-install-hook.sh;
|
||||
|
@ -14,31 +14,9 @@ npmInstallHook() {
|
||||
cp "${npmWorkspace-.}/$file" "$dest"
|
||||
done < <(@jq@ --raw-output '.[0].files | map(.path | select(. | startswith("node_modules/") | not)) | join("\n")' <<< "$(npm_config_cache="$HOME/.npm" npm pack --json --dry-run --loglevel=warn --no-foreground-scripts ${npmWorkspace+--workspace=$npmWorkspace} $npmPackFlags "${npmPackFlagsArray[@]}" $npmFlags "${npmFlagsArray[@]}")")
|
||||
|
||||
# Based on code from Python's buildPythonPackage wrap.sh script, for
|
||||
# supporting both the case when makeWrapperArgs is an array and a
|
||||
# IFS-separated string.
|
||||
#
|
||||
# TODO: remove the string branch when __structuredAttrs are used.
|
||||
if [[ "${makeWrapperArgs+defined}" == "defined" && "$(declare -p makeWrapperArgs)" =~ ^'declare -a makeWrapperArgs=' ]]; then
|
||||
local -a user_args=("${makeWrapperArgs[@]}")
|
||||
else
|
||||
local -a user_args="(${makeWrapperArgs:-})"
|
||||
fi
|
||||
while IFS=" " read -ra bin; do
|
||||
mkdir -p "$out/bin"
|
||||
makeWrapper @hostNode@ "$out/bin/${bin[0]}" --add-flags "$packageOut/${bin[1]}" "${user_args[@]}"
|
||||
done < <(@jq@ --raw-output '(.bin | type) as $typ | if $typ == "string" then
|
||||
.name + " " + .bin
|
||||
elif $typ == "object" then .bin | to_entries | map(.key + " " + .value) | join("\n")
|
||||
elif $typ == "null" then empty
|
||||
else "invalid type " + $typ | halt_error end' "${npmWorkspace-.}/package.json")
|
||||
nodejsInstallExecutables "${npmWorkspace-.}/package.json"
|
||||
|
||||
while IFS= read -r man; do
|
||||
installManPage "$packageOut/$man"
|
||||
done < <(@jq@ --raw-output '(.man | type) as $typ | if $typ == "string" then .man
|
||||
elif $typ == "list" then .man | join("\n")
|
||||
elif $typ == "null" then empty
|
||||
else "invalid type " + $typ | halt_error end' "${npmWorkspace-.}/package.json")
|
||||
nodejsInstallManuals "${npmWorkspace-.}/package.json"
|
||||
|
||||
local -r nodeModulesPath="$packageOut/node_modules"
|
||||
|
||||
|
27
pkgs/by-name/no/nodejsInstallExecutables/hook.sh
Normal file
27
pkgs/by-name/no/nodejsInstallExecutables/hook.sh
Normal file
@ -0,0 +1,27 @@
|
||||
# shellcheck shell=bash
|
||||
|
||||
nodejsInstallExecutables() {
|
||||
local -r packageJson="${1-./package.json}"
|
||||
|
||||
local -r packageOut="$out/lib/node_modules/$(@jq@ --raw-output '.name' package.json)"
|
||||
|
||||
# Based on code from Python's buildPythonPackage wrap.sh script, for
|
||||
# supporting both the case when makeWrapperArgs is an array and a
|
||||
# IFS-separated string.
|
||||
#
|
||||
# TODO: remove the string branch when __structuredAttrs are used.
|
||||
if [[ "${makeWrapperArgs+defined}" == "defined" && "$(declare -p makeWrapperArgs)" =~ ^'declare -a makeWrapperArgs=' ]]; then
|
||||
local -a user_args=("${makeWrapperArgs[@]}")
|
||||
else
|
||||
local -a user_args="(${makeWrapperArgs:-})"
|
||||
fi
|
||||
|
||||
while IFS=" " read -ra bin; do
|
||||
mkdir -p "$out/bin"
|
||||
makeWrapper @hostNode@ "$out/bin/${bin[0]}" --add-flags "$packageOut/${bin[1]}" "${user_args[@]}"
|
||||
done < <(@jq@ --raw-output '(.bin | type) as $typ | if $typ == "string" then
|
||||
.name + " " + .bin
|
||||
elif $typ == "object" then .bin | to_entries | map(.key + " " + .value) | join("\n")
|
||||
elif $typ == "null" then empty
|
||||
else "invalid type " + $typ | halt_error end' "$packageJson")
|
||||
}
|
19
pkgs/by-name/no/nodejsInstallExecutables/package.nix
Normal file
19
pkgs/by-name/no/nodejsInstallExecutables/package.nix
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
makeSetupHook,
|
||||
installShellFiles,
|
||||
makeWrapper,
|
||||
nodejs,
|
||||
jq,
|
||||
}:
|
||||
|
||||
makeSetupHook {
|
||||
name = "nodejs-install-executables";
|
||||
propagatedBuildInputs = [
|
||||
installShellFiles
|
||||
makeWrapper
|
||||
];
|
||||
substitutions = {
|
||||
hostNode = "${nodejs}/bin/node";
|
||||
jq = "${jq}/bin/jq";
|
||||
};
|
||||
} ./hook.sh
|
14
pkgs/by-name/no/nodejsInstallManuals/hook.sh
Normal file
14
pkgs/by-name/no/nodejsInstallManuals/hook.sh
Normal file
@ -0,0 +1,14 @@
|
||||
# shellcheck shell=bash
|
||||
|
||||
nodejsInstallManuals() {
|
||||
local -r packageJson="${1-./package.json}"
|
||||
|
||||
local -r packageOut="$out/lib/node_modules/$(@jq@ --raw-output '.name' package.json)"
|
||||
|
||||
while IFS= read -r man; do
|
||||
installManPage "$packageOut/$man"
|
||||
done < <(@jq@ --raw-output '(.man | type) as $typ | if $typ == "string" then .man
|
||||
elif $typ == "list" then .man | join("\n")
|
||||
elif $typ == "null" then empty
|
||||
else "invalid type " + $typ | halt_error end' "$packageJson")
|
||||
}
|
13
pkgs/by-name/no/nodejsInstallManuals/package.nix
Normal file
13
pkgs/by-name/no/nodejsInstallManuals/package.nix
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
makeSetupHook,
|
||||
installShellFiles,
|
||||
jq,
|
||||
}:
|
||||
|
||||
makeSetupHook {
|
||||
name = "nodejs-install-manuals";
|
||||
propagatedBuildInputs = [ installShellFiles ];
|
||||
substitutions = {
|
||||
jq = "${jq}/bin/jq";
|
||||
};
|
||||
} ./hook.sh
|
Loading…
Reference in New Issue
Block a user