From 3e4a1de46e3036a55e2c568aa99379aa34894489 Mon Sep 17 00:00:00 2001 From: Severin Ibarluzea Date: Tue, 7 Oct 2025 17:34:51 -0700 Subject: [PATCH] Add script to bake keyboard4 cache --- package.json | 3 ++- scripts/bake-cache.ts | 47 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 scripts/bake-cache.ts diff --git a/package.json b/package.json index 6d57b417..21e80b3f 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,8 @@ "vercel-build": "cosmos-export", "repomix:lib": "repomix --ignore 'testing/**,**/TwoRouteHighDensitySolver/**,**/RouteStitchingSolver/**,solvers/CapacitySegmentPointOptimizer/CapacitySegmentPointOptimizer.ts' lib", "bug-report": "bun run scripts/download-bug-report.ts", - "bug-report-with-test": "bun run scripts/create-bug-report-test.ts" + "bug-report-with-test": "bun run scripts/create-bug-report-test.ts", + "bake-cache": "bun run scripts/bake-cache.ts" }, "devDependencies": { "@biomejs/biome": "^1.9.4", diff --git a/scripts/bake-cache.ts b/scripts/bake-cache.ts new file mode 100644 index 00000000..67283b7a --- /dev/null +++ b/scripts/bake-cache.ts @@ -0,0 +1,47 @@ +import { mkdir, writeFile } from "node:fs/promises" +import { dirname, resolve } from "node:path" +import keyboard4 from "../examples/legacy/assets/keyboard4.json" +import { CapacityMeshSolver, getGlobalInMemoryCache } from "../lib" +import type { SimpleRouteJson } from "../lib/types" + +const DEFAULT_OUTPUT_PATH = "./keyboard4-cache.json" + +async function ensureDirectoryExists(filePath: string) { + const directory = dirname(filePath) + await mkdir(directory, { recursive: true }) +} + +async function main() { + const outputPathArg = process.argv[2] + const outputPath = resolve( + process.cwd(), + outputPathArg ?? DEFAULT_OUTPUT_PATH, + ) + + const srj = keyboard4 as unknown as SimpleRouteJson + const solver = new CapacityMeshSolver(srj) + + console.log(`Baking keyboard4 cache to ${outputPath}...`) + + solver.solve() + + if (solver.failed || !solver.solved) { + const errorMessage = `Keyboard4 solver failed: ${solver.error ?? "unknown error"}` + throw new Error(errorMessage) + } + + const cache = getGlobalInMemoryCache() + const cacheEntries = Array.from(cache.cache.entries()) + const cacheObject = Object.fromEntries(cacheEntries) + + await ensureDirectoryExists(outputPath) + await writeFile(outputPath, JSON.stringify(cacheObject, null, 2), "utf-8") + + const completionMessage = `Cache baked successfully to ${outputPath}\n` + process.stdout.write(completionMessage) +} + +main().catch((error) => { + console.error(error) + process.exit(1) +})