diff --git a/server/fixture/markdown/markdown.html b/server/markdown/fixture/markdown.html similarity index 100% rename from server/fixture/markdown/markdown.html rename to server/markdown/fixture/markdown.html diff --git a/server/fixture/markdown/markdown.md b/server/markdown/fixture/markdown.md similarity index 100% rename from server/fixture/markdown/markdown.md rename to server/markdown/fixture/markdown.md diff --git a/server/markdown.js b/server/markdown/index.js similarity index 81% rename from server/markdown.js rename to server/markdown/index.js index 5982701f..1f913ccd 100644 --- a/server/markdown.js +++ b/server/markdown/index.js @@ -1,7 +1,7 @@ 'use strict'; -const DIR_ROOT = __dirname + '/../'; const fs = require('fs'); +const {join} = require('path'); const { callbackify, promisify, @@ -9,11 +9,19 @@ const { const pullout = require('pullout'); const ponse = require('ponse'); -const markdown = require('markdown-it')(); +const threadIt = require('thread-it'); const readFile = promisify(fs.readFile); +const parse = threadIt(join(__dirname, 'worker')); -const root = require('./root'); +const root = require('../root'); + +threadIt.init(); + +// warm up +parse(''); + +const DIR_ROOT = __dirname + '/../../'; module.exports = callbackify(async (name, rootDir, request) => { check(name, request); @@ -48,18 +56,9 @@ async function onGET(request, name, root) { 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!'); diff --git a/server/markdown.spec.js b/server/markdown/index.spec.js similarity index 94% rename from server/markdown.spec.js rename to server/markdown/index.spec.js index 05510a65..3e6859d1 100644 --- a/server/markdown.spec.js +++ b/server/markdown/index.spec.js @@ -7,11 +7,11 @@ const {promisify} = require('util'); const tryToCatch = require('try-to-catch'); -const markdown = require('./markdown'); +const markdown = require('.'); const _markdown = promisify(markdown); -const fixtureDir = path.join(__dirname, 'fixture', 'markdown'); -const cloudcmd = require('..'); +const fixtureDir = path.join(__dirname, 'fixture'); +const cloudcmd = require('../..'); const config = { auth: false, }; diff --git a/server/markdown/worker.js b/server/markdown/worker.js new file mode 100644 index 00000000..ae2a95fd --- /dev/null +++ b/server/markdown/worker.js @@ -0,0 +1,4 @@ +'use strict'; + +const markdownIt = require('markdown-it')(); +module.exports = (a) => markdownIt.render(a);