grunt-tdevopsui5
Version:
UI5 tools for build/deploy/version managment of ui5 applicaton
407 lines (392 loc) • 10.7 kB
JavaScript
/*
* tdevopsui5 - options for tasks
* https://github.com/Neasit/tdevopsui5
*
* Copyright (c) 2019 Neasit
* Licensed under the MIT license.
*/
var TASK_NAMES = {
copy: 'copy',
preload: 'openui5_preload',
jsmini: 'uglify',
babel: 'babel',
cssmin: 'cssmin',
uploader: 'uploader',
gittag: 'gittag',
};
/**
* Copy object property to other object
* @param {object} sSource source
* @param {object} oTarget source
* @param {boolean} bCreate should be created
*/
function fillObjectValues(oSource, oTarget, bCreate) {
var aKeys = Object.keys(oSource);
var oReturn = $.extend(true, {}, oTarget);
aKeys.forEach(function(sKey) {
if (oReturn[sKey] !== undefined || bCreate) {
if (Array.isArray(oSource[sKey])) {
oReturn[sKey] = oSource[sKey].slice(0);
} else if (oSource[sKey] instanceof Object) {
oReturn[sKey] = $.extend(true, {}, oSource[sKey]);
} else {
oReturn[sKey] = oSource[sKey];
}
}
});
return oReturn;
}
/**
* Check - all options is there
* @param {string} sTaskName task name
* @param {object} oOptions options of main task
*/
function checkOptions(sTaskName, oOptions) {
var bResult;
switch (sTaskName) {
case TASK_NAMES.copy:
bResult = oOptions.src && oOptions.dest;
break;
case TASK_NAMES.preload:
bResult = oOptions.tmp && oOptions.appIndex;
break;
case TASK_NAMES.jsmini:
bResult = oOptions.tmp && oOptions.appName;
break;
case TASK_NAMES.babel:
case TASK_NAMES.cssmin:
bResult = oOptions.tmp;
break;
case TASK_NAMES.gittag:
bResult = oOptions.tagText && oOptions.version;
break;
case TASK_NAMES.uploader:
bResult =
oOptions.server &&
oOptions.client &&
oOptions.user &&
oOptions.pwd &&
oOptions.package &&
oOptions.bspcontainer &&
oOptions.transportno;
break;
default:
bResult = false;
}
return bResult;
}
/**
* Return predefined options for uploader task
* subTask: addtag
* @param {object} oOptions option of main task
*/
function createUploaderOptions(oOptions) {
if (checkOptions(TASK_NAMES.uploader, oOptions)) {
return {
deploy: {
options: {
conn: {
server: oOptions.server,
client: oOptions.client,
useStrictSSL: oOptions.useStrictSSL,
},
auth: {
user: oOptions.user,
pwd: oOptions.pwd,
},
ui5: {
package: oOptions.package,
bspcontainer: oOptions.bspcontainer,
bspcontainer_text: oOptions.bspcontainer_text,
transportno: oOptions.transportno,
calc_appindex: oOptions.calc_appindex,
},
resources: {
cwd: oOptions.dest,
src: oOptions.src,
},
},
},
};
} else {
throw new Error('Missing options for create cssmin tasks');
}
}
function createVersionOptions(oOptions) {
return {
options: {
type: oOptions.version,
dest: oOptions.dest,
user: oOptions.user,
transport: oOptions.transportno,
tag: oOptions.version === 'P',
tagText: 'Major version (prod)',
note: 'Deploy to system ' + oOptions.transportno.slice(0, 3) + ', type ' + oOptions.version,
},
};
}
/**
* Return predefined options for gitadd task
* subTask: addtag
* @param {object} oOptions option of main task
*/
function createGitAddTagOptions(oOptions) {
if (checkOptions(TASK_NAMES.gittag, oOptions)) {
return {
addtag: {
options: {
tag: oOptions.version,
message: oOptions.tagText,
},
},
};
} else {
throw new Error('Missing options for create gitadd tasks');
}
}
/**
* Return predefined options for cssmin task
* subTask: tmp
* @param {object} oOptions option of main task
*/
function createCSSMinOptions(oOptions) {
if (checkOptions(TASK_NAMES.cssmin, oOptions)) {
return {
tmp: {
files: [
{
expand: true,
src: '**/*.css',
dest: oOptions.tmp,
cwd: oOptions.tmp,
},
],
},
};
} else {
throw new Error('Missing options for create cssmin tasks');
}
}
/**
* Return predefined options for gitLog task
* subTask: getCommit
* @param {object} oOptions option of main task
*/
function createGitLogOptions(oOptions) {
var oResult = oOptions;
if (!oOptions) {
oResult = {
getCommit: {
options: {
prop: 'gitlog.getCommit.result',
number: 1,
},
},
};
}
return oResult;
}
/**
* Return predefined options for babel task
* subTask: tmp
* @param {object} oOptions option of main task
*/
function createBabelOptions(oOptions) {
if (checkOptions(TASK_NAMES.babel, oOptions)) {
return {
tmp: {
options: {
sourceMap: 'inline',
presets: ['@babel/preset-env'],
},
files: [
{
expand: true, // Enable dynamic expansion.
cwd: oOptions.tmp, // Src matches are relative to this path.
src: ['**/*.js', '!**/*-dbg*', '!**/libs/*.*', '!**/*-preload.js'],
dest: oOptions.tmp, // Destination path prefix.
},
],
},
};
} else {
throw new Error('Missing options for create babel tasks');
}
}
/**
* Return predefined options for js-mini task
* subTask: tmp
* @param {object} oOptions option of main task
*/
function createJSMiniOptions(oOptions) {
if (checkOptions(TASK_NAMES.jsmini, oOptions)) {
return {
tmp: {
options: {
banner: '/*!' + oOptions.appName + ' ' + Date().toString() + ' */\n',
},
files: [
{
expand: true,
cwd: oOptions.tmp,
src: ['**/*.js', '!**/*preload.js', '!**/*.min.js', '!**/*-min.js', '!**/*-dbg*'],
dest: oOptions.tmp,
},
],
},
};
} else {
throw new Error('Missing options for create js-mini tasks');
}
}
/**
* Return predefined options for preload task
* subTask: components, library, application
* @param {object} oOptions option of main task
*/
function createPreloadOptions(oOptions) {
if (checkOptions(TASK_NAMES.preload, oOptions)) {
var oPreload = {};
if (oOptions.library) {
oPreload = {
components: {
options: {
resources: {
cwd: oOptions.tmp,
prefix: oOptions.appIndex,
src: oOptions.preloadFiles,
},
dest: oOptions.tmp,
compatVersion: oOptions.ui5version,
},
components: true,
},
library: {
options: {
resources: {
cwd: oOptions.tmp,
prefix: oOptions.appIndex,
src: oOptions.preloadFiles,
},
dest: oOptions.tmp,
compatVersion: oOptions.ui5version,
},
libraries: oOptions.appIndex,
},
};
} else {
oPreload = {
application: {
options: {
resources: {
cwd: oOptions.tmp,
prefix: oOptions.appIndex,
src: oOptions.preloadFiles,
},
dest: oOptions.tmp,
compatVersion: oOptions.ui5version,
},
components: oOptions.appIndex,
},
};
}
return oPreload;
} else {
throw new Error('Missing options for create preload tasks');
}
}
/**
* Return predefined options for copy task
* subTask: temp, dbg, dist, version, resourcesLib
* @param {object} oOptions option of main task
*/
function createCopyOptions(oOptions) {
if (checkOptions(TASK_NAMES.copy, oOptions)) {
var oCopy = {
temp: {
files: [
{
expand: true,
cwd: oOptions.src,
src: ['**/*.*', '**/.*', '!**/*.md'],
dest: oOptions.tmp,
},
{
expand: true,
cwd: '',
src: ['neo-app.json'],
dest: oOptions.tmp,
},
],
},
dbg: {
files: [
{
expand: true,
cwd: oOptions.tmp,
src: ['**/*.*', '!libs/*.*', '!**/*.min.js', '!**/*-preload.js'],
dest: oOptions.tmp,
rename: function(dest, src) {
// this.js -> this-dbg.js
var destinationFilename = '';
if (src.endsWith('.controller.js') > 0) {
destinationFilename =
dest + '/' + src.replace(/\.controller\.js$/, '-dbg.controller.js');
} else {
destinationFilename = dest + '/' + src.replace(/\.js$/, '-dbg.js');
}
return destinationFilename;
},
},
],
},
dist: {
files: [
{
expand: true,
cwd: oOptions.tmp,
src: ['**/*.*', '**/.*'],
dest: oOptions.dest,
},
],
},
version: {
files: [
{
expand: true,
cwd: oOptions.dest,
src: ['version.json'],
dest: oOptions.src,
},
],
},
};
if (oOptions.library) {
oCopy.resourcesLib = {
files: [
{
expand: true,
cwd: oOptions.dest,
src: ['**', '**/.*', '!**/*.md'],
dest: oOptions.ui5Resource + '/' + oOptions.appIndex,
},
],
};
}
return oCopy;
} else {
throw new Error('Missing options for create copy tasks');
}
}
/**
* export
*/
exports.createCopyOptions = createCopyOptions;
exports.createPreloadOptions = createPreloadOptions;
exports.createJSMiniOptions = createJSMiniOptions;
exports.createBabelOptions = createBabelOptions;
exports.createCSSMinOptions = createCSSMinOptions;
exports.createGitLogOptions = createGitLogOptions;
exports.createUploaderOptions = createUploaderOptions;
exports.createGitAddTagOptions = createGitAddTagOptions;
exports.createVersionOptions = createVersionOptions;