-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgen_core.js
66 lines (60 loc) · 1.94 KB
/
gen_core.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
const { compile } = require("./json-schema-to-typescript");
const { generateApiMethod } = require("./method_generator");
module.exports.genMethods = (oa, contractsFilename, fetchWrapperFilename, baseUrlName) => {
const methods = Object.entries(oa.paths)
.map(([pathKey, pathProps]) =>
Object.entries(pathProps).map(([opKey, opProps]) => {
const op = opProps;
const [cName, mName] = (op.operationId || "")
.replace("Controller", "")
.split("_");
const operation = {
oa: oa,
controllerName: cName,
name: mName,
url: pathKey,
httpMethodType: opKey,
security: op.security,
params: op.parameters,
reqBody: op.requestBody,
responses: op.responses
? Object.entries(op.responses).map(([rKey, rProps]) => ({
...rProps,
code: parseInt(rKey),
}))
: [],
};
return operation;
})
)
.flat();
const controllersMap = new Map(
new Set(methods.map((x) => x.controllerName).map((x) => [x, []]))
);
methods.forEach((x) => controllersMap.get(x.controllerName).push(x));
const methodsStr = [...controllersMap]
.map(([controllerName, ops]) => {
return `\n${controllerName}: {\n${ops
.map((x) => generateApiMethod(x, baseUrlName))
.join(",\n")}\n},`;
})
.join("\n");
const apiClassStr = `
import { ${baseUrlName} } from './constants';
import {
${Object.keys(oa.components.schemas)
.filter((x) => new RegExp(`\\W${x}\\W`, "g").test(methodsStr))
.join(",\n")}
} from './${contractsFilename}';
import { fetchWrapper } from './${fetchWrapperFilename}';
export const api = {
${methodsStr}
}`;
return apiClassStr;
};
module.exports.genData = (oa) => {
const typesStr = Object.entries(oa.components.schemas).map(([key, val]) =>
compile(val, key)
);
return typesStr.join("\n");
};