import { Config } from "../config_builder/mod"; import { DependsOn, Effects, ExpectedExports } from "../types"; import { ConfigSpec } from "../types/config-types"; import { okOf } from "../util"; import { TypeFromProps } from "../utils/propertiesMatcher"; import { nullIfEmpty } from "./mod"; export function setupConfigExports(options: { spec: Config; dependsOn: DependsOn; write(effects: Effects, config: TypeFromProps): Promise; read( effects: Effects ): Promise | TypeFromProps>; }) { const validator = options.spec.validator(); return { setConfig: (async ({ effects, input: config }) => { if (!validator.test(config)) { await effects.error(String(validator.errorMessage(config))); return { error: "Set config type error for config" }; } await options.write(effects, config); return okOf({ signal: "SIGTERM", "depends-on": options.dependsOn, }); }) as ExpectedExports.setConfig, getConfig: (async ({ effects }) => { return okOf({ spec: options.spec.build(), config: nullIfEmpty(await options.read(effects)), }); }) as ExpectedExports.getConfig, }; }