This repository was archived by the owner on Dec 12, 2024. It is now read-only.
generated from TBD54566975/tbd-project-template
-
Notifications
You must be signed in to change notification settings - Fork 103
/
Copy pathcli.js
102 lines (86 loc) · 2.89 KB
/
cli.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
#!/usr/bin/env node
const SnippetExtractor = require("./index");
const fs = require("fs");
const path = require("path");
const rimraf = require("rimraf");
function findConfigFile() {
const configFileName = "shnippet.config.json";
const configPath = path.join(__dirname, "..", "..", configFileName);
if (!fs.existsSync(configPath)) {
console.error(`Configuration file not found: ${configPath}`);
process.exit(1);
}
return configPath;
}
function clearOutputDirectory(outputDirectory) {
if (fs.existsSync(outputDirectory)) {
rimraf.sync(outputDirectory);
} else {
console.log(`Output directory does not exist: ${outputDirectory}`);
}
}
function findTestDirectories(baseDir) {
let testDirectories = [];
function traverseDirectory(currentDir) {
const files = fs.readdirSync(currentDir);
for (const file of files) {
const filePath = path.join(currentDir, file);
const stats = fs.statSync(filePath);
if (stats.isDirectory()) {
if (file === "test") {
testDirectories.push(filePath);
} else {
traverseDirectory(filePath);
}
}
}
}
traverseDirectory(baseDir);
return testDirectories;
}
function main() {
const args = process.argv.slice(2);
const configPath = findConfigFile();
const configDir = path.dirname(configPath);
let config = require(configPath);
// Resolve paths for output directory
config.outputDirectory = path.resolve(configDir, config.outputDirectory);
// Check for "clear" argument
if (args.includes("clear")) {
clearOutputDirectory(config.outputDirectory);
return; // Exit after clearing the output directory
}
// Process --structure flag
const structureFlagIndex = args.indexOf("--structure");
if (structureFlagIndex !== -1 && args.length > structureFlagIndex + 1) {
const structureValue = args[structureFlagIndex + 1];
const validStructures = ["flat", "match", "organized", "byLanguage"];
if (validStructures.includes(structureValue)) {
config.outputDirectoryStructure = structureValue;
} else {
console.error(
`Invalid output directory structure: '${structureValue}'. Valid options are: ${validStructures.join(
", "
)}`
);
process.exit(1);
}
} else if (structureFlagIndex !== -1) {
console.error(
"The --structure flag requires a value. Valid options are: flat, match, organized, byLanguage"
);
process.exit(1);
}
// Process each root directory or traverse dynamically
let directoriesToProcess = config.rootDirectories
.map((rootDir) => path.resolve(configDir, rootDir))
.reduce((acc, dir) => {
return acc.concat(findTestDirectories(dir));
}, []);
directoriesToProcess.forEach((directory) => {
config.rootDirectory = directory; // Set the current root directory
const extractor = new SnippetExtractor(config);
extractor.extractSnippets();
});
}
main();