@aryasaatvik/motel 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/launchAgent.test.ts +16 -0
- package/src/launchAgent.ts +3 -1
package/package.json
CHANGED
package/src/launchAgent.test.ts
CHANGED
|
@@ -323,6 +323,22 @@ describe("supervisor-aware top-level lifecycle", () => {
|
|
|
323
323
|
expect(events).toEqual(["service:start", "service:stop", "service:restart"])
|
|
324
324
|
})
|
|
325
325
|
|
|
326
|
+
test("stops a detached daemon when an equivalent LaunchAgent definition is not loaded", async () => {
|
|
327
|
+
const events: string[] = []
|
|
328
|
+
const daemon = {
|
|
329
|
+
applyEnv: Effect.void,
|
|
330
|
+
getStatus: Effect.succeed(daemonStatus()),
|
|
331
|
+
ensure: Effect.sync(() => { events.push("daemon:start"); return daemonStatus() }),
|
|
332
|
+
stop: Effect.sync(() => { events.push("daemon:stop"); return daemonStatus({ running: false, pid: null, registryPid: null }) }),
|
|
333
|
+
} satisfies DaemonManager
|
|
334
|
+
const lifecycle = createMotelLifecycle({
|
|
335
|
+
service: fakeService({ installed: true, manager: "not-loaded" }, events),
|
|
336
|
+
daemon,
|
|
337
|
+
})
|
|
338
|
+
await Effect.runPromise(lifecycle.stop)
|
|
339
|
+
expect(events).toEqual(["daemon:stop"])
|
|
340
|
+
})
|
|
341
|
+
|
|
326
342
|
test("keeps detached-manager lifecycle when no service definition is installed", async () => {
|
|
327
343
|
const events: string[] = []
|
|
328
344
|
const daemon = {
|
package/src/launchAgent.ts
CHANGED
|
@@ -447,7 +447,9 @@ export const createMotelLifecycle = (options: { readonly service?: LaunchAgentMa
|
|
|
447
447
|
? service.status.pipe(Effect.flatMap((status): Effect.Effect<DaemonStatus | LaunchAgentStatus, unknown, never> => route(status, service.start, daemon.ensure))) as Effect.Effect<DaemonStatus | LaunchAgentStatus, unknown, never>
|
|
448
448
|
: daemon.ensure,
|
|
449
449
|
stop: serviceEnabled
|
|
450
|
-
? service.status.pipe(Effect.flatMap((status): Effect.Effect<DaemonStatus | LaunchAgentStatus, unknown, never> =>
|
|
450
|
+
? service.status.pipe(Effect.flatMap((status): Effect.Effect<DaemonStatus | LaunchAgentStatus, unknown, never> =>
|
|
451
|
+
route(status, status.manager === "loaded" ? service.stop : daemon.stop, daemon.stop),
|
|
452
|
+
)) as Effect.Effect<DaemonStatus | LaunchAgentStatus, unknown, never>
|
|
451
453
|
: daemon.stop,
|
|
452
454
|
restart: serviceEnabled
|
|
453
455
|
? service.status.pipe(Effect.flatMap((status): Effect.Effect<DaemonStatus | LaunchAgentStatus, unknown, never> => route(status, service.restart, Effect.gen(function*() {
|