Skip to content

Commit 692ad69

Browse files
committed
[INTERNAL] Adapt to new ProjectGraph API
1 parent 251676a commit 692ad69

File tree

4 files changed

+67
-61
lines changed

4 files changed

+67
-61
lines changed

lib/middleware/MiddlewareManager.js

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ const hasOwn = Function.prototype.call.bind(Object.prototype.hasOwnProperty);
1717
* @memberof module:@ui5/server.middleware
1818
*/
1919
class MiddlewareManager {
20-
constructor({tree, resources, options = {
20+
constructor({graph, resources, options = {
2121
sendSAPTargetCSP: false,
2222
serveCSPReports: false
2323
}}) {
24-
if (!tree || !resources || !resources.all || !resources.rootProject || !resources.dependencies) {
24+
if (!graph || !resources || !resources.all || !resources.rootProject || !resources.dependencies) {
2525
throw new Error("[MiddlewareManager]: One or more mandatory parameters not provided");
2626
}
27-
this.tree = tree;
27+
this.graph = graph;
2828
this.resources = resources;
2929
this.options = options;
3030

@@ -44,15 +44,19 @@ class MiddlewareManager {
4444
}
4545

4646
async addMiddleware(configuredMiddlewareName, {
47-
wrapperCallback, mountPath = "/",
47+
customMiddleware, wrapperCallback, mountPath = "/",
4848
beforeMiddleware, afterMiddleware
4949
} = {}) {
50-
const middlewareInfo = middlewareRepository.getMiddleware(configuredMiddlewareName);
5150
let middlewareCallback;
52-
if (wrapperCallback) {
53-
middlewareCallback = wrapperCallback(middlewareInfo);
51+
if (customMiddleware) {
52+
middlewareCallback = customMiddleware;
5453
} else {
55-
middlewareCallback = middlewareInfo.middleware;
54+
const middlewareInfo = middlewareRepository.getMiddleware(configuredMiddlewareName);
55+
if (wrapperCallback) {
56+
middlewareCallback = wrapperCallback(middlewareInfo);
57+
} else {
58+
middlewareCallback = middlewareInfo.middleware;
59+
}
5660
}
5761

5862
let middlewareName = configuredMiddlewareName;
@@ -188,7 +192,7 @@ class MiddlewareManager {
188192
return versionInfoModule({
189193
resources,
190194
middlewareUtil,
191-
tree: this.tree
195+
graph: this.graph
192196
});
193197
};
194198
}
@@ -211,47 +215,46 @@ class MiddlewareManager {
211215
}
212216

213217
async addCustomMiddleware() {
214-
const project = this.tree;
215-
const projectCustomMiddleware = project.server && project.server.customMiddleware;
216-
if (!projectCustomMiddleware || projectCustomMiddleware.length === 0) {
218+
const project = this.graph.getRoot();
219+
const projectCustomMiddleware = project.getCustomMiddleware();
220+
if (!projectCustomMiddleware.length === 0) {
217221
return; // No custom middleware defined
218222
}
219223

220224
for (let i = 0; i < projectCustomMiddleware.length; i++) {
221225
const middlewareDef = projectCustomMiddleware[i];
222226
if (!middlewareDef.name) {
223-
throw new Error(`Missing name for custom middleware definition of project ${project.metadata.name} ` +
227+
throw new Error(`Missing name for custom middleware definition of project ${project.getName()} ` +
224228
`at index ${i}`);
225229
}
226230
if (middlewareDef.beforeMiddleware && middlewareDef.afterMiddleware) {
227231
throw new Error(
228-
`Custom middleware definition ${middlewareDef.name} of project ${project.metadata.name} ` +
232+
`Custom middleware definition ${middlewareDef.name} of project ${project.getName()} ` +
229233
`defines both "beforeMiddleware" and "afterMiddleware" parameters. Only one must be defined.`);
230234
}
231235
if (!middlewareDef.beforeMiddleware && !middlewareDef.afterMiddleware) {
232236
throw new Error(
233-
`Custom middleware definition ${middlewareDef.name} of project ${project.metadata.name} ` +
237+
`Custom middleware definition ${middlewareDef.name} of project ${project.getName()} ` +
234238
`defines neither a "beforeMiddleware" nor an "afterMiddleware" parameter. One must be defined.`);
235239
}
236-
240+
const customMiddleware = this.graph.getExtension(middlewareDef.name);
241+
const specVersion = customMiddleware.getSpecVersion();
237242
await this.addMiddleware(middlewareDef.name, {
238-
wrapperCallback: ({middleware: middleware, specVersion}) => {
239-
return ({resources, middlewareUtil}) => {
240-
const options = {
241-
configuration: middlewareDef.configuration
242-
};
243-
const params = {resources, options};
244-
if (
245-
specVersion === "2.0" || specVersion === "2.1" ||
246-
specVersion === "2.2" || specVersion === "2.3" ||
247-
specVersion === "2.4" || specVersion === "2.5" ||
248-
specVersion === "2.6"
249-
) {
250-
// Supply interface to MiddlewareUtil instance starting with specVersion 2.0
251-
params.middlewareUtil = middlewareUtil.getInterface(specVersion);
252-
}
253-
return middleware(params);
243+
customMiddleware: ({resources, middlewareUtil}) => {
244+
const options = {
245+
configuration: middlewareDef.configuration
254246
};
247+
const params = {resources, options};
248+
if (
249+
specVersion === "2.0" || specVersion === "2.1" ||
250+
specVersion === "2.2" || specVersion === "2.3" ||
251+
specVersion === "2.4" || specVersion === "2.5" ||
252+
specVersion === "2.6"
253+
) {
254+
// Supply interface to MiddlewareUtil instance starting with specVersion 2.0
255+
params.middlewareUtil = middlewareUtil.getInterface(specVersion);
256+
}
257+
return customMiddleware(params);
255258
},
256259
mountPath: middlewareDef.mountPath,
257260
beforeMiddleware: middlewareDef.beforeMiddleware,

lib/middleware/middlewareRepository.js

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,6 @@ function getMiddleware(middlewareName) {
3030
}
3131
}
3232

33-
function addMiddleware({name, specVersion, middlewarePath}) {
34-
if (middlewareInfos[name]) {
35-
throw new Error(`middlewareRepository: A middleware with the name ${name} has already been registered`);
36-
}
37-
middlewareInfos[name] = {
38-
path: middlewarePath,
39-
specVersion
40-
};
41-
}
42-
4333
module.exports = {
44-
getMiddleware: getMiddleware,
45-
addMiddleware: addMiddleware
34+
getMiddleware: getMiddleware
4635
};

lib/middleware/versionInfo.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,21 @@ const MANIFEST_JSON = "manifest.json";
99
* @module @ui5/server/middleware/versionInfo
1010
* @param {object} parameters Parameters
1111
* @param {module:@ui5/server.middleware.MiddlewareManager.middlewareResources} parameters.resources Parameters
12-
* @param {object} parameters.tree Project tree
12+
* @param {module:@ui5/project.graph.ProjectGraph} parameters.graph Project graph
1313
* @returns {Function} Returns a server middleware closure.
1414
*/
15-
function createMiddleware({resources, tree: project}) {
15+
function createMiddleware({resources, graph}) {
1616
return async function versionInfo(req, res, next) {
1717
try {
1818
const dependencies = resources.dependencies;
1919
const dotLibResources = await dependencies.byGlob("/resources/**/.library");
2020

2121
dotLibResources.sort((a, b) => {
22-
return a._project.metadata.name.localeCompare(b._project.metadata.name);
22+
return a._project.getName().localeCompare(b._project.getName());
2323
});
2424

2525
const libraryInfosPromises = dotLibResources.map(async (dotLibResource) => {
26-
const namespace = dotLibResource._project.metadata.namespace;
26+
const namespace = dotLibResource._project.getNamespace();
2727
const manifestResources = await dependencies.byGlob(`/resources/${namespace}/**/${MANIFEST_JSON}`);
2828
let libraryManifest = manifestResources.find((manifestResource) => {
2929
return manifestResource.getPath() === `/resources/${namespace}/${MANIFEST_JSON}`;
@@ -46,16 +46,16 @@ function createMiddleware({resources, tree: project}) {
4646
return {
4747
libraryManifest,
4848
embeddedManifests,
49-
name: dotLibResource._project.metadata.name,
50-
version: dotLibResource._project.version
49+
name: dotLibResource._project.getName(),
50+
version: dotLibResource._project.getVersion()
5151
};
5252
});
53+
const rootProject = graph.getRoot();
5354
const libraryInfos = await Promise.all(libraryInfosPromises);
54-
5555
const [versionInfoResource] = await createVersionInfoProcessor({
5656
options: {
57-
rootProjectName: project.metadata.name,
58-
rootProjectVersion: project.version,
57+
rootProjectName: rootProject.getName(),
58+
rootProjectVersion: rootProject.getVersion(),
5959
libraryInfos
6060
}
6161
});

lib/server.js

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ module.exports = {
112112
* Start a server for the given project (sub-)tree.
113113
*
114114
* @public
115-
* @param {object} tree A (sub-)tree
115+
* @param {module:@ui5/project.graph.ProjectGraph} graph Project graph
116116
* @param {object} options Options
117117
* @param {number} options.port Port to listen to
118118
* @param {boolean} [options.changePortIfInUse=false] If true, change the port if it is already in use
@@ -133,27 +133,41 @@ module.exports = {
133133
* <code>h2</code>-flag and a <code>close</code> function,
134134
* which can be used to stop the server.
135135
*/
136-
async serve(tree, {
136+
async serve(graph, {
137137
port: requestedPort, changePortIfInUse = false, h2 = false, key, cert,
138138
acceptRemoteConnections = false, sendSAPTargetCSP = false, simpleIndex = false, serveCSPReports = false
139139
}) {
140-
const projectResourceCollections = resourceFactory.createCollectionsForTree(tree);
140+
const rootProject = graph.getRoot();
141141

142+
const readers = [];
143+
await graph.traverseBreadthFirst(async function({project: dep}) {
144+
if (dep.getName() === rootProject.getName()) {
145+
// Ignore root project
146+
return;
147+
}
148+
readers.push(dep.getReader({style: "runtime"}));
149+
});
150+
151+
const dependencies = resourceFactory.createReaderCollection({
152+
name: `Dependency reader collection for project ${rootProject.getName()}`,
153+
readers
154+
});
155+
156+
const rootReader = rootProject.getReader({style: "runtime"});
142157

143158
// TODO change to ReaderCollection once duplicates are sorted out
144159
const combo = new ReaderCollectionPrioritized({
145160
name: "server - prioritize workspace over dependencies",
146-
readers: [projectResourceCollections.source, projectResourceCollections.dependencies]
161+
readers: [rootReader, dependencies]
147162
});
148-
149163
const resources = {
150-
rootProject: projectResourceCollections.source,
151-
dependencies: projectResourceCollections.dependencies,
164+
rootProject: rootReader,
165+
dependencies: dependencies,
152166
all: combo
153167
};
154168

155169
const middlewareManager = new MiddlewareManager({
156-
tree,
170+
graph,
157171
resources,
158172
options: {
159173
sendSAPTargetCSP,

0 commit comments

Comments
 (0)