diff --git a/lib/StartSdk.ts b/lib/StartSdk.ts index 388d93b..b0365d3 100644 --- a/lib/StartSdk.ts +++ b/lib/StartSdk.ts @@ -21,7 +21,7 @@ import { DeepPartial, } from "./types" import { Utils } from "./util/utils" -import { AutoConfig } from "./autoconfig/AutoConfig" +import { DependencyConfig } from "./dependencyConfig/DependencyConfig" import { BackupSet, Backups } from "./backup/Backups" import { smtpConfig } from "./config/configConstants" import { Daemons } from "./mainFn/Daemons" @@ -35,7 +35,7 @@ import { List } from "./config/builder/list" import { Migration } from "./inits/migrations/Migration" import { Install, InstallFn, setupInstall } from "./inits/setupInstall" import { setupActions } from "./actions/setupActions" -import { setupAutoConfig } from "./autoconfig/setupAutoConfig" +import { setupDependencyConfig } from "./dependencyConfig/setupDependencyConfig" import { SetupBackupsParams, setupBackups } from "./backup/setupBackups" import { setupInit } from "./inits/setupInit" import { @@ -76,29 +76,106 @@ export class StartSdk { isReady: AnyNeverCond<[Manifest, Store, Vault], "Build not ready", true>, ) { return { - AutoConfig: { - of< - LocalConfig extends Record, - RemoteConfig extends Record, - >({ - localConfig, - remoteConfig, - autoconfig, - }: { - localConfig: Config - remoteConfig: Config - autoconfig: (options: { - effects: Effects - localConfig: LocalConfig - remoteConfig: RemoteConfig - utils: Utils - }) => Promise> - }) { - return new AutoConfig( - autoconfig, - ) + configConstants: { smtpConfig }, + createAction: < + Store, + ConfigType extends + | Record + | Config + | Config, + Type extends Record = ExtractConfigType, + >( + metaData: Omit & { + input: Config | Config }, + fn: (options: { + effects: Effects + utils: Utils + input: Type + }) => Promise, + ) => createAction(metaData, fn), + healthCheck: { + checkPortListening, + checkWebUrl, + of: healthCheck, + runHealthScript, }, + setupActions: (...createdActions: CreatedAction[]) => + setupActions(...createdActions), + setupBackups: (...args: SetupBackupsParams) => + setupBackups(...args), + setupConfig: < + ConfigType extends + | Config + | Config, + Type extends Record = ExtractConfigType, + >( + spec: ConfigType, + write: Save, + read: Read, + ) => + setupConfig( + spec, + write, + read, + ), + setupConfigRead: < + ConfigSpec extends + | Config, any, any> + | Config, never, never>, + >( + _configSpec: ConfigSpec, + fn: Read, + ) => fn, + setupConfigSave: < + ConfigSpec extends + | Config, any, any> + | Config, never, never>, + >( + _configSpec: ConfigSpec, + fn: Save, + ) => fn, + setupDependencyConfig: >( + config: Config, + autoConfigs: { + [K in keyof Manifest["dependencies"]]: DependencyConfig< + Store, + Vault, + Input, + any + > + }, + ) => + setupDependencyConfig( + config, + autoConfigs, + ), + setupDependencyMounts, + setupInit: ( + migrations: Migrations, + install: Install, + uninstall: Uninstall, + ) => setupInit(migrations, install, uninstall), + setupInstall: (fn: InstallFn) => Install.of(fn), + setupMain: ( + fn: (o: { + effects: Effects + started(onTerm: () => void): null + utils: Utils + }) => Promise>, + ) => setupMain(fn), + setupMigrations: >>( + ...migrations: EnsureUniqueId + ) => + setupMigrations(this.manifest, ...migrations), + setupUninstall: (fn: UninstallFn) => + setupUninstall(fn), + trigger: { + defaultTrigger, + cooldownTrigger, + changeOnFirstSuccess, + }, + Backups: { volumes: (...volumeNames: Array) => Backups.volumes(...volumeNames), @@ -118,30 +195,29 @@ export class StartSdk { spec: Spec, ) => Config.of(spec), }, - configConstants: { smtpConfig }, - createAction: < - Store, - ConfigType extends - | Record - | Config - | Config, - Type extends Record = ExtractConfigType, - >( - metaData: Omit & { - input: Config | Config - }, - fn: (options: { - effects: Effects - utils: Utils - input: Type - }) => Promise, - ) => createAction(metaData, fn), Daemons: { of: Daemons.of }, - healthCheck: { - checkPortListening, - checkWebUrl, - of: healthCheck, - runHealthScript, + DependencyConfig: { + of< + LocalConfig extends Record, + RemoteConfig extends Record, + >({ + localConfig, + remoteConfig, + dependencyConfig, + }: { + localConfig: Config + remoteConfig: Config + dependencyConfig: (options: { + effects: Effects + localConfig: LocalConfig + remoteConfig: RemoteConfig + utils: Utils + }) => Promise> + }) { + return new DependencyConfig( + dependencyConfig, + ) + }, }, List: { text: List.text, @@ -227,77 +303,6 @@ export class StartSdk { }) => Promise }) => Migration.of(options), }, - setupActions: (...createdActions: CreatedAction[]) => - setupActions(...createdActions), - setupAutoConfig: >( - config: Config, - autoConfigs: { - [K in keyof Manifest["dependencies"]]: AutoConfig< - Store, - Vault, - Input, - any - > - }, - ) => setupAutoConfig(config, autoConfigs), - setupBackups: (...args: SetupBackupsParams) => - setupBackups(...args), - setupConfig: < - ConfigType extends - | Config - | Config, - Type extends Record = ExtractConfigType, - >( - spec: ConfigType, - write: Save, - read: Read, - ) => - setupConfig( - spec, - write, - read, - ), - setupConfigRead: < - ConfigSpec extends - | Config, any, any> - | Config, never, never>, - >( - _configSpec: ConfigSpec, - fn: Read, - ) => fn, - setupConfigSave: < - ConfigSpec extends - | Config, any, any> - | Config, never, never>, - >( - _configSpec: ConfigSpec, - fn: Save, - ) => fn, - setupDependencyMounts, - setupInit: ( - migrations: Migrations, - install: Install, - uninstall: Uninstall, - ) => setupInit(migrations, install, uninstall), - setupInstall: (fn: InstallFn) => Install.of(fn), - setupMain: ( - fn: (o: { - effects: Effects - started(onTerm: () => void): null - utils: Utils - }) => Promise>, - ) => setupMain(fn), - setupMigrations: >>( - ...migrations: EnsureUniqueId - ) => - setupMigrations(this.manifest, ...migrations), - setupUninstall: (fn: UninstallFn) => - setupUninstall(fn), - trigger: { - defaultTrigger, - cooldownTrigger, - changeOnFirstSuccess, - }, Value: { toggle: Value.toggle, text: Value.text, diff --git a/lib/autoconfig/AutoConfig.ts b/lib/dependencyConfig/DependencyConfig.ts similarity index 85% rename from lib/autoconfig/AutoConfig.ts rename to lib/dependencyConfig/DependencyConfig.ts index ba4c25a..9f01f77 100644 --- a/lib/autoconfig/AutoConfig.ts +++ b/lib/dependencyConfig/DependencyConfig.ts @@ -2,16 +2,15 @@ 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 class AutoConfig< +export class DependencyConfig< Store, Vault, Input extends Record, RemoteConfig extends Record, > { constructor( - readonly autoconfig: (options: { + readonly dependencyConfig: (options: { effects: Effects localConfig: Input remoteConfig: RemoteConfig @@ -32,7 +31,11 @@ export class AutoConfig< if ( !deepEqual( origConfig, - deepMerge({}, options.localConfig, await this.autoconfig(newOptions)), + deepMerge( + {}, + options.localConfig, + await this.dependencyConfig(newOptions), + ), ) ) throw new Error(`Check failed`) @@ -49,7 +52,7 @@ export class AutoConfig< return deepMerge( {}, options.remoteConfig, - await this.autoconfig(newOptions), + await this.dependencyConfig(newOptions), ) } } diff --git a/lib/autoconfig/index.ts b/lib/dependencyConfig/index.ts similarity index 78% rename from lib/autoconfig/index.ts rename to lib/dependencyConfig/index.ts index 031733b..3fe78b4 100644 --- a/lib/autoconfig/index.ts +++ b/lib/dependencyConfig/index.ts @@ -5,5 +5,5 @@ export type ReadonlyDeep = export type MaybePromise = Promise | A export type Message = string -import "./AutoConfig" -import "./setupAutoConfig" +import "./DependencyConfig" +import "./setupDependencyConfig" diff --git a/lib/autoconfig/setupAutoConfig.ts b/lib/dependencyConfig/setupDependencyConfig.ts similarity index 67% rename from lib/autoconfig/setupAutoConfig.ts rename to lib/dependencyConfig/setupDependencyConfig.ts index 00ed044..475015b 100644 --- a/lib/autoconfig/setupAutoConfig.ts +++ b/lib/dependencyConfig/setupDependencyConfig.ts @@ -1,8 +1,8 @@ import { Config } from "../config/builder/config" import { SDKManifest } from "../manifest/ManifestTypes" -import { AutoConfig } from "./AutoConfig" +import { DependencyConfig } from "./DependencyConfig" -export function setupAutoConfig< +export function setupDependencyConfig< Store, Vault, Input extends Record, @@ -10,7 +10,7 @@ export function setupAutoConfig< >( _config: Config, autoConfigs: { - [key in keyof Manifest["dependencies"] & string]: AutoConfig< + [key in keyof Manifest["dependencies"] & string]: DependencyConfig< Store, Vault, Input, diff --git a/lib/index.ts b/lib/index.ts index 85c32e1..f8a076a 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -11,7 +11,7 @@ import "@iarna/toml" import "./types" import "./util" import "yaml" -import "./autoconfig" +import "./dependencyConfig" import "./actions" import "./manifest" import "./inits" diff --git a/lib/test/setupAutoConfig.test.ts b/lib/test/setupDependencyConfig.test.ts similarity index 71% rename from lib/test/setupAutoConfig.test.ts rename to lib/test/setupDependencyConfig.test.ts index 8af417d..4fac5d0 100644 --- a/lib/test/setupAutoConfig.test.ts +++ b/lib/test/setupDependencyConfig.test.ts @@ -1,6 +1,6 @@ import { sdk } from "./output.sdk" -describe("setupAutoConfig", () => { +describe("setupDependencyConfig", () => { test("test", () => { const testConfig = sdk.Config.of({ test: sdk.Value.text({ @@ -15,12 +15,12 @@ describe("setupAutoConfig", () => { required: false, }), }) - const remoteTest = sdk.AutoConfig.of({ + const remoteTest = sdk.DependencyConfig.of({ localConfig: testConfig, remoteConfig: testConfig2, - autoconfig: async ({}) => {}, + dependencyConfig: async ({}) => {}, }) - sdk.setupAutoConfig(testConfig, { + sdk.setupDependencyConfig(testConfig, { remoteTest, }) })