translator v2 iface to accept only one project

This commit is contained in:
DavHau 2022-03-05 16:17:14 +07:00
parent 4828105acb
commit e7f65555cb
5 changed files with 65 additions and 137 deletions

View File

@ -563,30 +563,20 @@ let
(project: project.resolved)
projectsList;
# pure projects grouped by translator
projectsByTranslator =
l.groupBy
(proj: "${proj.subsystem}_${l.head proj.translators}")
projectsPureUnresolved;
# list of pure projects extended with 'dreamLock' attribute
projectsResolvedOnTheFly =
l.flatten
(l.mapAttrsToList
(translatorName: projects:
let
p = l.head projects;
translator = getTranslator p.subsystem p.translator;
dreamLocks =
translator.translate {
inherit projects source tree;
};
in
l.zipListsWith
(proj: dreamLock: proj // { inherit dreamLock; })
projects
dreamLocks)
projectsByTranslator);
l.forEach projectsPureUnresolved
(proj:
let
translator = getTranslator proj.subsystem proj.translator;
in
proj
// {
dreamLock = translator.translate {
inherit source tree;
project = proj;
};
});
resolvedProjects = projectsResolved ++ projectsResolvedOnTheFly;

View File

@ -136,6 +136,9 @@ let
pathSplit = l.splitString "/" cleanPath;
dirSplit = l.init pathSplit;
leaf = l.last pathSplit;
error = throw ''
Failed while trying to navigate to ${path} from ${fullPath'}
'';
dirAttrPath =
l.init
@ -146,6 +149,8 @@ let
dir =
if (l.length dirSplit == 0) || dirAttrPath == [ "" ] then
self
else if ! l.hasAttrByPath dirAttrPath directories then
error
else
l.getAttrFromPath dirAttrPath directories;
@ -157,7 +162,7 @@ let
else if dir ? files."${leaf}" then
dir.files."${leaf}"
else
throw "could not find file or directory ${path} in ${fullPath'}";
error;
self =
{

View File

@ -23,27 +23,24 @@ let
ensureTranslatorV2 = translator:
let
version = translator.version or 1;
cleanedArgs = args: l.removeAttrs args [ "projets" "tree" ];
cleanedArgs = args: l.removeAttrs args [ "project" "tree" ];
upgradedTranslator =
translator // {
translate = args:
l.map
(proj:
let
dreamLock =
translator.translate
((cleanedArgs args) // {
source = "${args.source}/${proj.relPath}";
name = proj.name;
});
in
dreamLock // {
_generic = dreamLock._generic // {
location = proj.relPath;
};
})
args.projects;
let
dreamLock =
translator.translate
((cleanedArgs args) // {
source = "${args.source}/${args.project.relPath}";
name = args.project.name;
});
in
dreamLock // {
_generic = dreamLock._generic // {
location = args.project.relPath;
};
};
};
in
if version == 2 then
@ -59,16 +56,15 @@ let
downgradeTranslator =
translator // {
translate = args:
l.head
(translator.translate (args // {
inherit (args) source;
tree = dlib.prepareSourceTree { inherit (args) source; };
projects = [{
name = translator.projectName { inherit (args) source; };
relPath = "";
subsystem = translator.subsystem;
}];
}));
translator.translate (args // {
inherit (args) source;
tree = dlib.prepareSourceTree { inherit (args) source; };
project = {
name = translator.projectName { inherit (args) source; };
relPath = "";
subsystem = translator.subsystem;
};
});
};
in
if version == 1 then

View File

@ -8,6 +8,9 @@ let
l = lib // builtins;
nodejsUtils = import ../../utils.nix { inherit lib; };
getPackageLock = tree: project:
nodejsUtils.getWorkspaceLockFile tree project "package-lock.json";
translate =
{
translatorName,
@ -15,52 +18,11 @@ let
...
}:
{
projects,
project,
source,
tree,
name,
noDev,
nodejs,
...
}@args:
let
getPackageLock = project:
nodejsUtils.getWorkspaceLockFile tree project "package-lock.json";
allProjectsTranslated =
l.map
(proj:
translateOne {
inherit translatorName utils noDev nodejs;
name = proj.name;
source = "${args.source}/${proj.relPath}";
tree = tree.getNodeFromPath proj.relPath;
packageLock = (getPackageLock proj).jsonContent or null;
relPath = proj.relPath;
workspaces = proj.subsystemInfo.workspaces or [];
})
projects;
in
allProjectsTranslated;
translateOne =
{
translatorName,
utils,
source,
tree,
# subsystem specific
packageLock,
relPath,
workspaces,
# translator args
name,
noDev,
nodejs,
...
@ -70,6 +32,13 @@ let
b = builtins;
dev = ! noDev;
name = project.name;
tree = args.tree.getNodeFromPath project.relPath;
relPath = project.relPath;
source = "${args.source}/${relPath}";
workspaces = project.subsystemInfo.workspaces or [];
packageLock = (getPackageLock args.tree project).jsonContent or null;
packageJson =
(tree.getNodeFromPath "package.json").jsonContent;

View File

@ -6,60 +6,23 @@
let
l = lib // builtins;
nodejsUtils = import ../../utils.nix { inherit lib; };
parser = import ./parser.nix { inherit lib; };
translate = {
translatorName,
utils,
...
}:
{
projects,
source,
tree,
getYarnLock = tree: proj:
tree.getNodeFromPath "${proj.relPath}/yarn.lock";
name,
noDev,
nodejs,
...
}@args: let
parser = import ./parser.nix { inherit lib; };
getYarnLock = proj:
tree.getNodeFromPath "${proj.relPath}/yarn.lock";
allProjectsTranslated =
l.map
(proj:
translateOne {
inherit translatorName utils noDev nodejs;
name = proj.name;
source = "${args.source}/${proj.relPath}";
tree = tree.getNodeFromPath proj.relPath;
yarnLock =
parser.parse (getYarnLock proj).content;
relPath = proj.relPath;
workspaces = proj.subsystemInfo.workspaces or [];
})
projects;
in
allProjectsTranslated;
translateOne =
translate =
{
translatorName,
utils,
...
}:
{
project,
source,
tree,
# subsystem specific
yarnLock,
relPath,
workspaces,
# extraArgs
name,
nodejs,
noDev,
...
@ -68,6 +31,11 @@ let
let
b = builtins;
dev = ! noDev;
name = project.name;
relPath = project.relPath;
tree = args.tree.getNodeFromPath project.relPath;
workspaces = project.subsystemInfo.workspaces or [];
yarnLock = parser.parse (tree.getNodeFromPath "yarn.lock").content;
defaultPackage =
if name != "{automatic}" then