38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import { GlobalBus } from "@/bus/global"
|
|
import { InstanceStore } from "@/project/instance-store"
|
|
import * as Log from "@opencode-ai/core/util/log"
|
|
import { Effect } from "effect"
|
|
import { Event } from "./event"
|
|
|
|
const log = Log.create({ service: "server" })
|
|
|
|
export const emitGlobalDisposed = Effect.sync(() =>
|
|
GlobalBus.emit("event", {
|
|
directory: "global",
|
|
payload: {
|
|
type: Event.Disposed.type,
|
|
properties: {},
|
|
},
|
|
}),
|
|
)
|
|
|
|
export const disposeAllInstancesAndEmitGlobalDisposed = Effect.fn("Server.disposeAllInstancesAndEmitGlobalDisposed")(
|
|
function* (options?: { swallowErrors?: boolean }) {
|
|
const store = yield* InstanceStore.Service
|
|
yield* Effect.gen(function* () {
|
|
yield* options?.swallowErrors
|
|
? store.disposeAll().pipe(
|
|
Effect.catchCause((cause) =>
|
|
Effect.sync(() => {
|
|
log.warn("global disposal failed", { cause })
|
|
}),
|
|
),
|
|
)
|
|
: store.disposeAll()
|
|
yield* emitGlobalDisposed
|
|
}).pipe(Effect.uninterruptible)
|
|
},
|
|
)
|
|
|
|
export * as GlobalLifecycle from "./global-lifecycle"
|