-
Notifications
You must be signed in to change notification settings - Fork 4
/
zodios_endpoints.js
123 lines (108 loc) · 4.41 KB
/
zodios_endpoints.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
const fs = require('fs');
const path = require('path');
const util = require('util');
const exec = util.promisify(require('child_process').exec);
const pLimit = require('p-limit');
const { generateZodClientFromOpenAPI } = require('@alexop/openapi-zod-client');
const SwaggerParser = require('@apidevtools/swagger-parser');
const limit = pLimit(2);
const FOLDER_OPENAPI = 'openapi';
const FOLDER_ZODIOS = 'src/endpoints';
const handlebars = require('handlebars').create();
handlebars.registerHelper("ifeq", function (a, b, options) {
if (a === b) {
return options.fn(this);
}
return options.inverse(this);
});
handlebars.registerHelper("ifNotEmptyObj", function (obj, options) {
if (typeof obj === "object" && Object.keys(obj).length > 0) {
return options.fn(this);
}
return options.inverse(this);
});
handlebars.registerHelper("toCamelCase", function (input) {
if (/^[a-z][a-zA-Z0-9]*$/.test(input)) {
return input
}
const words = input.split(/[\s_-]/);
return words
.map((word, index) => {
if (index === 0) {
return word.toLowerCase();
}
return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
})
.join("");
});
handlebars.registerHelper('toUpperCase', (str) => str.toUpperCase());
handlebars.registerHelper('regexReplace', (str, regex, replace) => {
return str.replace(new RegExp(regex), replace);
});
console.log('Generating OpenAPI files from Swagger files...');
const urls = fs.readFileSync('urls.txt', 'utf-8')
.split('\n')
.filter((url) => url.trim() !== '');
Promise.all(
urls.map((url) =>
limit(async () => {
if (url.trim()) {
console.log(`Converting ${url}`);
const [, subdomain, domain] = url.match(/https:\/\/([^\.]+)\.(.+)\//);
const apiName = url.split('/').slice(-1)[0];
await util.promisify(exec)(
`java -jar swagger-codegen-cli-3.0.42.jar generate -l openapi-yaml -i ${url} -o "${FOLDER_OPENAPI}/${subdomain}${apiName}"`,
);
}
}),
),
).then(() => {
console.log('Generating Zodios endpoints...');
const openApiFiles = fs.readdirSync(FOLDER_OPENAPI).filter((file) => {
const folderContents = fs.readdirSync(`${FOLDER_OPENAPI}/${file}`);
return folderContents.some((file) => file.endsWith('.yaml'));
});