builder/lib/tasks/generateVersionInfo.js

  1. const versionInfoGenerator = require("../processors/versionInfoGenerator");
  2. const MANIFEST_JSON = "manifest.json";
  3. /**
  4. * Task to create sap-ui-version.json
  5. *
  6. * @public
  7. * @alias module:@ui5/builder.tasks.generateVersionInfo
  8. * @param {object} parameters Parameters
  9. * @param {module:@ui5/fs.DuplexCollection} parameters.workspace DuplexCollection to read and write files
  10. * @param {module:@ui5/fs.AbstractReader} parameters.dependencies Reader or Collection to read dependency files
  11. * @param {object} parameters.options Options
  12. * @param {string} parameters.options.pattern Glob pattern for .library resources
  13. * @param {object} parameters.options.rootProject DuplexCollection to read and write files
  14. * @returns {Promise<undefined>} Promise resolving with <code>undefined</code> once data has been written
  15. */
  16. module.exports = async ({workspace, dependencies, options: {rootProject, pattern}}) => {
  17. const resources = await dependencies.byGlob(pattern);
  18. const libraryInfosPromises = resources.map((dotLibResource) => {
  19. const namespace = dotLibResource._project.metadata.namespace;
  20. // pass all required resources to the processor
  21. // the processor will then filter
  22. return dependencies.byGlob(`/resources/${namespace}/**/${MANIFEST_JSON}`).then((manifestResources) => {
  23. const libraryManifest = manifestResources.find((manifestResource) => {
  24. return manifestResource.getPath() === `/resources/${namespace}/${MANIFEST_JSON}`;
  25. });
  26. const embeddedManifests =
  27. manifestResources.filter((manifestResource) => manifestResource !== libraryManifest);
  28. return {
  29. libraryManifest,
  30. embeddedManifests,
  31. name: dotLibResource._project.metadata.name,
  32. version: dotLibResource._project.version
  33. };
  34. });
  35. });
  36. const libraryInfos = await Promise.all(libraryInfosPromises);
  37. const [versionInfoResource] = await versionInfoGenerator({
  38. options: {
  39. rootProjectName: rootProject.metadata.name,
  40. rootProjectVersion: rootProject.version,
  41. libraryInfos
  42. }
  43. });
  44. return workspace.write(versionInfoResource);
  45. };