Skip to content

Commit

Permalink
nodejsLockUtils: fix computing parent path for workspace packages
Browse files Browse the repository at this point in the history
  • Loading branch information
DavHau authored and mergify[bot] committed Aug 1, 2024
1 parent 64fbb0f commit 3fd4c14
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 23 deletions.
19 changes: 12 additions & 7 deletions lib/internal/nodejsLockUtils.nix
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
{lib, ...}: let
# path = node_modules/@org/lib/node_modules/bar
stripPath = path: let
split = lib.splitString "node_modules/" path; # = [ "@org/lib" "bar" ]
suffix = "node_modules/${lib.last split}"; # = "node_modules/bar"
nextPath = lib.removeSuffix suffix path; # = "node_modules/@org/lib/node_modules/bar";
parentPath = path: let
# noPackages = lib.removePrefix "packages/" path;
packages = lib.splitString "node_modules/" path; # = [ "@org/lib" "bar" ]
nextPath = lib.concatStringsSep "node_modules/" (lib.init packages);
in
lib.removeSuffix "/" nextPath;
lib.removeSuffix "/" (
if path == nextPath
then ""
else nextPath
);

findEntry =
# = "attrs"
Expand All @@ -22,7 +26,8 @@
searchPath
else if currentPath == ""
then throw "${search} not found in package-lock.json."
else findEntry packageLock (stripPath currentPath) search;
# if the package cannot be found as a sub-dependency, check the parent
else findEntry packageLock (parentPath currentPath) search;
in {
inherit findEntry stripPath;
inherit findEntry parentPath;
}
29 changes: 13 additions & 16 deletions tests/nix-unit/test_nodejs_lockutils/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -4,35 +4,32 @@
nodejsLockUtils ? import ../../../lib/internal/nodejsLockUtils.nix {inherit lib;},
}: {
# test the path strip function
test_nodejsLockUtils_stripPath_simple = let
nextPath = nodejsLockUtils.stripPath "node_modules/@org/lib/node_modules/bar";
in {
expr = nextPath;
test_nodejsLockUtils_parentPath_simple = {
expr = nodejsLockUtils.parentPath "node_modules/@org/lib/node_modules/bar";
expected = "node_modules/@org/lib";
};

test_nodejsLockUtils_stripPath_root = let
nextPath = nodejsLockUtils.stripPath "node_modules/bar";
in {
expr = nextPath;
test_nodejsLockUtils_parentPath_root = {
expr = nodejsLockUtils.parentPath "node_modules/bar";
# The root
expected = "";
};

test_nodejsLockUtils_stripPath_empty = let
nextPath = nodejsLockUtils.stripPath "";
in {
expr = nextPath;
test_nodejsLockUtils_parentPath_empty = {
expr = nodejsLockUtils.parentPath "";
expected = "";
};

test_nodejsLockUtils_stripPath_complex = let
nextPath = nodejsLockUtils.stripPath "node_modules/@org/lib/node_modules/bar/node_modules/foo";
in {
expr = nextPath;
test_nodejsLockUtils_parentPath_complex = {
expr = nodejsLockUtils.parentPath "node_modules/@org/lib/node_modules/bar/node_modules/foo";
expected = "node_modules/@org/lib/node_modules/bar";
};

test_nodejsLockUtils_parentPath_local_package = {
expr = nodejsLockUtils.parentPath "packages/foo";
expected = "";
};

# test the resolve function
test_nodejsLockUtils_findEntry_argparse = let
plock = builtins.fromJSON (builtins.readFile ./package-lock.json);
Expand Down

0 comments on commit 3fd4c14

Please sign in to comment.