72 lines
1.8 KiB
TypeScript
72 lines
1.8 KiB
TypeScript
import fs from "fs";
|
|
import path from "path";
|
|
|
|
export type HttpMethods = "POST" | "GET" | "PUT" | "DELETE";
|
|
export type ApiResponse = "status object" | Object | string;
|
|
|
|
export class Docs {
|
|
private name: string;
|
|
private operation: string;
|
|
private route: string;
|
|
private method: HttpMethods;
|
|
private parameters?: Object[];
|
|
private description?: string;
|
|
private body?: Object;
|
|
private response?: ApiResponse;
|
|
|
|
public constructor(
|
|
name: string,
|
|
operation: string,
|
|
route: string,
|
|
method: HttpMethods,
|
|
description?: string,
|
|
parameters?: Object[],
|
|
body?: Object,
|
|
response?: ApiResponse,
|
|
) {
|
|
this.name = name;
|
|
this.operation = operation;
|
|
this.route = route;
|
|
this.method = method;
|
|
description ? (this.description = description) : null;
|
|
parameters ? (this.parameters = parameters) : null;
|
|
body ? (this.body = body) : null;
|
|
response ? (this.response = response) : null;
|
|
|
|
this.generate();
|
|
}
|
|
|
|
private generate(): boolean {
|
|
if (!process.env.DOCS_GEN) {
|
|
return false;
|
|
}
|
|
|
|
const jsonPath = path.join(__dirname, "../public/api.json");
|
|
const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, "../../package.json")).toString());
|
|
|
|
const jsonAPI = () => JSON.parse(fs.readFileSync(jsonPath).toString());
|
|
const genJsonAPI = () => fs.writeFileSync(jsonPath, JSON.stringify({ version: pkg.version, endpoints: {} }));
|
|
|
|
if (!fs.existsSync(path.join(__dirname, "../public"))) {
|
|
fs.mkdirSync(path.join(__dirname, "../public"));
|
|
}
|
|
|
|
if (!fs.existsSync(jsonPath)) {
|
|
genJsonAPI();
|
|
}
|
|
|
|
if (jsonAPI().version != pkg.version) {
|
|
genJsonAPI();
|
|
}
|
|
|
|
const data = jsonAPI();
|
|
data.endpoints[this.name] ? undefined : (data.endpoints[this.name] = {});
|
|
data.endpoints[this.name][this.operation] = this;
|
|
fs.writeFileSync(jsonPath, JSON.stringify(data));
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
export default Docs;
|