1
- const log = require ( "@ui5/logger" ) . getLogger ( "builder:processors:versionInfogenerator " ) ;
1
+ const log = require ( "@ui5/logger" ) . getLogger ( "builder:processors:versionInfoGenerator " ) ;
2
2
const resourceFactory = require ( "@ui5/fs" ) . resourceFactory ;
3
3
const path = require ( "path" ) ;
4
4
@@ -119,7 +119,7 @@ const resolveTransitiveDependencies = (libraryInfosMap) => {
119
119
const keys = [ ...libraryInfosMap . keys ( ) ] ;
120
120
keys . sort ( ) ;
121
121
const resolvedCache = new Map ( ) ;
122
- keys . forEach ( ( libName ) => {
122
+ keys . forEach ( ( libName ) => { // e.g. sap.ui.documentation
123
123
resolve ( libName , libraryInfosMap , resolvedCache ) ;
124
124
} ) ;
125
125
} ;
@@ -146,31 +146,63 @@ const merge = (existingEntry, newLibs) => {
146
146
*
147
147
* @param {string } libName
148
148
* @param {Map<string, DependencyInfos> } libraryInfosMap
149
- * @param {Map<string, DependencyInfos> } resolvedCache
149
+ * @param {Map<string, DependencyInfos> } alreadyProcessed
150
150
* @returns {DependencyInfos } resolved dependencies
151
151
*/
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 ) ;
156
156
}
157
157
const manifestHint = libraryInfosMap . get ( libName ) ;
158
- let resolved = manifestHint ;
158
+ let mergedDependencies = manifestHint ;
159
+ // cache
160
+ alreadyProcessed . set ( libName , mergedDependencies ) ;
159
161
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 , { } ) ;
162
164
return { } ;
163
165
}
164
166
const keys = Object . keys ( manifestHint ) ;
165
167
keys . forEach ( ( childLibName ) => {
166
- const childResolved = resolve ( childLibName , libraryInfosMap , resolvedCache ) ;
168
+ const childResolved = resolve ( childLibName , libraryInfosMap , alreadyProcessed , isLazy ) ;
167
169
// 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
169
200
} ) ;
170
201
171
- libraryInfosMap . set ( libName , resolved ) ;
172
- resolvedCache . set ( libName , resolved ) ;
173
- return resolved ;
202
+ libraryInfosMap . set ( libName , mergedDependencies ) ;
203
+
204
+
205
+ return mergedDependencies ;
174
206
} ;
175
207
176
208
/**
@@ -202,12 +234,14 @@ const addManifestHints = (result, libs) => {
202
234
203
235
const processLibraryInfo = async ( libraryInfo , dependencyInfoMap , embeddedInfoMap ) => {
204
236
const manifestInfo = await processManifest ( libraryInfo . mainManifest ) ;
237
+ // gather shallow library information
205
238
dependencyInfoMap . set ( libraryInfo . name , manifestInfo . libs ) ;
206
- const embeds = manifestInfo . embeds ;
239
+ const embeds = manifestInfo . embeds ; // sdk
207
240
// filter
208
241
const embeddedPaths = embeds . map ( ( embed ) => {
209
242
return getManifestPath ( libraryInfo . mainManifest . getPath ( ) , embed ) ;
210
243
} ) ;
244
+ // sap.ui.documentation.sdk
211
245
const relevantManifests = libraryInfo . manifestResources . filter ( ( manifestResource ) => {
212
246
return embeddedPaths . includes ( manifestResource . getPath ( ) ) ;
213
247
} ) ;
0 commit comments