Skip to content

Commit

Permalink
[INTERNAL][WIP] VersionInfo: with manifest infos
Browse files Browse the repository at this point in the history
added TODOs
  • Loading branch information
tobiasso85 committed Dec 23, 2020
1 parent 367729f commit 61cfd7c
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 17 deletions.
66 changes: 50 additions & 16 deletions lib/processors/versionInfoGenerator.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const log = require("@ui5/logger").getLogger("builder:processors:versionInfogenerator");
const log = require("@ui5/logger").getLogger("builder:processors:versionInfoGenerator");
const resourceFactory = require("@ui5/fs").resourceFactory;
const path = require("path");

Expand Down Expand Up @@ -119,7 +119,7 @@ const resolveTransitiveDependencies = (libraryInfosMap) => {
const keys = [...libraryInfosMap.keys()];
keys.sort();
const resolvedCache = new Map();
keys.forEach((libName) => {
keys.forEach((libName) => { // e.g. sap.ui.documentation
resolve(libName, libraryInfosMap, resolvedCache);
});
};
Expand All @@ -146,31 +146,63 @@ const merge = (existingEntry, newLibs) => {
*
* @param {string} libName
* @param {Map<string, DependencyInfos>} libraryInfosMap
* @param {Map<string, DependencyInfos>} resolvedCache
* @param {Map<string, DependencyInfos>} alreadyProcessed
* @returns {DependencyInfos} resolved dependencies
*/
const resolve = (libName, libraryInfosMap, resolvedCache) => {
// check cache first
if ( resolvedCache.has(libName)) {
return resolvedCache.get(libName);
const resolve = (libName, libraryInfosMap, alreadyProcessed, isLazy) => {
// check already processed first
if ( alreadyProcessed.has(libName)) {
return alreadyProcessed.get(libName);
}
const manifestHint = libraryInfosMap.get(libName);
let resolved = manifestHint;
let mergedDependencies = manifestHint;
// cache
alreadyProcessed.set(libName, mergedDependencies);
if (!manifestHint) {
log.error(`no manifest information in dependencies for ${libName}`);
resolvedCache.set(libName, {});
log.error(`no manifest information in dependencies for ${libName}`); // TODO check
alreadyProcessed.set(libName, {});
return {};
}
const keys = Object.keys(manifestHint);
keys.forEach((childLibName) => {
const childResolved = resolve(childLibName, libraryInfosMap, resolvedCache);
const childResolved = resolve(childLibName, libraryInfosMap, alreadyProcessed, isLazy);
// set a copy of the resolved libraries to avoid modifying it while iterating (recursively)
resolved = merge(resolved, clone(childResolved));
mergedDependencies = merge(mergedDependencies, clone(childResolved), isLazy);
// TODO add childResolved to resolved
// TODO check cacles


// TODO lib a (lazy) --> all its dependencies must be lazy
// input
// a -> b (lazy) -> c
// output
// a -> b (lazy), c (lazy)


// a -> c, b (lazy)
// b -> c (lazy)


// a -> c, b (lazy)


// a -> c (lazy), b (lazy)
// b -> c

// kette gewinnt lazy --> alle dependencies von einer lazy dep sind auch lazy
// merge gewinnt eager


// TODO put this into a classes to better structure the code
// TODO instead of using a "global" map, have a Dependency as a class with a name
// and the functionality to resolve its dependencies
// ManifestHints -> resolve
});

libraryInfosMap.set(libName, resolved);
resolvedCache.set(libName, resolved);
return resolved;
libraryInfosMap.set(libName, mergedDependencies);


return mergedDependencies;
};

/**
Expand Down Expand Up @@ -202,12 +234,14 @@ const addManifestHints = (result, libs) => {

const processLibraryInfo = async (libraryInfo, dependencyInfoMap, embeddedInfoMap) => {
const manifestInfo = await processManifest(libraryInfo.mainManifest);
// gather shallow library information
dependencyInfoMap.set(libraryInfo.name, manifestInfo.libs);
const embeds = manifestInfo.embeds;
const embeds = manifestInfo.embeds; // sdk
// filter
const embeddedPaths = embeds.map((embed) => {
return getManifestPath(libraryInfo.mainManifest.getPath(), embed);
});
// sap.ui.documentation.sdk
const relevantManifests = libraryInfo.manifestResources.filter((manifestResource) => {
return embeddedPaths.includes(manifestResource.getPath());
});
Expand Down
2 changes: 1 addition & 1 deletion lib/tasks/generateVersionInfo.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ module.exports = async ({workspace, dependencies, options: {rootProject, pattern
return manifestResource.getPath() === `/resources/${namespace}/${MANIFEST_JSON}`;
});
return {
mainManifest,
mainManifest, // TODO rename libraryManifest
manifestResources,
name: dotLibResource._project.metadata.name,
version: dotLibResource._project.version
Expand Down

0 comments on commit 61cfd7c

Please sign in to comment.