npmInstallHook: extract nodejsInstall{Manuals,Executables} (#336644)
This commit is contained in:
commit
3326d57216
@ -7,6 +7,8 @@
|
|||||||
, prefetch-npm-deps
|
, prefetch-npm-deps
|
||||||
, diffutils
|
, diffutils
|
||||||
, installShellFiles
|
, installShellFiles
|
||||||
|
, nodejsInstallManuals
|
||||||
|
, nodejsInstallExecutables
|
||||||
}:
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -39,9 +41,10 @@
|
|||||||
propagatedBuildInputs = [
|
propagatedBuildInputs = [
|
||||||
installShellFiles
|
installShellFiles
|
||||||
makeWrapper
|
makeWrapper
|
||||||
|
nodejsInstallManuals
|
||||||
|
nodejsInstallExecutables
|
||||||
];
|
];
|
||||||
substitutions = {
|
substitutions = {
|
||||||
hostNode = "${nodejs}/bin/node";
|
|
||||||
jq = "${jq}/bin/jq";
|
jq = "${jq}/bin/jq";
|
||||||
};
|
};
|
||||||
} ./npm-install-hook.sh;
|
} ./npm-install-hook.sh;
|
||||||
|
@ -14,31 +14,9 @@ npmInstallHook() {
|
|||||||
cp "${npmWorkspace-.}/$file" "$dest"
|
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[@]}")")
|
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
|
nodejsInstallExecutables "${npmWorkspace-.}/package.json"
|
||||||
# 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")
|
|
||||||
|
|
||||||
while IFS= read -r man; do
|
nodejsInstallManuals "${npmWorkspace-.}/package.json"
|
||||||
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")
|
|
||||||
|
|
||||||
local -r nodeModulesPath="$packageOut/node_modules"
|
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