mirror of
https://github.com/anomalyco/opencode.git
synced 2026-05-04 19:57:22 +00:00
refactor: rename shared package to core (#24309)
This commit is contained in:
63
packages/core/test/fixture/effect-flock-worker.ts
Normal file
63
packages/core/test/fixture/effect-flock-worker.ts
Normal file
@@ -0,0 +1,63 @@
|
||||
import fs from "fs/promises"
|
||||
import os from "os"
|
||||
import { Effect, Layer } from "effect"
|
||||
import { AppFileSystem } from "@opencode-ai/core/filesystem"
|
||||
import { EffectFlock } from "@opencode-ai/core/util/effect-flock"
|
||||
import { Global } from "@opencode-ai/core/global"
|
||||
|
||||
type Msg = {
|
||||
key: string
|
||||
dir: string
|
||||
holdMs?: number
|
||||
ready?: string
|
||||
active?: string
|
||||
done?: string
|
||||
}
|
||||
|
||||
function sleep(ms: number) {
|
||||
return new Promise<void>((resolve) => setTimeout(resolve, ms))
|
||||
}
|
||||
|
||||
const msg: Msg = JSON.parse(process.argv[2]!)
|
||||
|
||||
const testGlobal = Layer.succeed(
|
||||
Global.Service,
|
||||
Global.Service.of({
|
||||
home: os.homedir(),
|
||||
data: os.tmpdir(),
|
||||
cache: os.tmpdir(),
|
||||
config: os.tmpdir(),
|
||||
state: os.tmpdir(),
|
||||
bin: os.tmpdir(),
|
||||
log: os.tmpdir(),
|
||||
}),
|
||||
)
|
||||
|
||||
const testLayer = EffectFlock.layer.pipe(Layer.provide(testGlobal), Layer.provide(AppFileSystem.defaultLayer))
|
||||
|
||||
async function job() {
|
||||
if (msg.ready) await fs.writeFile(msg.ready, String(process.pid))
|
||||
if (msg.active) await fs.writeFile(msg.active, String(process.pid), { flag: "wx" })
|
||||
|
||||
try {
|
||||
if (msg.holdMs && msg.holdMs > 0) await sleep(msg.holdMs)
|
||||
if (msg.done) await fs.appendFile(msg.done, "1\n")
|
||||
} finally {
|
||||
if (msg.active) await fs.rm(msg.active, { force: true })
|
||||
}
|
||||
}
|
||||
|
||||
await Effect.runPromise(
|
||||
Effect.gen(function* () {
|
||||
const flock = yield* EffectFlock.Service
|
||||
yield* flock.withLock(
|
||||
Effect.promise(() => job()),
|
||||
msg.key,
|
||||
msg.dir,
|
||||
)
|
||||
}).pipe(Effect.provide(testLayer)),
|
||||
).catch((err) => {
|
||||
const text = err instanceof Error ? (err.stack ?? err.message) : String(err)
|
||||
process.stderr.write(text)
|
||||
process.exit(1)
|
||||
})
|
||||
Reference in New Issue
Block a user