import type { RenderStatuslineOptions } from "../render.js"; import type { StatuslineData } from "../types.js"; import type { BaseWidgetContext, WidgetContext, WidgetDependency, WidgetDependencyValues, } from "./types.js"; export function contextForDependencies( baseCtx: BaseWidgetContext, dependencies: TDeps, data: StatuslineData, options: RenderStatuslineOptions, ): WidgetContext { // getExtensionStatuses is read live from options, never snapshotted into data. const source: WidgetDependencyValues = { ...data, getExtensionStatuses: options.getExtensionStatuses, }; const output: BaseWidgetContext & Partial = { ...baseCtx }; const writableOutput = output as BaseWidgetContext & Partial>; for (const dependency of dependencies) { writableOutput[dependency] = source[dependency]; } // TODO(widget-spec): remove this cast if TypeScript gains better support for dynamic object construction. return output as WidgetContext; }