Skip to content

art-manifest.mjs

Renders app/src/game/art-manifest.mjs, the generated list of every set the art tree holds, and checks it for drift.

Contributor toolingart-manifest.mjs

What it does

Walks app/public/art and records every directory holding at least one file as a "set". Each set is keyed by its path relative to that root. Renders the sets into the exact text of the generated module. Without --write, compares that text byte for byte against app/src/game/art-manifest.mjs on disk and reports the first line where the two diverge.

Usage

No package.json script wraps this tool. Run it directly:

bash
node tools/art-manifest.mjs

Options

FlagValueWhat it doesDefault
--writeno valueWrites the rendered module to app/src/game/art-manifest.mjs, overwriting the file on disk.Off. The bare invocation only compares and reports.

Inputs and outputs

Reads every file under app/public/art, recursively. Passing --write overwrites app/src/game/art-manifest.mjs; the bare invocation writes nothing.

On success (exit 0), the bare invocation prints that the file matches the art tree. Passing --write prints how many bytes it wrote.

On failure (exit 1), the output file is either missing, or its content drifts from the art tree. A missing file gets an error naming the --write command that creates it. A drifted file gets the first line where the on-disk text and the freshly rendered text disagree.

Examples

Check whether the committed manifest still matches the art tree, for example after pulling a branch that added or removed art files:

bash
node tools/art-manifest.mjs

Regenerate the manifest after adding, removing, or renaming a file under app/public/art:

bash
node tools/art-manifest.mjs --write

Notes

The scan reads the filesystem directly, because app/public sits outside Vite's resolution graph, and no import.meta.glob call can see a file placed there. This tool is the only way a new file under app/public/art reaches the game code.

A directory holding only subdirectories is not itself a set. A directory holding both files and subdirectories is a set, and is still recursed into. Its subdirectories are named as their own nested sets — for example, system-view and system-view/packs both appear as separate entries.

The generated module also exports ART_ORPHANS: sets no declared surface asks for. It is always empty. The surface table that computation depends on is absent from the codebase.

Source

tools/art-manifest.mjs — part of Contributor tooling