import { DependencyConfig as DependencyConfigType, DeepPartial, Effects, } from "../types" import { Utils, createUtils } from "../util/utils" import { deepEqual } from "../util/deepEqual" import { deepMerge } from "../util/deepMerge" import { SDKManifest } from "../manifest/ManifestTypes" export type Update = (options: { remoteConfig: RemoteConfig queryResults: QueryResults }) => Promise export class DependencyConfig< Manifest extends SDKManifest, Store, Input extends Record, RemoteConfig extends Record, > { static defaultUpdate = async (options: { queryResults: unknown remoteConfig: unknown }): Promise => { return deepMerge({}, options.remoteConfig, options.queryResults || {}) } constructor( readonly dependencyConfig: (options: { effects: Effects localConfig: Input utils: Utils }) => Promise>, readonly update: Update< void | DeepPartial, RemoteConfig > = DependencyConfig.defaultUpdate as any, ) {} async query(options: { effects: Effects; localConfig: unknown }) { return this.dependencyConfig({ localConfig: options.localConfig as Input, effects: options.effects, utils: createUtils(options.effects), }) } }