UNPKG

mson2json

Version:

Convert API Blueprints in MSON format to JSON!

103 lines (83 loc) 3.43 kB
(function () { 'use strict'; module.exports = Transaction; function Transaction(t) { this.groupName = t.origin.resourceGroupName; this.resourceName = t.origin.resourceName; this.uriTemplate = t.origin.uriTemplate; this.actionName = t.origin.actionName; this.params = t.origin.parameters || []; this.requestMethod = t.request.method; this.requestHeaders = t.request.headers; this.requestBody = t.request.body; this.responseStatus = t.response.status; this.responseHeaders = t.response.headers; this.responseBody = t.response.body; } Transaction.prototype.resourceTitle = function () { return "## " + this.resourceName + " [" + this.uriTemplate + "]"; }; Transaction.prototype.parameters = function () { return this.params.reduce(function (carry, param) { return carry + "\n + " + param.name + " (" + (param.required ? 'required' : 'optional') + ', ' + param.type + ', `' + param.example + "`)"; }, this.params.length && "+ Parameters"); }; Transaction.prototype.transactionTitle = function () { return "### " + this.actionName + " [" + this.requestMethod + "]"; }; Transaction.prototype.requestTitle = function (contentType) { contentType = this.requestHeaders['Content-Type'] && this.requestHeaders['Content-Type'].value; return "+ Request (" + (contentType || 'application/json') + ")"; }; Transaction.prototype.requestHeaderString = function (headerKeys) { headerKeys = Object.keys(this.requestHeaders) .filter(function (key) { return key !== 'Content-Type'; }); return headerKeys.reduce((function(prev, cur) { return prev + "\n " + cur + ': ' + this.requestHeaders[cur].value; }).bind(this), headerKeys.length && " + Headers\n"); }; Transaction.prototype.requestBodyString = function () { try { this.requestBody = JSON.stringify(JSON.parse(this.requestBody)); } catch (e) { this.requestBody = '{}'; } return this.requestBody && (" + Body\n\n " + this.requestBody); }; Transaction.prototype.responseTitle = function (contentType) { contentType = this.responseHeaders['Content-Type'] ? " (" + this.responseHeaders['Content-Type'].value + ")" : ""; return "+ Response " + this.responseStatus + contentType; }; Transaction.prototype.responseBodyString = function () { return this.responseBody && " " + JSON.stringify(JSON.parse(this.responseBody)); }; Transaction.prototype.resourceHead = function () { return [ this.resourceTitle(), this.parameters() ].filter(function (val) { return val; }).join("\n\n"); }; Transaction.prototype.body = function () { return [ this.transactionTitle(), this.requestTitle(), this.requestHeaderString(), this.requestBodyString(), this.responseTitle(), this.responseBodyString() ].filter(function (val) { return val; }).join("\n\n"); }; })();