Hack in a package.yaml instead of package.json

json is just incredibly tedious to use for this, especially because of
lack of comments.

Upstream has been informed of this many times apparently, npm won't
change it. Just hack it downstream.

npm will never get better, will it...
This commit is contained in:
Tristan Daniël Maat 2022-08-05 17:23:01 +01:00
parent f9bd128a02
commit 594e9bcbfd
Signed by: tlater
GPG key ID: 49670FD774E43268
10 changed files with 446 additions and 108 deletions

View file

@ -5,7 +5,21 @@
}: let
inherit (pkgs.lib) cleanSource;
packageJson =
pkgs.runCommand "package.json" {
nativeBuildInputs = with pkgs; [yj];
src = "";
} ''
cat ${self}/package.yaml | yj > $out
'';
prePatch = ''
ln -s ${packageJson} package.json;
'';
node_modules_attrs = {
packageJson = "${packageJson}";
# Dependencies that should be available in the node build
buildInputs = with pkgs; [
pkg-config
@ -21,7 +35,7 @@
];
in {
package = pkgs.npmlock2nix.build {
inherit buildInputs node_modules_attrs;
inherit buildInputs prePatch node_modules_attrs;
src = cleanSource self;
@ -33,14 +47,22 @@ in {
};
shell = pkgs.npmlock2nix.shell {
inherit buildInputs node_modules_attrs;
inherit buildInputs prePatch node_modules_attrs;
src = nix-filter {
root = self;
include = [
"package.json"
"package.yaml"
"package-lock.json"
];
};
shellHook = ''
if [ -e package.json ]; then
unlink package.json
fi
ln -s ${packageJson} package.json
'';
};
}

View file

@ -1,17 +0,0 @@
#!/usr/bin/env -S nix run 'github:clhodapp/nix-runner/32a984cfa14e740a34d14fad16fc479dec72bf07'
#!pure
#!package nixpkgs#bash
#!package nixpkgs#coreutils
#!package nixpkgs#direnv
#!package nixpkgs#git
#!package nixpkgs#nodejs-14_x
#!command bash
# shellcheck shell=bash
set -eu
cd "$(git rev-parse --show-toplevel)"
unlink node_modules
npm install --package-lock-only
rm -rf node_modules
direnv reload

20
nix/utilities/default.nix Normal file
View file

@ -0,0 +1,20 @@
{pkgs}: let
inherit (builtins) readFile;
update-lockfile = pkgs.writeShellApplication {
name = "update-lockfile";
runtimeInputs = with pkgs; [
git
yj
nodejs-14_x
direnv
nodePackages.npm-check-updates
];
text = readFile ./update-lockfile;
};
in {
update-lockfile = {
type = "app";
program = "${update-lockfile}/bin/update-lockfile";
};
}

View file

@ -0,0 +1,25 @@
#!/usr/bin/env bash
set -eu
cd "$(git rev-parse --show-toplevel)"
if [ -L node_modules ]; then
unlink node_modules
fi
if [ -L package.json ]; then
unlink package.json
fi
yj < package.yaml > package.json
if [ "${1}" == "--ignore-semver" ]; then
npm-check-updates -u
fi
npm install --package-lock-only
rm -rf node_modules
rm package.json
direnv reload