gbox-apis
Version:
An Gbox API's npm Package for Node.js and Sails.js
119 lines (95 loc) • 4.67 kB
JavaScript
/**
* Validating package.json for required inputs.
*
* @returns {
* "valid": true / false
* "errorMsg": "in case of error, error message"
* }
*/
exports.validatePackageJson = (packageJson) => {
if (!packageJson.name || packageJson.name === '' || !packageJson.name.includes('-'))
return { valid: false, errorMsg: '***** Error: Missing API name in package.json! Check API documentation. *****' };
if (!packageJson.version || packageJson.version === '')
return { valid: false, errorMsg: '***** Error: Missing API version in package.json! Check API documentation. *****' };
// if valid
return { valid: true, errorMsg: '' };
}
/**
* Validating api actions array.
*
* @returns {
* "valid": true / false
* "errorMsg": "in case of error, error message"
* }
*/
exports.validateRoutes = (routes) => {
if (!Array.isArray(routes) || !routes.length)
return { valid: false, errorMsg: '***** Error: Invalid route object, no routes selected! Check API documentation. *****' };
for (let apiRoute of routes) {
if (!apiRoute.hasOwnProperty('actionName') || !apiRoute.hasOwnProperty('action') || !apiRoute.hasOwnProperty('type')
|| !apiRoute.hasOwnProperty('routeVersion') || !apiRoute.hasOwnProperty('routeMethod') || !apiRoute.hasOwnProperty('route'))
return { valid: false, errorMsg: '***** Error: Invalid route object, missing required property! Check API documentation. *****' };
if (apiRoute.visibility && !Array.isArray(apiRoute.visibility))
return { valid: false, errorMsg: '***** Error: Invalid route object, visibility property is invalid! Check API documentation. *****' };
if (apiRoute.level && !Array.isArray(apiRoute.level))
return { valid: false, errorMsg: '***** Error: Invalid route object, level property is invalid! Check API documentation. *****' };
if (apiRoute.controllerActions && !Array.isArray(apiRoute.controllerActions))
return { valid: false, errorMsg: '***** Error: Invalid route object, controllerActions property is invalid! Check API documentation. *****' };
if (apiRoute.actionName === '' || apiRoute.action === '' || apiRoute.type === '' || apiRoute.route === '')
return { valid: false, errorMsg: '***** Error: Invalid route object, invalid required parameter! Check API documentation. *****' };
}
// if valid
return { valid: true, errorMsg: '' };
}
/**
* Filtering existing API data and making API object array.
*
* @param apiData
* @returns {Array}
*/
exports.filterApiData = async (apisData) => {
return new Promise(async (resolve, reject) => {
let response = [];
try {
for (let apiData of apisData) {
// find api object
let apiIndex = response.findIndex(api => api.id === apiData.apiId);
if (apiIndex === -1) {
// if not one, create it
response.push({
id: apiData.apiId,
apiName: apiData.apiName,
slug: apiData.slug,
version: apiData.version,
description: apiData.description,
url: apiData.url,
port: apiData.port,
module: {
id: apiData.apiModuleId,
moduleName: apiData.moduleName
},
actions: []
});
// get new index
apiIndex = response.findIndex(api => api.id === apiData.apiId);
}
response[apiIndex].actions.push({
id: apiData.apiModuleActionId,
action: apiData.action,
actionName: apiData.actionName,
type: apiData.type,
routeVersion: apiData.routeVersion,
method: apiData.method,
route: apiData.route,
visibility: (apiData.visibility !== '') ? JSON.parse(apiData.visibility) : [],
level: (apiData.level !== '') ? JSON.parse(apiData.level) : [],
controllerActions: (apiData.controllerActions !== '') ? JSON.parse(apiData.controllerActions) : [],
});
}
} catch (e) {
console.log('\x1b[31m', `[GB ERROR] Problem with parsing api data!`, e, '\x1b[0m'); // log error
return reject(e);
}
return resolve(response);
});
};