44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
import { randomUUID } from "crypto";
|
|
import { shrinko8 } from "./shrinko8";
|
|
import path from "path";
|
|
import fs from "fs";
|
|
import { fileURLToPath } from "url";
|
|
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
|
const outputDirPath = path.resolve(__dirname, "..", "..", "..", "output");
|
|
|
|
const getRom = async (inputFile: string) => {
|
|
const uuid = randomUUID();
|
|
const dir = path.join(outputDirPath, uuid);
|
|
fs.mkdirSync(dir, {recursive: true});
|
|
const outputFile = path.join(dir, "output.js");
|
|
|
|
await shrinko8({
|
|
inputFile,
|
|
outputFile,
|
|
});
|
|
|
|
const js = await fs.promises.readFile(outputFile, "utf8");
|
|
|
|
await fs.promises.rm(dir, {recursive: true, force: true});
|
|
|
|
const match = js.match(/\b_cartdat\s*=\s*(\[.*\])/);
|
|
if (!match) {
|
|
console.log("BEGIN js contents --------------------------------------------");
|
|
console.log(js);
|
|
console.log("END js contents ----------------------------------------------");
|
|
throw Error("Could not properly parse js file to find _cartdat");
|
|
}
|
|
|
|
return JSON.parse(match[1]) as number[]
|
|
}
|
|
|
|
const getCart = async (inputFile: string) => {
|
|
return {
|
|
name: inputFile,
|
|
rom: await getRom(inputFile),
|
|
}
|
|
}
|
|
|
|
export const getCarts = async (inputFiles: string[]) => {
|
|
return await Promise.all(inputFiles.map(getCart));
|
|
} |