bufferStuff/tooling/fileSmasher.ts

67 lines
1.7 KiB
TypeScript
Raw Permalink Normal View History

// fileSmasher ~.~
// for when you're just too lazy to
// do it properly.
2023-07-28 10:01:47 +01:00
import { readdirSync, lstatSync, readFileSync, writeFileSync } from "fs";
2023-07-13 16:33:48 +01:00
const tsFileData:Array<string> = new Array<string>();
// Github Actions forced my hand
2023-07-28 09:54:32 +01:00
const toolinglessFolderPath = __dirname.replace("/tooling", "/");
function readDir(nam:string) {
const files = readdirSync(nam);
for (const file of files) {
if (nam == toolinglessFolderPath && (file.startsWith(".") || file == "tooling" || file == "lib" || file == "web" || file == "node_modules" || file == "combined.ts")) {
continue;
}
2023-07-28 09:59:34 +01:00
2023-07-28 10:03:08 +01:00
if (lstatSync(`${nam}/${file}`).isDirectory()) {
readDir(`${nam}/${file}`);
} else if (file.endsWith(".ts")) {
tsFileData.push(readFileSync((`${nam}/${file}`).replace("//", "/")).toString());
}
}
}
2023-07-28 09:54:32 +01:00
readDir(toolinglessFolderPath);
const combinedFiles = tsFileData.join("\n");
const splitLines = combinedFiles.split("\n");
const resultLines:Array<string> = new Array<string>();
const unExport = [
"class:ReaderBase",
"class:ReaderLE",
"class:ReaderBE",
"class:WriterBase",
"class:WriterLE",
"class:WriterBE",
];
function checkForMatchAndReplace(s:string) {
for (const tUExp of unExport) {
const spl = tUExp.split(":");
const type = spl[0];
if (s.startsWith(`export ${type} ${spl[1]}`)) {
return s.replace(`export ${type} ${spl[1]}`, `${type} ${spl[1]}`);
}
}
return s;
}
// Let's process the file to make it usable
for (const line of splitLines) {
// Throw away imports as they aren't needed
// TODO: Add allow list for npm module imports
if (line.startsWith("import")) {
continue;
}
// Fix up classes, interfaces and such.
resultLines.push(checkForMatchAndReplace(line));
}
writeFileSync("./combined.ts", resultLines.join("\n"));