UNPKG

test-openapi

Version:
108 lines (65 loc) 2.04 kB
"use strict";require("core-js/modules/es.array.iterator");require("core-js/modules/es.array.sort");Object.defineProperty(exports,"__esModule",{value:true});exports.load=void 0;var _lodash=require("lodash"); var _error=require("../../errors/error.js"); var _handler=require("../../errors/handler.js"); var _regexp=require("../../utils/regexp.js"); var _merge=require("../../template/merge.js"); const load=function(tasks,{config:{merge:mergeConfig}}){ const{mergeTasks,nonMergeTasks}=splitTasks({tasks}); const tasksA=nonMergeTasks.map((task)=> mergeTask({task,mergeTasks,mergeConfig})); return tasksA; };exports.load=load; const splitTasks=function({tasks}){ const mergeTasks=tasks.filter(isMergeTask); const nonMergeTasks=tasks.filter(task=>!isMergeTask(task)); return{mergeTasks,nonMergeTasks}; }; const isMergeTask=function({merge}){ return merge!==undefined; }; const mergeTask=function({task,mergeTasks,mergeConfig={}}){ const mergeTasksA=findMergeTasks({task,mergeTasks}); if(mergeTasksA.length===0){ return task; } return(0,_merge.mergeWithTemplates)(mergeConfig,...mergeTasksA,task); }; const findMergeTasks=function({task:{key,scope},mergeTasks}){ return mergeTasks. filter(({merge})=>eTestRegExp(merge,key)). sort((taskA,taskB)=>compareMergeTasks({taskA,taskB,scope})). map(task=>(0,_lodash.omit)(task,NOT_MERGED_ATTRIBUTES)); }; const testRegExpHandler=function({message},merge){ throw new _error.TestOpenApiError(`'task.merge' '${merge}' is invalid: ${message}`,{ value:merge, property:"task.merge"}); }; const eTestRegExp=(0,_handler.addErrorHandler)(_regexp.testRegExp,testRegExpHandler); const compareMergeTasks=function({ taskA:{scope:scopeA}, taskB:{scope:scopeB}, scope}) { if(scopeA===scopeB){ return 0; } if(scopeA===scope){ return 1; } if(scopeB===scope){ return-1; } if(scopeA===undefined){ return 1; } if(scopeB===undefined){ return-1; } if(scopeA<scopeB){ return-1; } return 1; }; const NOT_MERGED_ATTRIBUTES=["key","scope","name","merge"]; //# sourceMappingURL=load.js.map