@ui5/server
Version:
UI5 CLI - Server
67 lines (59 loc) • 2.55 kB
JavaScript
import createVersionInfoProcessor from "@ui5/builder/processors/versionInfoGenerator";
import generateLibraryManifest from "./helper/generateLibraryManifest.js";
const MANIFEST_JSON = "manifest.json";
/**
* Creates and returns the middleware to create the version info as json object.
*
* @module @ui5/server/middleware/versionInfo
* @param {object} parameters Parameters
* @param {@ui5/server/internal/MiddlewareManager.middlewareResources} parameters.resources Parameters
* @param {object} parameters.middlewareUtil [MiddlewareUtil]{@link @ui5/server/middleware/MiddlewareUtil} instance
* @returns {Function} Returns a server middleware closure.
*/
function createMiddleware({resources, middlewareUtil}) {
return async function versionInfo(req, res, next) {
try {
const dependencies = resources.dependencies;
let dotLibResources = await dependencies.byGlob("/resources/**/.library");
dotLibResources = dotLibResources.filter((res) => res.getProject()?.getType() === "library");
dotLibResources.sort((a, b) => {
return a.getProject().getName().localeCompare(b.getProject().getName());
});
const libraryInfosPromises = dotLibResources.map(async (dotLibResource) => {
const namespace = dotLibResource.getProject().getNamespace();
const manifestResources = await dependencies.byGlob(`/resources/${namespace}/**/${MANIFEST_JSON}`);
let libraryManifest = manifestResources.find((manifestResource) => {
return manifestResource.getPath() === `/resources/${namespace}/${MANIFEST_JSON}`;
});
const embeddedManifests =
manifestResources.filter((manifestResource) => manifestResource !== libraryManifest);
if (!libraryManifest) {
libraryManifest = await generateLibraryManifest(middlewareUtil, dotLibResource);
}
return {
libraryManifest,
embeddedManifests,
name: dotLibResource.getProject().getName(),
version: dotLibResource.getProject().getVersion()
};
});
const rootProject = middlewareUtil.getProject();
const libraryInfos = await Promise.all(libraryInfosPromises);
const [versionInfoResource] = await createVersionInfoProcessor({
options: {
rootProjectName: rootProject.getName(),
rootProjectVersion: rootProject.getVersion(),
libraryInfos
}
});
const versionInfoContent = await versionInfoResource.getBuffer();
res.writeHead(200, {
"Content-Type": "application/json"
});
res.end(versionInfoContent.toString());
} catch (err) {
next(err);
}
};
}
export default createMiddleware;