chore: generate
This commit is contained in:
@@ -103,43 +103,38 @@ export const layer = Layer.effect(
|
|||||||
) {
|
) {
|
||||||
const completed_at = yield* Clock.currentTimeMillis
|
const completed_at = yield* Clock.currentTimeMillis
|
||||||
const s = yield* InstanceState.get(state)
|
const s = yield* InstanceState.get(state)
|
||||||
const result = yield* SynchronizedRef.modify(
|
const result = yield* SynchronizedRef.modify(s.jobs, (jobs): readonly [FinishResult, Map<string, Active>] => {
|
||||||
s.jobs,
|
const job = jobs.get(id)
|
||||||
(jobs): readonly [FinishResult, Map<string, Active>] => {
|
if (!job) return [{}, jobs]
|
||||||
const job = jobs.get(id)
|
if (job.token !== token) return [{}, jobs]
|
||||||
if (!job) return [{}, jobs]
|
if (job.info.status !== "running") return [{ info: snapshot(job) }, jobs]
|
||||||
if (job.token !== token) return [{}, jobs]
|
const pending = job.pending - 1
|
||||||
if (job.info.status !== "running") return [{ info: snapshot(job) }, jobs]
|
const output =
|
||||||
const pending = job.pending - 1
|
Exit.isSuccess(exit) && (!job.output || sequence > job.output.sequence)
|
||||||
const output = Exit.isSuccess(exit) && (!job.output || sequence > job.output.sequence)
|
|
||||||
? { sequence, text: exit.value }
|
? { sequence, text: exit.value }
|
||||||
: job.output
|
: job.output
|
||||||
if (Exit.isSuccess(exit) && pending > 0) {
|
if (Exit.isSuccess(exit) && pending > 0) {
|
||||||
return [{}, new Map(jobs).set(id, { ...job, pending, output })]
|
return [{}, new Map(jobs).set(id, { ...job, pending, output })]
|
||||||
}
|
}
|
||||||
const status: Exclude<Status, "running"> = Exit.isSuccess(exit)
|
const status: Exclude<Status, "running"> = Exit.isSuccess(exit)
|
||||||
? "completed"
|
? "completed"
|
||||||
: Cause.hasInterruptsOnly(exit.cause)
|
: Cause.hasInterruptsOnly(exit.cause)
|
||||||
? "cancelled"
|
? "cancelled"
|
||||||
: "error"
|
: "error"
|
||||||
const next = {
|
const next = {
|
||||||
...job,
|
...job,
|
||||||
pending: 0,
|
pending: 0,
|
||||||
output,
|
output,
|
||||||
info: {
|
info: {
|
||||||
...job.info,
|
...job.info,
|
||||||
status,
|
status,
|
||||||
completed_at,
|
completed_at,
|
||||||
...(output ? { output: output.text } : {}),
|
...(output ? { output: output.text } : {}),
|
||||||
...(Exit.isFailure(exit) ? { error: errorText(Cause.squash(exit.cause)) } : {}),
|
...(Exit.isFailure(exit) ? { error: errorText(Cause.squash(exit.cause)) } : {}),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return [
|
return [{ info: snapshot(next), done: job.done, scope: job.scope }, new Map(jobs).set(id, next)]
|
||||||
{ info: snapshot(next), done: job.done, scope: job.scope },
|
})
|
||||||
new Map(jobs).set(id, next),
|
|
||||||
]
|
|
||||||
},
|
|
||||||
)
|
|
||||||
if (result.info && result.done) yield* Deferred.succeed(result.done, result.info).pipe(Effect.ignore)
|
if (result.info && result.done) yield* Deferred.succeed(result.done, result.info).pipe(Effect.ignore)
|
||||||
if (result.scope) {
|
if (result.scope) {
|
||||||
yield* Scope.close(result.scope, Exit.void).pipe(Effect.forkIn(s.scope, { startImmediately: true }))
|
yield* Scope.close(result.scope, Exit.void).pipe(Effect.forkIn(s.scope, { startImmediately: true }))
|
||||||
@@ -265,10 +260,7 @@ export const layer = Layer.effect(
|
|||||||
completed_at,
|
completed_at,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return [
|
return [{ info: snapshot(next), done: job.done, scope: job.scope }, new Map(jobs).set(id, next)]
|
||||||
{ info: snapshot(next), done: job.done, scope: job.scope },
|
|
||||||
new Map(jobs).set(id, next),
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if (result.info && result.done) yield* Deferred.succeed(result.done, result.info).pipe(Effect.ignore)
|
if (result.info && result.done) yield* Deferred.succeed(result.done, result.info).pipe(Effect.ignore)
|
||||||
|
|||||||
@@ -257,16 +257,14 @@ export const TaskTool = Tool.define(
|
|||||||
metadata,
|
metadata,
|
||||||
run: runTask(),
|
run: runTask(),
|
||||||
})
|
})
|
||||||
yield* background
|
yield* background.wait({ id: info.id }).pipe(
|
||||||
.wait({ id: info.id })
|
Effect.flatMap((result) => {
|
||||||
.pipe(
|
if (result.info?.status === "completed") return inject("completed", result.info.output ?? "")
|
||||||
Effect.flatMap((result) => {
|
if (result.info?.status === "error") return inject("error", result.info.error ?? "")
|
||||||
if (result.info?.status === "completed") return inject("completed", result.info.output ?? "")
|
return Effect.void
|
||||||
if (result.info?.status === "error") return inject("error", result.info.error ?? "")
|
}),
|
||||||
return Effect.void
|
Effect.forkIn(scope, { startImmediately: true }),
|
||||||
}),
|
)
|
||||||
Effect.forkIn(scope, { startImmediately: true }),
|
|
||||||
)
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
title: params.description,
|
title: params.description,
|
||||||
|
|||||||
Reference in New Issue
Block a user