Number of registered solvers.
The registered solvers, in registration order.
The registration for name, or undefined.
Adds registration. Returns this so registrations chain.
Re-adding the identical registration (same isSupported and create)
is a no-op and returns this, so calling registerRapierSolver() twice is
safe: nothing is overwritten and nothing about "auto" changes.
Builds the adapter selection names (§20, §37).
A named solver is handed back unfiltered, so an unsatisfiable request
fails in PhysicsWorld's constructor with its existing §21/§33 message
(see the module header). Only "not registered" and "cannot load here" are
refused from this file.
"auto" walks registration order and takes the first solver that is
supported here and whose §37 capabilities cover the world's dimension
and determinism. Every solver it passes over is reported through
SolverResolveOptions.onReject, and when none fits the throw names
each one and why — because "no solver was found" without that list is the
least actionable message this API could produce (§85).
The adapter comes back uninitialized: PhysicsWorld.initialize awaits
adapter.initialize (§37), and that is where a wasm image loads.
The solvers an application has opted into, and the §37 selection rule over them (PH-19).
Applications normally use the shared registry through registerSolver and resolveSolver. Construct one directly to keep a selection scope to itself — a test that must not see another test's registrations, or a host running two engines: