UNPKG

@ui5/builder

Version:
68 lines (63 loc) 3.05 kB
"use strict"; const log = require("@ui5/logger").getLogger("builder:tasks:generateLibraryManifest"); const manifestCreator = require("../processors/manifestCreator"); const ReaderCollectionPrioritized = require("@ui5/fs").ReaderCollectionPrioritized; /** * Task for creating a library manifest.json from its .library file. * * @public * @alias module:@ui5/builder.tasks.generateLibraryManifest * @param {Object} parameters Parameters * @param {module:@ui5/fs.DuplexCollection} parameters.workspace DuplexCollection to read and write files * @param {module:@ui5/fs.AbstractReader} parameters.dependencies Reader or Collection to read dependency files * @param {Object} parameters.options Options * @param {string} parameters.options.projectName Project name * @returns {Promise<undefined>} Promise resolving with <code>undefined</code> once data has been written */ module.exports = function({workspace, dependencies, options}) { const combo = new ReaderCollectionPrioritized({ name: `libraryManifestGenerator - prioritize workspace over dependencies: ${options.projectName}`, readers: [workspace, dependencies] }); // Note: // *.library files are needed to identify libraries // *.json files are needed to avoid overwriting them // *.js files are needed to identify nested components // *.less, *.css, *.theming and *.theme files are needed to identify supported themes // *.properties to identify existence of i18n bundles (e.g. messagebundle.properties) return combo.byGlob("/**/*.{js,json,library,less,css,theming,theme,properties}").then((resources) => { // Find all libraries and create a manifest.json file return workspace.byGlob("/resources/**/.library").then((libraryIndicatorResources) => { if (libraryIndicatorResources.length < 1) { // No library found - nothing to do log.verbose(`Could not find a ".library" file for project ${options.projectName}. Skipping library manifest generation.`); return; } return Promise.all(libraryIndicatorResources.map((libraryIndicatorResource) => { // Determine library namespace from library indicator file path // ending with ".library" // e.g. /resources/sap/foo/.library => sap/foo const libraryNamespacePattern = /^\/resources\/(.*)\/\.library$/; const libraryIndicatorPath = libraryIndicatorResource.getPath(); const libraryNamespaceMatch = libraryIndicatorPath.match(libraryNamespacePattern); if (libraryNamespaceMatch && libraryNamespaceMatch[1]) { const libraryNamespace = libraryNamespaceMatch[1]; return manifestCreator({ libraryResource: libraryIndicatorResource, namespace: libraryNamespace, resources, options: { } }).then((manifest) => { if (manifest) { return workspace.write(manifest); } }); } else { log.verbose(`Could not determine library namespace from file "${libraryIndicatorPath}" for project ${options.projectName}. Skipping library manifest generation.`); return Promise.resolve(); } })); }); }); };