45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
import { $ } from "bun";
|
|
|
|
const lockfile = Bun.argv[2] ?? "bun.lockb";
|
|
const output = Bun.argv[3] ?? ".config/flatpak/sources.gen.json";
|
|
|
|
const text = await $`bun ./bun.lockb --hash: 0000000000000000-0000000000000000-0000000000000000-0000000000000000`.text();
|
|
|
|
interface FlatpakSource
|
|
{
|
|
type: "file";
|
|
url: string;
|
|
dest: string;
|
|
"dest-filename": string;
|
|
sha512?: string;
|
|
sha256?: string;
|
|
}
|
|
|
|
const sources: FlatpakSource[] = [];
|
|
|
|
for (const block of text.split("\n\n"))
|
|
{
|
|
const resolved = block.match(/\s+resolved "([^"]+)"/)?.[1];
|
|
const integrity = block.match(/\s+integrity (\S+)/)?.[1];
|
|
|
|
if (!resolved || !integrity) continue;
|
|
|
|
const [algo, b64] = integrity.split("-");
|
|
const hex = Buffer.from(b64, "base64").toString("hex");
|
|
const url = new URL(resolved);
|
|
const filename = url.pathname.split("/").pop()!;
|
|
const dest = `flatpak-node/npm-cache${url.pathname.replace(filename, "")}`;
|
|
|
|
sources.push({
|
|
type: "file",
|
|
url: resolved,
|
|
dest,
|
|
"dest-filename": filename,
|
|
...(algo === "sha512" ? { sha512: hex } : { sha256: hex }),
|
|
});
|
|
}
|
|
|
|
await Bun.write(output, JSON.stringify(sources, null, 2));
|
|
console.log(`Wrote ${sources.length} entries to ${output}`);
|
|
|
|
export { };
|