Sphinx’s IndexBuilder: fed one resolved document at a time by the
build’s resolve phase (Sphinx: write_doc_serialized → index_page →
feed), then frozen once into the searchindex.js value.
Render Search.setIndex(...) as sphinx.search.js_index does: the
payload is json.dumps(data, separators=(',', ':'), sort_keys=True),
so every object’s keys are sorted and, with the default
ensure_ascii, every non-ASCII character is a \uXXXX escape.
objtypes and objnames are keyed by int in Sphinx, so their keys sort
numerically rather than as the strings JSON makes of them.
The environment-version map emitted by Sphinx 9.1.0’s built-in domains.
Ultra currently implements the std and py data used below, but keeping
the complete built-in map makes the JavaScript contract match Sphinx’s
searchtools loader and gives consumers the same compatibility signal.