builder/lib/tasks/generateVersionInfo.js

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