zcloudcmd
Version:
### [Main][MainURL] [Blog][BlogURL] Live([Heroku][HerokuURL], [Now][NowURL])
71 lines (50 loc) • 1.45 kB
JavaScript
const DIR_ROOT = __dirname + '/../';
const fs = require('fs');
const {
callbackify,
promisify,
} = require('util');
const pullout = require('pullout');
const ponse = require('ponse');
const markdown = require('markdown-it')();
const readFile = promisify(fs.readFile);
const root = require('./root');
module.exports = callbackify(async (name, request) => {
check(name, request);
const {method} = request;
switch(method) {
case 'GET':
return onGET(request, name);
case 'PUT':
return onPUT(request);
}
});
function parseName(query, name) {
const shortName = name.replace('/markdown', '');
if (query === 'relative')
return DIR_ROOT + shortName;
return root(shortName);
}
async function onGET(request, name) {
const query = ponse.getQuery(request);
const fileName = parseName(query, name);
const data = await readFile(fileName, 'utf8');
return parse(data);
}
async function onPUT(request) {
const data = await pullout(request);
return parse(data);
}
const parse = promisify((data, callback) => {
process.nextTick(() => {
const md = markdown.render(data);
callback(null, md);
});
});
function check(name, request) {
if (typeof name !== 'string')
throw Error('name should be string!');
if (!request)
throw Error('request could not be empty!');
}
;