This site describes solve-engine as it is on main: 2.43.0, which npm does not have yet. npm installs 2.40.0, so a page may show an answer that version does not give yet.
ResolverRegistry
Defined in: packages/engine/src/resolvers/ResolverRegistry.ts:141
Registry of async resolvers, keyed by namespace.
Plugins/packages register resolvers alongside their parselets and opcode handlers. The engine calls preflightAll() before VM execution to short-circuit async expressions.
Lifecycle:
- register(), when a package is loaded
- unregister(), when a package is unloaded (clears cache entries)
- clear(), on document switch (clears all resolvers)
Constructors
Section titled “Constructors”Constructor
Section titled “Constructor”new ResolverRegistry(): ResolverRegistry;Returns
Section titled “Returns”ResolverRegistry
Accessors
Section titled “Accessors”Get Signature
Section titled “Get Signature”get size(): number;Defined in: packages/engine/src/resolvers/ResolverRegistry.ts:315
Number of registered resolvers.
Returns
Section titled “Returns”number
Methods
Section titled “Methods”clear()
Section titled “clear()”clear(): void;Defined in: packages/engine/src/resolvers/ResolverRegistry.ts:330
Clear all resolvers (document switch, engine reset). Calls destroy() on each resolver and clears the map.
Returns
Section titled “Returns”void
get(namespace): | IAsyncResolver | undefined;Defined in: packages/engine/src/resolvers/ResolverRegistry.ts:310
Get a resolver by namespace. Returns undefined if no resolver is registered for that namespace.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
namespace | string |
Returns
Section titled “Returns”| IAsyncResolver
| undefined
has(namespace): boolean;Defined in: packages/engine/src/resolvers/ResolverRegistry.ts:322
Check if a resolver is registered for the given namespace.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
namespace | string |
Returns
Section titled “Returns”boolean
mayIntercept()
Section titled “mayIntercept()”mayIntercept(program): boolean;Defined in: packages/engine/src/resolvers/ResolverRegistry.ts:263
Whether any registered resolver could return a result for program:
one that declared no opcodes is registered, or the program contains an
opcode some resolver watches. False means preflightAll would
consult nothing and answer null, so the caller can skip the preflight
and the cancellation state it would arm. A plugin call is not special
here; the engine forces the preflight for one itself.
Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
program | BytecodeProgram | The compiled program about to execute. |
Returns
Section titled “Returns”boolean
True when a preflight could intercept it.
preflightAll()
Section titled “preflightAll()”preflightAll( tokens, bytecode, packageId, signal, queryClient, networkEnabled?): | AsyncCheckResult | null;Defined in: packages/engine/src/resolvers/ResolverRegistry.ts:288
Run the registered resolvers’ preflight checks against compiled bytecode.
Returns the first AsyncCheckResult found, or null if all data is ready. Short-circuits on first pending, subsequent pending ops will be discovered on re-evaluation when the first resolves.
A resolver that declared IAsyncResolver.watchedOpcodes is asked
only about a program containing one of them. A program that calls a
plugin function (hasAsync) keeps the full pass whatever the resolvers
declared: it is the one shape whose pending path the VM itself rests on,
and the opcode gate exists to spare the plain line, not to trim a line
that already does live work.
With networkEnabled false, only resolvers that declare themselves
IAsyncResolver.local are consulted. The skip happens here, before
preflight() runs, because a resolver’s preflight is what starts the
fetch: refusing its promise afterwards would already be too late.
Parameters
Section titled “Parameters”| Parameter | Type | Default value |
|---|---|---|
tokens | Token[] | undefined |
bytecode | BytecodeProgram | undefined |
packageId | string | undefined |
signal | AbortSignal | undefined |
queryClient | QueryClient | undefined |
networkEnabled | boolean | true |
Returns
Section titled “Returns”| AsyncCheckResult
| null
register()
Section titled “register()”register(resolver): void;Defined in: packages/engine/src/resolvers/ResolverRegistry.ts:167
Register an async resolver.
Each resolver must have a unique namespace. If a resolver with the
same namespace is already registered, the old one is destroyed and
replaced (with a console warning). Packages that need multiple async
operations should use asyncResolvers: [...] with distinct namespaces
(e.g., "weather:current", "weather:forecast").
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
resolver | IAsyncResolver |
Returns
Section titled “Returns”void
unregister()
Section titled “unregister()”unregister(namespace, queryClient?): void;Defined in: packages/engine/src/resolvers/ResolverRegistry.ts:186
Unregister a resolver by namespace. Calls destroy() and clears all cache entries with that namespace prefix.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
namespace | string |
queryClient? | QueryClient |
Returns
Section titled “Returns”void