rapnc
Version:
Node client for RAP 1.0
132 lines (112 loc) • 3.47 kB
JavaScript
// 需要确定JSON-Schema的格式
// 是否需要这玩意儿?
var mocker = require('./toMockJs');
var types = require('./types');
var requestTypeMapper = {
1: 'GET',
2: 'POST'
};
function fillToObject(params, obj) {
if (params) {
params.forEach(function(param) {
obj['_' + param.id + '_'] = param;
//param.prop = param.identifier;
delete param.identifier;
if (param.remark
// 应该在params里就已经显示这些信息了
&& (param.remark.indexOf('@mock=') == 0 || param.remark.indexOf('@value=') == 0 )) {
//param.mock = param.remark.split('@mock=')[1];
delete param.remark;
}
if (param.data_type) {
param.type = param.data_type;
delete param.data_type;
}
//param.meaning = param.name;
//delete param.name;
delete param.id;
for(var prop in param) {
if (param[prop] === null || param[prop] === '') {
delete param[prop];
}
}
if (param.params) {
fillToObject(param.params, obj);
delete param.params;
}
})
}
}
exports.dbToSchema = function(data) {
var actions = data.actions;
data.paramDetails = {};
for (var i = actions.length - 1; i >= 0; i--) {
var action = actions[i];
action.action = action.request_url;
action.method = requestTypeMapper[action.request_type || 1];
delete action.request_type;
delete action.request_url;
var request = mocker.getMockjsRules(action, 'requestParams');
action.request = {};
if (request) {
action.request.params = request;
}
var response = mocker.getMockjsRules(action);
action.response = {};
if (response) {
action.response.params = response;
}
fillToObject(action.requestParams, data.paramDetails)
delete action.requestParams;
fillToObject(action.responseParams, data.paramDetails)
delete action.responseParams;
};
data.meta = {
version: '0.1',
rap: '1.0'
}
data.errorHandlers = {
}
return data;
};
exports.schemaToDb = function(data) {
};
function cleanRapIds(params, obj) {
for(var prop in params) {
var cleaned = prop.replace(/\|_\d+_/, '');
var value = params[prop];
if (types.isObject(value)) {
obj[cleaned] = cleanRapIds(value, {});
continue;
} else if (types.isArray(value) && value.length == 1 && types.isObject(value[0])) {
obj[cleaned] = [cleanRapIds(value[0], {})]
continue;
}
obj[cleaned] = params[prop];
}
return obj;
}
/*
console.log(cleanRapIds({
"code|_14308_": "1",
"data|_14309_": {
"b|_14310_": "1",
"a|_14311_": "[\"1\", \"2\", \"3\"]",
"c|_14314_": "test2222",
"e|_14316_": "1"
},
"data2": [{
"a|1|_321_": ['1', '2'],
"b|_23132312_": "2",
}],
"msg|_14313_": "1"
}, {}));
*/
exports.schemaToMockjs = function(action) {
if (!action || !action.response || !action.response.params) {
return;
}
var params = action.response.params;
params = cleanRapIds(params, {});
return params;
};