2024-07-20 19:56:59 -04:00
|
|
|
{
|
|
|
|
lib,
|
2025-01-20 12:34:07 -05:00
|
|
|
src,
|
|
|
|
npmDepsHash,
|
|
|
|
runtimeInputs,
|
2024-07-20 19:56:59 -04:00
|
|
|
buildNpmPackage,
|
2025-01-20 12:34:07 -05:00
|
|
|
meta,
|
2024-07-20 19:56:59 -04:00
|
|
|
makeWrapper,
|
|
|
|
nodejs_latest,
|
2024-11-15 13:39:20 -05:00
|
|
|
jq,
|
2024-07-20 19:56:59 -04:00
|
|
|
...
|
|
|
|
}: let
|
2025-03-07 16:51:01 -05:00
|
|
|
inherit (lib) boolToString concatMapStringsSep concatStringsSep mapAttrsToList;
|
|
|
|
inherit (builtins) fromJSON isBool readFile;
|
2024-07-20 19:56:59 -04:00
|
|
|
|
2024-11-23 19:35:01 -05:00
|
|
|
packageJSON = fromJSON (readFile "${src}/package.json");
|
2025-03-07 16:51:01 -05:00
|
|
|
tsconfig = fromJSON (readFile ./config/tsconfig.base.json);
|
|
|
|
|
2025-01-20 12:34:07 -05:00
|
|
|
pname = packageJSON.name;
|
|
|
|
inherit (packageJSON) version;
|
2024-07-20 19:56:59 -04:00
|
|
|
in
|
2025-01-20 12:34:07 -05:00
|
|
|
buildNpmPackage {
|
|
|
|
inherit pname version src runtimeInputs npmDepsHash;
|
2024-11-15 13:39:20 -05:00
|
|
|
|
|
|
|
prePatch = ''
|
2025-03-07 16:51:01 -05:00
|
|
|
# Patch tsconfig
|
2024-11-15 13:39:20 -05:00
|
|
|
mv ./tsconfig.json ./project.json
|
2025-03-07 16:51:01 -05:00
|
|
|
sed 's/^ *\/\/.*//' ${./config/tsconfig.base.json} > ./base.json
|
2024-11-15 13:39:20 -05:00
|
|
|
${jq}/bin/jq -sr '.[0] * .[1] | del(.extends)' ./project.json ./base.json > ./tsconfig.json
|
|
|
|
rm base.json project.json
|
|
|
|
'';
|
2024-07-20 19:56:59 -04:00
|
|
|
|
|
|
|
nativeBuildInputs = [makeWrapper];
|
|
|
|
|
|
|
|
postInstall = ''
|
|
|
|
wrapProgram $out/bin/${pname} \
|
2024-11-30 03:44:34 -05:00
|
|
|
--prefix PATH : ${concatMapStringsSep ":" (p: p + "/bin") runtimeInputs}
|
2024-07-20 19:56:59 -04:00
|
|
|
'';
|
|
|
|
|
2025-03-07 16:51:01 -05:00
|
|
|
doCheck = true;
|
|
|
|
|
|
|
|
checkPhase = ''
|
|
|
|
runHook preCheck
|
|
|
|
|
|
|
|
npx tsc ${concatStringsSep " " (mapAttrsToList (n: v:
|
|
|
|
if n == "lib"
|
|
|
|
then concatMapStringsSep " " (x: "--lib ${x}") v
|
|
|
|
else "--${n} ${
|
|
|
|
if isBool v
|
|
|
|
then boolToString v
|
|
|
|
else toString v
|
|
|
|
}")
|
|
|
|
tsconfig.compilerOptions)} src/app.ts
|
|
|
|
|
|
|
|
runHook postCheck
|
|
|
|
'';
|
|
|
|
|
2024-07-20 19:56:59 -04:00
|
|
|
nodejs = nodejs_latest;
|
2025-01-20 12:34:07 -05:00
|
|
|
|
|
|
|
meta = {mainProgram = pname;} // meta;
|
2024-07-20 19:56:59 -04:00
|
|
|
}
|