mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-03-30 13:54:01 +00:00
- Rename packages/opencode → packages/tfcode (directory only) - Rename bin/opencode → bin/tfcode (CLI binary) - Rename .opencode → .tfcode (config directory) - Update package.json name and bin field - Update config directory path references (.tfcode) - Keep internal code references as 'opencode' for easy upstream sync - Keep @opencode-ai/* workspace package names This minimal branding approach allows clean merges from upstream opencode repository while providing tfcode branding for users.
47 lines
1.3 KiB
TypeScript
47 lines
1.3 KiB
TypeScript
import { expect, test } from "bun:test"
|
|
import { Effect, Layer, ServiceMap } from "effect"
|
|
import { makeRunPromise } from "../../src/effect/run-service"
|
|
|
|
class Shared extends ServiceMap.Service<Shared, { readonly id: number }>()("@test/Shared") {}
|
|
|
|
test("makeRunPromise shares dependent layers through the shared memo map", async () => {
|
|
let n = 0
|
|
|
|
const shared = Layer.effect(
|
|
Shared,
|
|
Effect.sync(() => {
|
|
n += 1
|
|
return Shared.of({ id: n })
|
|
}),
|
|
)
|
|
|
|
class One extends ServiceMap.Service<One, { readonly get: () => Effect.Effect<number> }>()("@test/One") {}
|
|
const one = Layer.effect(
|
|
One,
|
|
Effect.gen(function* () {
|
|
const svc = yield* Shared
|
|
return One.of({
|
|
get: Effect.fn("One.get")(() => Effect.succeed(svc.id)),
|
|
})
|
|
}),
|
|
).pipe(Layer.provide(shared))
|
|
|
|
class Two extends ServiceMap.Service<Two, { readonly get: () => Effect.Effect<number> }>()("@test/Two") {}
|
|
const two = Layer.effect(
|
|
Two,
|
|
Effect.gen(function* () {
|
|
const svc = yield* Shared
|
|
return Two.of({
|
|
get: Effect.fn("Two.get")(() => Effect.succeed(svc.id)),
|
|
})
|
|
}),
|
|
).pipe(Layer.provide(shared))
|
|
|
|
const runOne = makeRunPromise(One, one)
|
|
const runTwo = makeRunPromise(Two, two)
|
|
|
|
expect(await runOne((svc) => svc.get())).toBe(1)
|
|
expect(await runTwo((svc) => svc.get())).toBe(1)
|
|
expect(n).toBe(1)
|
|
})
|