Streamline management of API collections #1

Merged
administrator merged 43 commits from feature/script-autogenerate-http into main 2026-08-19 14:54:42 +02:00
Showing only changes of commit f16afd8baa - Show all commits
+70 -3
View File
@@ -654,6 +654,72 @@ function writeEnvironmentTemplates(sourceDir, outputRoot) {
return dotenvVariablesByTarget;
}
function writeJsFiles(sourceDir, outputRoot) {
const targets = [];
// const dotenvVariablesByTarget = new Map();
const visit = (currentDir) => {
const entries = fs.readdirSync(currentDir, { withFileTypes: true });
const hasJsFiles = entries.some((entry) => entry.isFile() && /\.js$/i.test(entry.name));
if (hasJsFiles) {
targets.push(currentDir);
}
for (const entry of entries) {
if (!entry.isDirectory() || entry.name.startsWith('.') || entry.name === 'node_modules') {
continue;
}
visit(path.join(currentDir, entry.name));
}
};
visit(sourceDir);
for (const dir of targets) {
const relativeDir = path.relative(sourceDir, dir);
const targetDir = relativeDir && relativeDir !== '.' ? path.join(outputRoot, relativeDir) : outputRoot;
ensureDir(targetDir);
const jsFileDir = dir;
if (!fs.existsSync(jsFileDir)) {
continue;
}
const jsFiles = fs.readdirSync(jsFileDir, { withFileTypes: true })
.filter((entry) => entry.isFile() && /\.js$/i.test(entry.name))
.map((entry) => [ path.join(jsFileDir, entry.name), path.join(targetDir, entry.name) ]);
// const variableNames = [];
// const seenNames = new Set();
// for (const jsFile of jsFiles) {
// const parsed = parseYaml(jsFile);
// const variables = Array.isArray(parsed.variables) ? parsed.variables : [];
// for (const variable of variables) {
// if (!variable || !variable.name) {
// continue;
// }
// const name = String(variable.name).trim();
// if (!name || seenNames.has(name)) {
// continue;
// }
// seenNames.add(name);
// variableNames.push(name);
// }
// }
// const templateContent = variableNames.length > 0 ? `${variableNames.map(v => `${v}=${DEFAULT_ENV_VAR_VALUE}`).join('\n')}\n` : '';
// fs.writeFileSync(path.join(targetDir, '.env.template'), templateContent, 'utf8');
// dotenvVariablesByTarget.set(targetDir, new Set(variableNames));
for (const jsFile of jsFiles) {
fs.copyFileSync(jsFile[0], jsFile[1]);
}
}
return targets;
}
function cleanFolder(dir) {
if (!fs.existsSync(dir)) return;
@@ -670,16 +736,15 @@ function cleanFolder(dir) {
const remaining = fs.readdirSync(fullPath);
if (remaining.length === 0) {
fs.rmdirSync(fullPath);
//console.log(`🗑️ Cartella rimossa: ${fullPath}`);
}
} else if (entry.isFile()) {
// File da eliminare
if (
entry.name.endsWith(".js") ||
entry.name.endsWith(".http") ||
entry.name.endsWith(".env.template")
) {
fs.unlinkSync(fullPath);
console.log(`🗑️ File rimosso: ${fullPath}`);
}
}
}
@@ -712,6 +777,8 @@ function main() {
const outputRoot = path.join(outputBaseRoot, collection.name);
ensureDir(outputRoot);
const writtenJsFiles = writeJsFiles(sourceDir, outputRoot);
const dotenvVariablesByTarget = writeEnvironmentTemplates(sourceDir, outputRoot);
const yamlFiles = walkYamlFiles(sourceDir);
@@ -738,7 +805,7 @@ function main() {
processed += 1;
}
console.log(`Generated ${processed} .http file(s) for ${collection.name}`);
console.log(`${collection.name.padEnd(33)} => generated ${processed.toString().padStart(3)} .http file(s) and ${writtenJsFiles.length.toString().padStart(3)} .js file(s)`);
}
}