/** * @file * * Registry of renderer-side resolvers that populate the `lib` argument injected * into every {@link evalInObsidian} callback. * * A provider package (e.g. `obsidian-dev-utils`) registers a resolver via * {@link registerLibResolver} from its per-worker test setup (`setupFiles`), * like the context resolvers in `context-provider.ts` — registration must happen * in the worker because the namespace bootstrap is generated per-worker. Each * resolver is a self-contained function that runs inside the Obsidian renderer * and returns an object; the harness serializes it into the bootstrap and * `Object.assign`s every resolver's result into the single `lib` bag. */ /** * A self-contained function, evaluated inside the Obsidian renderer, that returns * an object whose own enumerable properties are merged (via `Object.assign`) into * the injected `lib` bag. * * It is serialized via `toString()` and must not close over any module scope * (imports are unavailable in the serialized renderer closure); read a renderer * global instead (e.g. a value a fixture plugin published on `window`). Returning * `null`/`undefined` is tolerated at runtime (`Object.assign` ignores it). * * @returns The object whose own enumerable properties are merged into `lib`. */ export type LibResolver = (this: void) => object; /** * Computes the namespace-bootstrap version string, folding the registered * resolver sources into the base library version so that a changed resolver set * forces a re-bootstrap of the shared Obsidian instance. * * Pure — takes the resolver array explicitly so it can be unit-tested without * touching the module-level registry. * * @param version - The base library version. * @param resolvers - The registered resolvers. * @returns The base version when `resolvers` is empty; otherwise the base version * combined with every resolver's source text. */ export declare function computeBootstrapVersion(version: string, resolvers: readonly LibResolver[]): string; /** * Returns the namespace-bootstrap version for the currently registered * resolvers — {@link computeBootstrapVersion} applied to * {@link getRegisteredLibResolvers}. * * @returns The bootstrap version string. */ export declare function getBootstrapVersion(): string; /** * Returns every registered {@link LibResolver}, in registration order. * * @returns The registered resolvers. */ export declare function getRegisteredLibResolvers(): readonly LibResolver[]; /** * Registers a renderer-side resolver whose result is merged into the `lib` * argument of every {@link evalInObsidian} callback. Call from a provider's * per-worker test setup (`setupFiles`), like the context resolvers. * * Registration is idempotent by source text: registering a resolver whose * `toString()` matches an already-registered one is a no-op, so a setup module * evaluated more than once does not merge the same library twice. * * @param resolver - The resolver function. */ export declare function registerLibResolver(resolver: LibResolver): void;