UNPKG

gbox-apis

Version:

An Gbox API's npm Package for Node.js and Sails.js

119 lines (95 loc) 4.67 kB
/** * 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); }); };