From b24a0145bce99886eca761819b45cc8d1b4f998a Mon Sep 17 00:00:00 2001 From: J H <2364004+Blu-J@users.noreply.github.com> Date: Tue, 30 Jan 2024 17:59:42 -0700 Subject: [PATCH] chore: UPdate types --- lib/StartSdk.ts | 2 +- lib/mainFn/Daemons.ts | 27 +++++++++++++++++---------- lib/mainFn/index.ts | 2 +- lib/types.ts | 2 +- lib/util/utils.ts | 12 +++++------- 5 files changed, 25 insertions(+), 20 deletions(-) diff --git a/lib/StartSdk.ts b/lib/StartSdk.ts index 72e6cf2..b1338dc 100644 --- a/lib/StartSdk.ts +++ b/lib/StartSdk.ts @@ -194,7 +194,7 @@ export class StartSdk { effects: Effects started(onTerm: () => void): null utils: Utils - }) => Promise>, + }) => Promise>, ) => setupMain(fn), setupMigrations: >>( ...migrations: EnsureUniqueId diff --git a/lib/mainFn/Daemons.ts b/lib/mainFn/Daemons.ts index d2049fc..6db8f0b 100644 --- a/lib/mainFn/Daemons.ts +++ b/lib/mainFn/Daemons.ts @@ -1,14 +1,21 @@ import { HealthReceipt } from "../health/HealthReceipt" import { CheckResult } from "../health/checkFns" +import { SDKManifest } from "../manifest/ManifestTypes" import { Trigger } from "../trigger" import { TriggerInput } from "../trigger/TriggerInput" import { defaultTrigger } from "../trigger/defaultTrigger" import { DaemonReturned, Effects, ValidIfNoStupidEscape } from "../types" import { createUtils } from "../util" import { Signals } from "../util/utils" -type Daemon = { +type Daemon< + Manifest extends SDKManifest, + Ids extends string, + Command extends string, + Id extends string, +> = { id: "" extends Id ? never : Id command: ValidIfNoStupidEscape | [string, ...string[]] + imageId: Manifest["images"][number] env?: Record ready: { display: string | null @@ -42,11 +49,11 @@ Daemons.of({ }) ``` */ -export class Daemons { +export class Daemons { private constructor( readonly effects: Effects, readonly started: (onTerm: () => void) => null, - readonly daemons?: Daemon[], + readonly daemons?: Daemon[], ) {} /** * Returns an empty new Daemons class with the provided config. @@ -58,12 +65,12 @@ export class Daemons { * @param config * @returns */ - static of(config: { + static of(config: { effects: Effects started: (onTerm: () => void) => null healthReceipts: HealthReceipt[] }) { - return new Daemons(config.effects, config.started) + return new Daemons(config.effects, config.started) } /** * Returns the complete list of daemons, including the one defined here @@ -78,13 +85,13 @@ export class Daemons { ErrorDuplicateId extends Id ? never : Id extends Ids ? ErrorDuplicateId : Id, - newDaemon: Omit, "id">, + newDaemon: Omit, "id">, ) { const daemons = ((this?.daemons ?? []) as any[]).concat({ ...newDaemon, id, }) - return new Daemons(this.effects, this.started, daemons) + return new Daemons(this.effects, this.started, daemons) } async build() { @@ -96,10 +103,10 @@ export class Daemons { daemon.requires?.map((id) => daemonsStarted[id]) ?? [], ) daemonsStarted[daemon.id] = requiredPromise.then(async () => { - const { command } = daemon - const utils = createUtils(effects) + const { command, imageId } = daemon + const utils = createUtils(effects) - const child = utils.runDaemon(command, { env: daemon.env }) + const child = utils.runDaemon(imageId, command, { env: daemon.env }) let currentInput: TriggerInput = {} const getCurrentInput = () => currentInput const trigger = (daemon.ready.trigger ?? defaultTrigger)( diff --git a/lib/mainFn/index.ts b/lib/mainFn/index.ts index 96b5642..1ad041e 100644 --- a/lib/mainFn/index.ts +++ b/lib/mainFn/index.ts @@ -23,7 +23,7 @@ export const setupMain = ( effects: Effects started(onTerm: () => void): null utils: Utils - }) => Promise>, + }) => Promise>, ): ExpectedExports.main => { return async (options) => { const result = await fn({ diff --git a/lib/types.ts b/lib/types.ts index c57d70d..29d0ec2 100644 --- a/lib/types.ts +++ b/lib/types.ts @@ -148,7 +148,7 @@ export type CommandType = | [string, ...string[]] export type DaemonReturned = { - wait(): Promise + wait(): Promise term(options?: { signal?: Signals; timeout?: number }): Promise } diff --git a/lib/util/utils.ts b/lib/util/utils.ts index 50540ea..04a45b2 100644 --- a/lib/util/utils.ts +++ b/lib/util/utils.ts @@ -234,21 +234,19 @@ export const utils = < const childProcess = overlay.spawn(commands, { env: options.env, }) - const answer = new Promise((resolve, reject) => { - const output: string[] = [] + const answer = new Promise((resolve, reject) => { childProcess.stdout.on("data", (data) => { - output.push(data.toString()) + console.log(data.toString()) }) - const outputError: string[] = [] childProcess.stderr.on("data", (data) => { - outputError.push(data.toString()) + console.error(data.toString()) }) childProcess.on("close", (code) => { if (code === 0) { - return resolve(output.join("")) + return resolve(null) } - return reject(outputError.join("")) + return reject(new Error(`${commands[0]} exited with code ${code}`)) }) })