UNPKG

grunt-tdevopsui5

Version:

UI5 tools for build/deploy/version managment of ui5 applicaton

199 lines (188 loc) 6.63 kB
/* * tdevopsui5 - utils * https://github.com/Neasit/tdevopsui5 * * Copyright (c) 2019 Neasit * Licensed under the MIT license. */ var path = require('path'); var fs = require('fs'); var process = require('process'); /* Utils - help functions (copied from grunt-sapui5-bestpractice-build (1.3.64)) create resource file ... */ module.exports = { // type = 'D' - develop, 'M' - maitenence, 'P' - production addVersion: function(grunt, src, type, TR, user, note, hash) { var manifestPath = path.relative(process.cwd(), src) + '/manifest.json'; var oManifest; var fileName = 'version.json'; var filePath = path.relative(process.cwd(), src) + '/' + fileName; var sData = '{}'; if (fs.existsSync(filePath)) { sData = fs.readFileSync(manifestPath, { encoding: 'utf-8' }); oManifest = JSON.parse(sData); sData = '{}'; } if (fs.existsSync(filePath)) { sData = fs.readFileSync(filePath, { encoding: 'utf-8' }); } var oVersion = JSON.parse(sData); var sSystem = TR ? TR.slice(0, 3) : 'CSP'; var version = { major: 0, minor: 0, dev: 0, }; if (oVersion.current) { oVersion.current.version.split('.').forEach(function(string, i) { switch (i) { case 0: version.major = parseInt(string); break; case 1: version.minor = parseInt(string); break; case 2: version.dev = parseInt(string); break; default: grunt.log.writeln('Invalide version in file'); } }); oVersion.history = oVersion.history || []; oVersion.history.push(oVersion.current); } else { oVersion.current = {}; oVersion.history = []; } switch (type) { case 'D': version.dev += 1; break; case 'M': version.minor += 1; version.dev = 0; break; case 'P': version.major += 1; version.minor = 0; version.dev = 0; break; default: version.dev += 1; } var sNewVersion = [version.major, version.minor, version.dev].join('.'); oVersion.current = { version: sNewVersion, user: user || 'unknown', system: sSystem || 'unknown', tr: TR || 'unknown', date: new Date(), note: note || 'empty', hash: hash, }; fs.writeFileSync(filePath, JSON.stringify(oVersion, null, 2)); if (oManifest && oManifest['sap.app']) { if (!oManifest['sap.app'].applicationVersion) { oManifest['sap.app'].applicationVersion = {}; } oManifest['sap.app'].applicationVersion.version = sNewVersion; fs.writeFileSync(manifestPath, JSON.stringify(oManifest, null, 2)); } return sNewVersion; }, cacheBusterInfoJsonResources: {}, createCachebusterInfoJson: function(Path) { this.createSapUICacheBusterInfoJsonResource(Path); var jsonCachebusterContent = JSON.stringify(this.cacheBusterInfoJsonResources, null, 2); fs.writeFileSync(path.join(Path, 'sap-ui-cachebuster-info.json'), jsonCachebusterContent); }, createSapUICacheBusterInfoJsonResource: function(curPath) { var relativePath = path.relative(process.cwd(), curPath); if (relativePath.indexOf('dist') >= 0) { relativePath = path.relative('dist', relativePath); } var files = fs.readdirSync(curPath); for (var i = 0; i < files.length; i++) { var fileName = files[i]; var newPath = path.join(curPath, fileName); if (fs.lstatSync(newPath).isDirectory()) { if (fileName !== 'dist' && fileName !== 'node_modules') { this.createSapUICacheBusterInfoJsonResource(newPath); } } else { if (fileName !== 'sap-ui-cachebuster-info.json') { var relatetiveFileName = path .normalize(path.join(relativePath, fileName)) .replace(new RegExp('\\' + path.sep, 'g'), '/'); var fileNameFull = path.normalize(path.join(curPath, fileName)); var lastModifiedTime = fs.lstatSync(fileNameFull).mtime.getTime(); this.cacheBusterInfoJsonResources[relatetiveFileName] = lastModifiedTime; } } } }, resources: [], createResourceJson: function(Path) { var sJsonContent = {}; var jsonContent; this.createResource(Path); sJsonContent.resources = this.resources; jsonContent = JSON.stringify(sJsonContent, null, 4); fs.writeFileSync(path.join(Path, 'resources.json'), jsonContent); }, createResource: function(curPath) { var relativePath = path.relative(process.cwd(), curPath); if (relativePath.indexOf('dist') >= 0) { relativePath = path.relative('dist', relativePath); } var files = fs.readdirSync(curPath); for (var i = 0; i < files.length; i++) { var resource = {}; var fileName = files[i]; var sSuffix = path.extname(path.join(curPath, fileName)); resource.name = path.normalize(path.join(relativePath, fileName)); if (fileName === 'Component-preload.js' || fileName === 'resources.json') { resource.merged = true; } if (sSuffix === '.properties' && fileName.indexOf('i18n') > -1) { resource.raw = path.join('i18n', 'i18n.properties'); } else if (sSuffix === '.properties' && fileName.indexOf('messageBundle') > -1) { resource.raw = 'messageBundle.properties'; } if (resource.raw) { var start = fileName.indexOf('_'); var end = fileName.indexOf('.properties'); if (start > -1 && end > -1) resource.locale = fileName.substring(start, end); } if (fileName.indexOf('-dbg') > 0) { resource.isDebug = true; } var newPath = path.join(curPath, fileName); if ( fileName !== 'dist' && fileName !== 'node_modules' && fs.lstatSync(newPath).isDirectory() ) { this.createResource(newPath); } else { this.resources.push(resource); } } }, extendGrunt: function(grunt, sName, oParams) { if (!grunt.task.exists(sName)) { grunt.loadNpmTasks(sName); } Object.keys(oParams).forEach( function(key) { this.setOptions(grunt, key, oParams[key]); }.bind(this) ); }, setOptions: function(grunt, name, options) { grunt.config.set(name, name.indexOf('.') > -1 ? options : { options: options }); }, };