-
Notifications
You must be signed in to change notification settings - Fork 2
/
generateCurls.js
81 lines (68 loc) · 2.62 KB
/
generateCurls.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
const fs = require('fs');
const path = require('path');
require('dotenv').config({ path: './.env' });
const domain = process.env.APPLICATION_HOST;
const port = process.env.APPLICATION_PORT;
const generateRandomValue = () => Math.floor(Math.random() * 10000);
const replacePlaceholdersWithRandomValues = (obj) => {
const jsonString = JSON.stringify(obj);
const replacedString = jsonString.replace(/<:[^>]+>/g, generateRandomValue);
return JSON.parse(replacedString);
};
const generateCurlCommands = (routes) => {
return routes.map((route, index) => {
const { method, route: endpoint, requestData } = route;
const pathParams = endpoint.match(/:([^/]+)/g) || [];
let url = endpoint;
pathParams.forEach((param) => {
const randomValue = generateRandomValue();
url = url.replace(param, randomValue);
});
const queryParams = [];
const queryParamRegex = /<:([^>]+)>/g;
let match;
while ((match = queryParamRegex.exec(url)) !== null) {
const paramName = match[1];
const randomValue = generateRandomValue();
queryParams.push(`${paramName}=${randomValue}`);
}
if (queryParams.length > 0) {
url += `?${queryParams.join('&')}`;
}
const methodOption = method.toUpperCase();
let curlCommand = `curl -X ${methodOption} "http://${domain}:${port}${url}"`;
if (['POST', 'PUT'].includes(methodOption)) {
const requestDataWithRandomValues = requestData ? replacePlaceholdersWithRandomValues(requestData) : {};
curlCommand += ` -H "Content-Type: application/json" -d '${JSON.stringify(requestDataWithRandomValues)}'`;
}
return `# Command ${index + 1}\n${curlCommand}\n`;
});
};
const clearDirectory = (directoryPath) => {
if (fs.existsSync(directoryPath)) {
fs.readdirSync(directoryPath).forEach((file) => {
const filePath = path.join(directoryPath, file);
if (fs.lstatSync(filePath).isDirectory()) {
clearDirectory(filePath);
} else {
fs.unlinkSync(filePath);
}
});
}
};
const processConfigs = () => {
const configDir = path.join(__dirname, 'routeConfigs');
const curlDir = path.join(__dirname, 'curls');
clearDirectory(curlDir);
if (!fs.existsSync(curlDir)) fs.mkdirSync(curlDir);
const files = fs.readdirSync(configDir);
files.forEach((file) => {
const filePath = path.join(configDir, file);
const fileContent = JSON.parse(fs.readFileSync(filePath, 'utf8'));
const curlCommands = generateCurlCommands(fileContent.routes);
const outputFilePath = path.join(curlDir, `${path.basename(file, path.extname(file))}.txt`);
fs.writeFileSync(outputFilePath, curlCommands.join('\n'), 'utf8');
console.log(`Curl commands have been written to ${outputFilePath}`);
});
};
processConfigs();