1- const log = require ( "@ui5/logger" ) . getLogger ( "builder:processors:versionInfogenerator " ) ;
1+ const log = require ( "@ui5/logger" ) . getLogger ( "builder:processors:versionInfoGenerator " ) ;
22const resourceFactory = require ( "@ui5/fs" ) . resourceFactory ;
33const path = require ( "path" ) ;
44
@@ -119,7 +119,7 @@ const resolveTransitiveDependencies = (libraryInfosMap) => {
119119 const keys = [ ...libraryInfosMap . keys ( ) ] ;
120120 keys . sort ( ) ;
121121 const resolvedCache = new Map ( ) ;
122- keys . forEach ( ( libName ) => {
122+ keys . forEach ( ( libName ) => { // e.g. sap.ui.documentation
123123 resolve ( libName , libraryInfosMap , resolvedCache ) ;
124124 } ) ;
125125} ;
@@ -146,31 +146,63 @@ const merge = (existingEntry, newLibs) => {
146146 *
147147 * @param {string } libName
148148 * @param {Map<string, DependencyInfos> } libraryInfosMap
149- * @param {Map<string, DependencyInfos> } resolvedCache
149+ * @param {Map<string, DependencyInfos> } alreadyProcessed
150150 * @returns {DependencyInfos } resolved dependencies
151151 */
152- const resolve = ( libName , libraryInfosMap , resolvedCache ) => {
153- // check cache first
154- if ( resolvedCache . has ( libName ) ) {
155- return resolvedCache . get ( libName ) ;
152+ const resolve = ( libName , libraryInfosMap , alreadyProcessed , isLazy ) => {
153+ // check already processed first
154+ if ( alreadyProcessed . has ( libName ) ) {
155+ return alreadyProcessed . get ( libName ) ;
156156 }
157157 const manifestHint = libraryInfosMap . get ( libName ) ;
158- let resolved = manifestHint ;
158+ let mergedDependencies = manifestHint ;
159+ // cache
160+ alreadyProcessed . set ( libName , mergedDependencies ) ;
159161 if ( ! manifestHint ) {
160- log . error ( `no manifest information in dependencies for ${ libName } ` ) ;
161- resolvedCache . set ( libName , { } ) ;
162+ log . error ( `no manifest information in dependencies for ${ libName } ` ) ; // TODO check
163+ alreadyProcessed . set ( libName , { } ) ;
162164 return { } ;
163165 }
164166 const keys = Object . keys ( manifestHint ) ;
165167 keys . forEach ( ( childLibName ) => {
166- const childResolved = resolve ( childLibName , libraryInfosMap , resolvedCache ) ;
168+ const childResolved = resolve ( childLibName , libraryInfosMap , alreadyProcessed , isLazy ) ;
167169 // set a copy of the resolved libraries to avoid modifying it while iterating (recursively)
168- resolved = merge ( resolved , clone ( childResolved ) ) ;
170+ mergedDependencies = merge ( mergedDependencies , clone ( childResolved ) , isLazy ) ;
171+ // TODO add childResolved to resolved
172+ // TODO check cacles
173+
174+
175+ // TODO lib a (lazy) --> all its dependencies must be lazy
176+ // input
177+ // a -> b (lazy) -> c
178+ // output
179+ // a -> b (lazy), c (lazy)
180+
181+
182+ // a -> c, b (lazy)
183+ // b -> c (lazy)
184+
185+
186+ // a -> c, b (lazy)
187+
188+
189+ // a -> c (lazy), b (lazy)
190+ // b -> c
191+
192+ // kette gewinnt lazy --> alle dependencies von einer lazy dep sind auch lazy
193+ // merge gewinnt eager
194+
195+
196+ // TODO put this into a classes to better structure the code
197+ // TODO instead of using a "global" map, have a Dependency as a class with a name
198+ // and the functionality to resolve its dependencies
199+ // ManifestHints -> resolve
169200 } ) ;
170201
171- libraryInfosMap . set ( libName , resolved ) ;
172- resolvedCache . set ( libName , resolved ) ;
173- return resolved ;
202+ libraryInfosMap . set ( libName , mergedDependencies ) ;
203+
204+
205+ return mergedDependencies ;
174206} ;
175207
176208/**
@@ -202,12 +234,14 @@ const addManifestHints = (result, libs) => {
202234
203235const processLibraryInfo = async ( libraryInfo , dependencyInfoMap , embeddedInfoMap ) => {
204236 const manifestInfo = await processManifest ( libraryInfo . mainManifest ) ;
237+ // gather shallow library information
205238 dependencyInfoMap . set ( libraryInfo . name , manifestInfo . libs ) ;
206- const embeds = manifestInfo . embeds ;
239+ const embeds = manifestInfo . embeds ; // sdk
207240 // filter
208241 const embeddedPaths = embeds . map ( ( embed ) => {
209242 return getManifestPath ( libraryInfo . mainManifest . getPath ( ) , embed ) ;
210243 } ) ;
244+ // sap.ui.documentation.sdk
211245 const relevantManifests = libraryInfo . manifestResources . filter ( ( manifestResource ) => {
212246 return embeddedPaths . includes ( manifestResource . getPath ( ) ) ;
213247 } ) ;
0 commit comments