const fs = require('fs'); function parseExampleRes(data) { let html = ''; let header_html = ""; if (data.response.headers.length > 0) { data.response.headers.forEach(elem => { if (elem.key === "Content-Type") { header_html += "

""+elem.key+"" : ""+elem.value+""

"; return; } }); } if (data.response.bodyOptions && data.response.bodyOptions !== "") { if (header_html === "") { Object.keys(data.response.bodyOptions).forEach(function(typeName) { if (typeName === "language") { header_html += `

"Content-type" : "${data.response.bodyOptions[typeName]}"

`; return; } }); } } if (header_html !== "") { header_html = `

Headers : 

${header_html} `; html += header_html; } if (data.response.cookies.length > 0) { html += `

Cookies : 

`; data.response.cookies.forEach(elem => { html += "

""+elem.key+"" : ""+elem.value+""

"; }); } if (data.response.body !== "") { let body = `

Body : 

`; switch (typeof data.response.body) { case 'string': body += `
${data.response.body}
`; break; case 'object': body = ""; data.response.body.forEach(item => { body += `
${JSON.stringify(item, null, 2)}
`; }); break; default: body = ""; break; } html += body; } return html; } function parseExampleReq(data) { let html = ''; let header_html = ""; if (data.request.header.length > 0) { data.request.header.forEach(elem => { if (elem.key === "Content-Type") { header_html += "

""+elem.key+"" : ""+elem.value+""

"; return; } }); } if (data.request.bodyOptions && data.request.bodyOptions !== "") { if (header_html === "") { Object.keys(data.request.bodyOptions).forEach(function(typeName) { if (typeName === "language") { header_html += `

"Content-type" : "${data.request.bodyOptions[typeName]}"

`; return; } }); } } if (header_html !== "") { header_html = `

Headers : 

${header_html} `; html += header_html; } if(data.request.auth.length > 0) { html += "

Auth : 

"; data.request.auth.forEach(elem => { html += "

key : "+elem.key+", value : "+elem.value+", type : "+elem.type+"

"; }); } if (data.request.variables.length > 0) { html += `

Path Variables: 

`; data.request.variables.forEach(elem => { html += "

""+elem.key+"" : ""+elem.value+""

"; }); } if (data.request.queryes.length > 0) { html += `

Query Parameters : 

`; data.request.queryes.forEach(elem => { html += "

""+elem.key+"" : ""+elem.value+""

"; }); } if (data.request.body !== "") { let body = `

Body : 

`; switch (typeof data.request.body) { case 'string': body += `
${data.request.body}
`; break; case 'object': data.request.body.forEach(item => { body += `
${JSON.stringify(item, null, 2)}
`; }); break; default: body = ""; break; } html += body; } return html; } function generateExamples(data) { let html = `

Success :

`; if (data.success.length > 0) { data.success.forEach(function(item) { let desc = ""; if (item.desc && item.desc !== "") { desc = `

Description :  ${item.desc.replace(/ /g, " ")}

`; } html += `

Request : ${item.name}

${desc}

URL :  ${item.request.url}

Method :  ${item.request.method}

${parseExampleReq(item)}

Response :

Status : ${item.response.status}

Code : ${item.response.code}

${parseExampleRes(item)}
`; }); } else { html += `

No examples

`; } html += `

Exceptions :

`; if (data.exceptions.length > 0) { data.exceptions.forEach(function(item){ let desc = ""; if (item.desc && item.desc !== "") { desc = `

Description :  ${item.desc.replace(/ /g, " ")}

`; } html += `

Request : ${item.name}

${desc}

URL :  ${item.request.url}

Method :  ${item.request.method}

${parseExampleReq(item)}

Response :

Code : ${item.response.code}

Status : ${item.response.status}

${parseExampleRes(item)}
`; }); } else { html += `

No examples

`; } return html; } function generateApiHtml(data) { let html = `

${data.name}

`; let header_html = ""; let auth_html = ""; if (data.header.length > 0) { header_html = ""; data.header.forEach(elem => { header_html += "

""+elem.key+"" : ""+elem.value+""

"; }); } if(data.auth.length > 0) { auth_html="

Auth : 

"; data.auth.forEach(elem => { auth_html += "

key : "+elem.key+", value : "+elem.value+", type : "+elem.type+"

"; }); } let body = "
not required, leave blank
"; switch (typeof data.body) { case 'string': if (data.body !== "") { body = `
${data.body}
`; } break; case 'object': body = ""; data.body.forEach(item => { body += `
${JSON.stringify(item, null, 2)}
`; }); break; default: body = "
not required, leave blank
"; break; } if (data.bodyOptions && data.bodyOptions !== "") { Object.keys(data.bodyOptions).forEach(function(typeName) { if (typeName === "language") { header_html += `

"Content-type" : "${data.bodyOptions[typeName]}"

`; } }); } let variables = "

not required, leave blank

"; if (data.variables.length > 0) { variables = ""; data.variables.forEach(elem => { variables += "

""+elem.key+"" : ""+elem.value+""

"; }); } let queryes = "

not required, leave blank

"; if (data.queryes.length > 0) { queryes = ""; data.queryes.forEach(elem => { queryes += "

""+elem.key+"" : ""+elem.value+""

"; }); } if (header_html === "") { header_html = "

not required, leave blank

"; } let desc = ""; if (data.desc && data.desc !== "") { desc = `

Description :  ${data.desc.replace(/ /g, " ")}

`; } html += `${desc}

URL :  ${data.url}

Method :  ${data.method}

Headers : 

${header_html+auth_html}

Path Variables: 

${variables}

Query Parameters : 

${queryes}

Body : 

${body}

Examples : 

${generateExamples(data.examples)}

`; return html; } module.exports = function htmlGenerator(collection_name, data, outputPath) { console.log("Start parse"); let html = `

${collection_name} Documentation

`; Object.keys(data).forEach(function(scope) { if (!data[scope].apis) { let trigger = false; Object.keys(data[scope]).forEach(function(subScope) { if (trigger === false) { html += `

${scope}

${subScope}


`; trigger = true; } else { html += `

${subScope}


`; } data[scope][subScope].apis.forEach(api => { html += `
`; html += generateApiHtml(api); html += `
`; }); html += `
`; }); } else { html += `

${scope}


`; data[scope].apis.forEach(api => { html += `
`; html += generateApiHtml(api); html += `
`; }); html += `
`; } }); html += ""; fs.writeFile(`${outputPath}/${collection_name}.html`, html, 'utf8', (err) => { if (err) { console.log(err); } console.log(`${outputPath}/${collection_name}.html`); }); console.log("End parse"); return html; };