---@class (exact) Dirs ---@field prefix string ---@field bin string ---@field include string ---@field lib string ---@field src string ---@class (exact) Recipe ---@field setup (fun(bldit_setup: fun()): number)? ---@field build fun(bldit_build: fun()): number ---@field install fun(bldit_install: fun()): number ---@field remove fun(bldit_remove: fun()): number ---@field on_update (fun(bldit_on_update: fun()): number)? ---@type Recipe ---@alias GetSourcesFn fun(url: string, version: string, target_dir: string): number ---@alias GetVersionFn fun(url: string, target_dir: string): string ---@class (exact) Fetcher ---@field get_sources GetSourcesFn ---@field get_version GetVersionFn ---@class (exact) Package ---@field url string ---@field version string? ---@field fetcher Fetcher | nil ---@field dependencies { [string]: Package } | "bldit" | nil ---@field opts table? ---@field recipe Recipe | fun(final_dir: string): Recipe | "bldit" | nil ---@class (exact) Config ---@field dirs Dirs ---@field fetchers { [string]: Fetcher } ---@field recipes { [string]: Recipe } ---@field pkgs { [string]: Package }