Sharkey/src/server/api/openapi/description.ts
2020-07-18 12:12:10 +09:00

52 lines
1.4 KiB
TypeScript

import endpoints from '../endpoints';
import * as locale from '../../../../locales/';
import { kinds as kindsList } from '../../../misc/api-permissions';
export interface IKindInfo {
endpoints: string[];
descs: { [x: string]: string; };
}
export function kinds() {
const kinds = Object.fromEntries(
kindsList
.map(k => [k, {
endpoints: [],
descs: Object.fromEntries(
Object.keys(locale)
.map(l => [l, locale[l]._permissions[k] as string])
)
} as IKindInfo])
);
const errors = [] as string[][];
for (const endpoint of endpoints.filter(ep => !ep.meta.secure)) {
if (endpoint.meta.kind) {
const kind = endpoint.meta.kind;
if (kind in kinds) kinds[kind].endpoints.push(endpoint.name);
else errors.push([kind, endpoint.name]);
}
}
if (errors.length > 0) throw Error('\n ' + errors.map((e) => `Unknown kind (permission) "${e[0]}" found at ${e[1]}.`).join('\n '));
return kinds;
}
export function getDescription(lang = 'ja-JP'): string {
const permissionTable = Object.entries(kinds())
.map(e => `|${e[0]}|${e[1].descs[lang]}|${e[1].endpoints.map(f => `[${f}](#operation/${f})`).join(', ')}|`)
.join('\n');
const descriptions: { [x: string]: string } = {
'ja-JP': `
# Permissions
|Permisson (kind)|Description|Endpoints|
|:--|:--|:--|
${permissionTable}
`
};
return lang in descriptions ? descriptions[lang] : descriptions['ja-JP'];
}