From e044d11782b0f7237b7f1354aba0f00365d91885 Mon Sep 17 00:00:00 2001 From: syuilo Date: Thu, 5 Aug 2021 00:15:51 +0900 Subject: Improve docs --- src/server/web/index.ts | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) (limited to 'src/server') diff --git a/src/server/web/index.ts b/src/server/web/index.ts index 50fea757f2..a732e7f5b4 100644 --- a/src/server/web/index.ts +++ b/src/server/web/index.ts @@ -121,14 +121,22 @@ router.get('/api.json', async ctx => { router.get('/docs.json', async ctx => { const lang = ctx.query.lang; + const query = ctx.query.q; if (!Object.keys(locales).includes(lang)) { ctx.body = []; return; } - const paths = glob.sync(__dirname + `/../../../src/docs/${lang}/*.md`); - const docs: { path: string; title: string; }[] = []; + const dirPath = `${__dirname}/../../../src/docs/${lang}`.replace(/\\/g, '/'); + const paths = glob.sync(`${dirPath}/**/*.md`); + const docs: { path: string; title: string; summary: string; }[] = []; for (const path of paths) { const md = fs.readFileSync(path, { encoding: 'utf8' }); + + if (query && query.length > 0) { + // TODO: カタカナをひらがなにして比較するなどしたい + if (!md.includes(query)) continue; + } + const parsed = markdown.parse(md, {}); if (parsed.length === 0) return; @@ -147,9 +155,22 @@ router.get('/docs.json', async ctx => { } } + const firstParagrapfTokens = []; + while (buf[0].type !== 'paragraph_open') { + buf.shift(); + } + buf.shift(); + while (buf[0].type as string !== 'paragraph_close') { + const token = buf.shift(); + if (token) { + firstParagrapfTokens.push(token); + } + } + docs.push({ - path: path.split('/').pop()!.split('.')[0], - title: markdown.renderer.render(headingTokens, {}, {}) + path: path.replace(`${dirPath}/`, '').split('.')[0], + title: markdown.renderer.render(headingTokens, {}, {}), + summary: markdown.renderer.render(firstParagrapfTokens, {}, {}), }); } -- cgit v1.2.3-freya