From 86cee9e7886dc39968265ca9fc9f1e4b7ec83e86 Mon Sep 17 00:00:00 2001 From: BluJ Date: Tue, 9 May 2023 15:10:28 -0600 Subject: [PATCH] feat: Auto config figure out type --- lib/StartSdk.ts | 13 +++++++++---- lib/autoconfig/AutoConfig.ts | 32 +++++++++++++++++++++---------- lib/autoconfig/setupAutoConfig.ts | 18 ++++++++++------- 3 files changed, 42 insertions(+), 21 deletions(-) diff --git a/lib/StartSdk.ts b/lib/StartSdk.ts index 438f724..2ec771d 100644 --- a/lib/StartSdk.ts +++ b/lib/StartSdk.ts @@ -69,7 +69,7 @@ export class StartSdk { build(isReady: AnyNeverCond<[Manifest, Store], "Build not ready", true>) { return { - AutoConfig: ( + AutoConfig: >( configs: AutoConfigFrom, path: keyof AutoConfigFrom, ) => new AutoConfig(configs, path), @@ -196,13 +196,18 @@ export class StartSdk { setupActions: (...createdActions: CreatedAction[]) => setupActions(...createdActions), setupAutoConfig: < - Input, + Input extends Record, NestedConfigs extends { [key in keyof Manifest["dependencies"]]: unknown }, >( - configs: AutoConfigFrom, - ) => setupAutoConfig(configs), + config: Config, + autoConfigs: AutoConfigFrom, + ) => + setupAutoConfig( + config, + autoConfigs, + ), setupBackups: (...args: SetupBackupsParams) => setupBackups(...args), setupConfig: < diff --git a/lib/autoconfig/AutoConfig.ts b/lib/autoconfig/AutoConfig.ts index 590036a..e6ff02d 100644 --- a/lib/autoconfig/AutoConfig.ts +++ b/lib/autoconfig/AutoConfig.ts @@ -2,16 +2,28 @@ import { AutoConfigure, DeepPartial, Effects, ExpectedExports } from "../types" import { Utils, utils } from "../util/utils" import { deepEqual } from "../util/deepEqual" import { deepMerge } from "../util/deepMerge" +import { Config } from "../config/builder/config" -export type AutoConfigFrom = { - [key in keyof NestedConfigs & string]: (options: { - effects: Effects - localConfig: Input - remoteConfig: NestedConfigs[key] - utils: Utils - }) => Promise> +export type AutoConfigFrom< + Store, + Input, + NestedConfigs extends Record, +> = { + [key in keyof NestedConfigs & string]: { + serviceConfig: Config + autoConfig: (options: { + effects: Effects + localConfig: Input + remoteConfig: NestedConfigs[key] + utils: Utils + }) => Promise> + } } -export class AutoConfig { +export class AutoConfig< + Store, + Input, + NestedConfigs extends Record, +> { constructor( readonly configs: AutoConfigFrom, readonly path: keyof AutoConfigFrom, @@ -33,7 +45,7 @@ export class AutoConfig { deepMerge( {}, options.localConfig, - await this.configs[this.path](newOptions), + await this.configs[this.path].autoConfig(newOptions), ), ) ) @@ -51,7 +63,7 @@ export class AutoConfig { return deepMerge( {}, options.localConfig, - await this.configs[this.path](newOptions), + await this.configs[this.path].autoConfig(newOptions), ) } } diff --git a/lib/autoconfig/setupAutoConfig.ts b/lib/autoconfig/setupAutoConfig.ts index 9258acd..a501ebc 100644 --- a/lib/autoconfig/setupAutoConfig.ts +++ b/lib/autoconfig/setupAutoConfig.ts @@ -1,24 +1,28 @@ +import { Config } from "../config/builder/config" import { SDKManifest } from "../manifest/ManifestTypes" import { AutoConfig, AutoConfigFrom } from "./AutoConfig" export function setupAutoConfig< Store, - Input, + Input extends Record, Manifest extends SDKManifest, NestedConfigs extends { [key in keyof Manifest["dependencies"]]: unknown }, ->(configs: AutoConfigFrom) { - type C = typeof configs - const answer = { ...configs } as unknown as { +>( + config: Config, + autoConfigs: AutoConfigFrom, +) { + type C = typeof autoConfigs + const answer = { ...autoConfigs } as unknown as { [k in keyof C]: AutoConfig } - for (const key in configs) { - answer[key as keyof typeof configs] = new AutoConfig< + for (const key in autoConfigs) { + answer[key as keyof typeof autoConfigs] = new AutoConfig< Store, Input, NestedConfigs - >(configs, key as keyof typeof configs) + >(autoConfigs, key as keyof typeof autoConfigs) } return answer }