Pre-render ReDoc

redoc-cliはexpandResponsesは200のみとすると数値と認識されてしまい設定できないため202,204という指定にしています
This commit is contained in:
tamaina 2020-04-03 17:13:41 +09:00
parent 1e3d2f21f9
commit aa49517740
11 changed files with 885 additions and 112 deletions

View file

@ -15,7 +15,7 @@
"ormconfig": "node ./built/ormconfig.js", "ormconfig": "node ./built/ormconfig.js",
"migrate": "ts-node ./node_modules/typeorm/cli.js migration:run", "migrate": "ts-node ./node_modules/typeorm/cli.js migration:run",
"migrateandstart": "npm run migrate && npm run start", "migrateandstart": "npm run migrate && npm run start",
"build": "webpack && gulp build", "build": "webpack && gulp build && npm run redoc",
"webpack": "webpack", "webpack": "webpack",
"watch": "webpack --watch", "watch": "webpack --watch",
"gulp": "gulp build", "gulp": "gulp build",
@ -23,7 +23,8 @@
"cleanall": "gulp cleanall", "cleanall": "gulp cleanall",
"lint": "tslint 'src/**/*.ts'", "lint": "tslint 'src/**/*.ts'",
"test": "cross-env TS_NODE_FILES=true gulp test", "test": "cross-env TS_NODE_FILES=true gulp test",
"format": "gulp format" "format": "gulp format",
"redoc": "node ./built/tools/ make-api-json && redoc-cli bundle built/client/assets/api.json -o built/client/assets/redoc.html --options.expandResponses '200,204' --options.expandSingleSchemaField true --cdn true"
}, },
"resolutions": { "resolutions": {
"https-proxy-agent": "^3.0.0", "https-proxy-agent": "^3.0.0",
@ -202,6 +203,7 @@
"reconnecting-websocket": "4.4.0", "reconnecting-websocket": "4.4.0",
"redis": "3.0.2", "redis": "3.0.2",
"redis-lock": "0.1.4", "redis-lock": "0.1.4",
"redoc-cli": "0.9.7",
"reflect-metadata": "0.1.13", "reflect-metadata": "0.1.13",
"rename": "1.0.4", "rename": "1.0.4",
"request": "2.88.2", "request": "2.88.2",

View file

@ -1,24 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Misskey API</title>
<!-- needed for adaptive design -->
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,700|Roboto:300,400,700" rel="stylesheet">
<!--
ReDoc doesn't change outer page styles
-->
<style>
body {
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<redoc spec-url='/api.json'></redoc>
<script src="https://cdn.jsdelivr.net/npm/redoc@next/bundles/redoc.standalone.js"> </script>
</body>
</html>

View file

@ -15,7 +15,6 @@ import * as MarkdownIt from 'markdown-it';
import packFeed from './feed'; import packFeed from './feed';
import { fetchMeta } from '../../misc/fetch-meta'; import { fetchMeta } from '../../misc/fetch-meta';
import { genOpenapiSpec } from '../api/openapi/gen-spec';
import config from '../../config'; import config from '../../config';
import { Users, Notes, Emojis, UserProfiles, Pages } from '../../models'; import { Users, Notes, Emojis, UserProfiles, Pages } from '../../models';
import parseAcct from '../../misc/acct/parse'; import parseAcct from '../../misc/acct/parse';
@ -97,13 +96,15 @@ router.get('/api-doc', async ctx => {
}); });
}); });
router.get('/api.json', async ctx => {
await send(ctx as any, '/assets/api.json', {
root: client
});
});
// URL preview endpoint // URL preview endpoint
router.get('/url', require('./url-preview')); router.get('/url', require('./url-preview'));
router.get('/api.json', async ctx => {
ctx.body = genOpenapiSpec();
});
router.get('/docs.json', async ctx => { router.get('/docs.json', async ctx => {
const lang = ctx.query.lang; const lang = ctx.query.lang;
if (!Object.keys(locales).includes(lang)) { if (!Object.keys(locales).includes(lang)) {

View file

@ -14,7 +14,8 @@ async function main(name: string, url: string, alias?: string): Promise<any> {
}); });
} }
const args = process.argv.slice(2); export default () => {
const args = process.argv.slice(3);
const name = args[0]; const name = args[0];
const url = args[1]; const url = args[1];
@ -28,3 +29,4 @@ main(name, url).then(() => {
console.warn(e); console.warn(e);
process.exit(1); process.exit(1);
}); });
}

8
src/tools/index.ts Normal file
View file

@ -0,0 +1,8 @@
import { initDb } from '../db/postgre';
import 'reflect-metadata';
console.log('Connecting DB...')
initDb().then(() => {
console.log('Connedted!')
require(`./${process.argv[2]}`).default();
});

View file

@ -0,0 +1,9 @@
import { writeFileSync } from 'fs';
import { join } from 'path';
import { genOpenapiSpec } from '../server/api/openapi/gen-spec';
export default () => {
writeFileSync(join(__dirname, '../../built/client/assets/api.json'), JSON.stringify(genOpenapiSpec()));
console.log('Done!');
process.exit(0);
};

View file

@ -21,7 +21,8 @@ async function main(username: string) {
} }
} }
const args = process.argv.slice(2); export default () => {
const args = process.argv.slice(3);
main(args[0]).then(() => { main(args[0]).then(() => {
console.log('Success'); console.log('Success');
@ -30,3 +31,4 @@ main(args[0]).then(() => {
console.error(`Error: ${e.message || e}`); console.error(`Error: ${e.message || e}`);
process.exit(1); process.exit(1);
}); });
}

View file

@ -4,11 +4,15 @@ async function main(uri: string): Promise<any> {
return await updateQuestion(uri); return await updateQuestion(uri);
} }
const args = process.argv.slice(2); export default () => {
const args = process.argv.slice(3);
const uri = args[0]; const uri = args[0];
main(uri).then(result => { main(uri).then(result => {
console.log(`Done: ${result}`); console.log(`Done: ${result}`);
process.exit(0);
}).catch(e => { }).catch(e => {
console.warn(e); console.warn(e);
process.exit(1);
}); });
}

View file

@ -6,8 +6,9 @@ async function main(acct: string): Promise<any> {
await resolveUser(username, host, {}, true); await resolveUser(username, host, {}, true);
} }
export default () => {
// get args // get args
const args = process.argv.slice(2); const args = process.argv.slice(3);
let acct = args[0]; let acct = args[0];
// normalize args // normalize args
@ -22,6 +23,9 @@ console.log(`resync ${acct}`);
main(acct).then(() => { main(acct).then(() => {
console.log('Done'); console.log('Done');
process.exit(0);
}).catch(e => { }).catch(e => {
console.warn(e); console.warn(e);
process.exit(1);
}); });
}

View file

@ -35,8 +35,9 @@ async function main(username: string, headers?: string[]) {
} }
} }
export default () => {
// get args // get args
const args = process.argv.slice(2); const args = process.argv.slice(3);
let username = args[0]; let username = args[0];
let headers: string[] | undefined; let headers: string[] | undefined;
@ -54,3 +55,5 @@ main(username, headers).then(() => {
console.warn(e); console.warn(e);
process.exit(1); process.exit(1);
}); });
}

792
yarn.lock

File diff suppressed because it is too large Load diff