summaryrefslogtreecommitdiff
path: root/src/server/web/docs.ts
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-07-06 02:58:29 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-07-06 02:58:29 +0900
commit9b41023c43add194d69259e0a8a8c323aa44c778 (patch)
treeae7c01a2e0cded0709833c50da0a7f8256261243 /src/server/web/docs.ts
parentwip (diff)
downloadmisskey-9b41023c43add194d69259e0a8a8c323aa44c778.tar.gz
misskey-9b41023c43add194d69259e0a8a8c323aa44c778.tar.bz2
misskey-9b41023c43add194d69259e0a8a8c323aa44c778.zip
wip
Diffstat (limited to 'src/server/web/docs.ts')
-rw-r--r--src/server/web/docs.ts70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/server/web/docs.ts b/src/server/web/docs.ts
index e65cc87b12..849194388c 100644
--- a/src/server/web/docs.ts
+++ b/src/server/web/docs.ts
@@ -5,9 +5,53 @@
import ms = require('ms');
import * as Router from 'koa-router';
import * as send from 'koa-send';
+import { Context } from 'cafy';
+import ObjectContext from 'cafy/built/types/object';
+import config from '../../config';
+import generateVars from '../../client/docs/vars';
const docs = `${__dirname}/../../client/docs/`;
+// WIP type
+const parseEPDefParam = (key: string, param: Context) => {
+ return Object.assign({
+ name: key,
+ type: param.getType()
+ }, param.data);
+};
+
+const sortParams = (params: Array<{name: string}>) => {
+ params.sort((a, b) => {
+ if (a.name < b.name)
+ return -1;
+ if (a.name > b.name)
+ return 1;
+ return 0;
+ });
+ return params;
+};
+
+// WIP type
+const extractDefs = (params: Context[]) => {
+ let defs: any[] = [];
+
+ params.forEach(param => {
+ if (param.data && param.data.ref) {
+ const props = (param as ObjectContext<any>).props;
+ defs.push({
+ name: param.data.ref,
+ params: sortParams(Object.keys(props).map(k => parseEPDefParam(k, props[k])))
+ });
+
+ const childDefs = extractDefs(Object.keys(props).map(k => props[k]));
+
+ defs = defs.concat(childDefs);
+ }
+ });
+
+ return sortParams(defs);
+};
+
const router = new Router();
router.get('/assets/*', async ctx => {
@@ -18,6 +62,32 @@ router.get('/assets/*', async ctx => {
});
});
+router.get('/*/api/endpoints/*', async ctx => {
+ const ep = require('../../../built/server/api/endpoints/' + ctx.params[1]).meta;
+
+ const vars = {
+ endpoint: ep.name,
+ url: {
+ host: config.api_url,
+ path: ep.name
+ },
+ desc: ep.desc,
+ // @ts-ignore
+ params: sortParams(Object.keys(ep.params).map(k => parseEPDefParam(k, ep.params[k]))),
+ paramDefs: extractDefs(Object.keys(ep.params).map(k => ep.params[k])),
+ };
+ console.log(vars);
+
+ const commonVars = await generateVars();
+
+ await ctx.render('../../../../src/client/docs/api/endpoints/view', Object.assign({}, vars, {
+ lang: 'ja',
+ title: ep.name,
+ kebab: (string: string) => string.replace(/([a-z])([A-Z])/g, '$1-$2').replace(/\s+/g, '-').toLowerCase(),
+ common: commonVars
+ }));
+});
+
router.get('*', async ctx => {
await send(ctx, `${ctx.params[0]}.html`, {
root: docs