/** * `src/tools/` — the instruments. Everything in here is for the person building * this map, not for the person looking at it. * * There is one rule and this file exists to hold it: **nothing under * `src/tools/` may be reached by a static import from the app.** `main.ts` loads * it like this, and only like this: * * ```ts * if (access.can.debug) { * const { createGodmode } = await import("./tools/index.ts"); * godmode = createGodmode({ ... }); * } * ``` * * A static `import` would put the panel in the entry chunk, and the entry chunk * is 772 kB before anybody has done anything — the whole thing arrives, parses * and runs for every anonymous visitor who will never see a single control in * it. Behind a dynamic import Vite gives the tools a chunk of their own, and a * visitor who is not god does not download the code at all. That is also the * strongest available reading of "nothing here may run for a non-god visitor": * not a hidden panel, not a disabled panel, no panel. * * The corollary is that the arrow points one way. A tool may import from * `engine/`, `access.ts` or `adapters/`; nothing outside `src/tools/` may import * from inside it except through an `await import()`, or the split silently stops * happening and nobody notices until the bundle is measured again. * * Type-only imports are the exception and are free: `import type { Godmode }` is * erased at build time and creates no chunk edge. `main.ts` needs one to hold * the handle in a nullable field. */ export { createGodmode } from "./godmode.ts"; export type { Godmode, GodmodeHouseLights, GodmodeOffice, GodmodeOptions, GodmodePlace, } from "./godmode.ts";