Skip to content

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)
new ResolverRegistry(): ResolverRegistry;

ResolverRegistry

get size(): number;

Defined in: packages/engine/src/resolvers/ResolverRegistry.ts:315

Number of registered resolvers.

number

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.

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.

ParameterType
namespacestring

| IAsyncResolver | undefined


has(namespace): boolean;

Defined in: packages/engine/src/resolvers/ResolverRegistry.ts:322

Check if a resolver is registered for the given namespace.

ParameterType
namespacestring

boolean


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.

ParameterTypeDescription
programBytecodeProgramThe compiled program about to execute.

boolean

True when a preflight could intercept it.


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.

ParameterTypeDefault value
tokensToken[]undefined
bytecodeBytecodeProgramundefined
packageIdstringundefined
signalAbortSignalundefined
queryClientQueryClientundefined
networkEnabledbooleantrue

| AsyncCheckResult | null


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").

ParameterType
resolverIAsyncResolver

void


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.

ParameterType
namespacestring
queryClient?QueryClient

void