Skip to content

Commit b8801db

Browse files
authored
refactor(file): remove async facade exports (#22322)
1 parent f7c6943 commit b8801db

6 files changed

Lines changed: 161 additions & 125 deletions

File tree

packages/opencode/src/cli/cmd/debug/file.ts

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import { EOL } from "os"
2+
import { Effect } from "effect"
3+
import { AppRuntime } from "@/effect/app-runtime"
24
import { File } from "../../../file"
35
import { bootstrap } from "../../bootstrap"
46
import { cmd } from "../cmd"
@@ -15,7 +17,11 @@ const FileSearchCommand = cmd({
1517
}),
1618
async handler(args) {
1719
await bootstrap(process.cwd(), async () => {
18-
const results = await File.search({ query: args.query })
20+
const results = await AppRuntime.runPromise(
21+
Effect.gen(function* () {
22+
return yield* File.Service.use((svc) => svc.search({ query: args.query }))
23+
}),
24+
)
1925
process.stdout.write(results.join(EOL) + EOL)
2026
})
2127
},
@@ -32,7 +38,11 @@ const FileReadCommand = cmd({
3238
}),
3339
async handler(args) {
3440
await bootstrap(process.cwd(), async () => {
35-
const content = await File.read(args.path)
41+
const content = await AppRuntime.runPromise(
42+
Effect.gen(function* () {
43+
return yield* File.Service.use((svc) => svc.read(args.path))
44+
}),
45+
)
3646
process.stdout.write(JSON.stringify(content, null, 2) + EOL)
3747
})
3848
},
@@ -44,7 +54,11 @@ const FileStatusCommand = cmd({
4454
builder: (yargs) => yargs,
4555
async handler() {
4656
await bootstrap(process.cwd(), async () => {
47-
const status = await File.status()
57+
const status = await AppRuntime.runPromise(
58+
Effect.gen(function* () {
59+
return yield* File.Service.use((svc) => svc.status())
60+
}),
61+
)
4862
process.stdout.write(JSON.stringify(status, null, 2) + EOL)
4963
})
5064
},
@@ -61,7 +75,11 @@ const FileListCommand = cmd({
6175
}),
6276
async handler(args) {
6377
await bootstrap(process.cwd(), async () => {
64-
const files = await File.list(args.path)
78+
const files = await AppRuntime.runPromise(
79+
Effect.gen(function* () {
80+
return yield* File.Service.use((svc) => svc.list(args.path))
81+
}),
82+
)
6583
process.stdout.write(JSON.stringify(files, null, 2) + EOL)
6684
})
6785
},

packages/opencode/src/file/index.ts

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { BusEvent } from "@/bus/bus-event"
22
import { InstanceState } from "@/effect/instance-state"
3-
import { makeRuntime } from "@/effect/run-service"
43
import { AppFileSystem } from "@/filesystem"
54
import { Git } from "@/git"
65
import { Effect, Layer, Context } from "effect"
@@ -644,26 +643,4 @@ export namespace File {
644643
)
645644

646645
export const defaultLayer = layer.pipe(Layer.provide(AppFileSystem.defaultLayer), Layer.provide(Git.defaultLayer))
647-
648-
const { runPromise } = makeRuntime(Service, defaultLayer)
649-
650-
export function init() {
651-
return runPromise((svc) => svc.init())
652-
}
653-
654-
export async function status() {
655-
return runPromise((svc) => svc.status())
656-
}
657-
658-
export async function read(file: string): Promise<Content> {
659-
return runPromise((svc) => svc.read(file))
660-
}
661-
662-
export async function list(dir?: string) {
663-
return runPromise((svc) => svc.list(dir))
664-
}
665-
666-
export async function search(input: { query: string; limit?: number; dirs?: boolean; type?: "file" | "directory" }) {
667-
return runPromise((svc) => svc.search(input))
668-
}
669646
}

packages/opencode/src/server/instance/file.ts

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { Hono } from "hono"
22
import { describeRoute, validator, resolver } from "hono-openapi"
3+
import { Effect } from "effect"
34
import z from "zod"
45
import { AppRuntime } from "../../effect/app-runtime"
56
import { File } from "../../file"
@@ -72,12 +73,18 @@ export const FileRoutes = lazy(() =>
7273
const dirs = c.req.valid("query").dirs
7374
const type = c.req.valid("query").type
7475
const limit = c.req.valid("query").limit
75-
const results = await File.search({
76-
query,
77-
limit: limit ?? 10,
78-
dirs: dirs !== "false",
79-
type,
80-
})
76+
const results = await AppRuntime.runPromise(
77+
Effect.gen(function* () {
78+
return yield* File.Service.use((svc) =>
79+
svc.search({
80+
query,
81+
limit: limit ?? 10,
82+
dirs: dirs !== "false",
83+
type,
84+
}),
85+
)
86+
}),
87+
)
8188
return c.json(results)
8289
},
8390
)
@@ -133,7 +140,11 @@ export const FileRoutes = lazy(() =>
133140
),
134141
async (c) => {
135142
const path = c.req.valid("query").path
136-
const content = await File.list(path)
143+
const content = await AppRuntime.runPromise(
144+
Effect.gen(function* () {
145+
return yield* File.Service.use((svc) => svc.list(path))
146+
}),
147+
)
137148
return c.json(content)
138149
},
139150
)
@@ -162,7 +173,11 @@ export const FileRoutes = lazy(() =>
162173
),
163174
async (c) => {
164175
const path = c.req.valid("query").path
165-
const content = await File.read(path)
176+
const content = await AppRuntime.runPromise(
177+
Effect.gen(function* () {
178+
return yield* File.Service.use((svc) => svc.read(path))
179+
}),
180+
)
166181
return c.json(content)
167182
},
168183
)
@@ -184,7 +199,11 @@ export const FileRoutes = lazy(() =>
184199
},
185200
}),
186201
async (c) => {
187-
const content = await File.status()
202+
const content = await AppRuntime.runPromise(
203+
Effect.gen(function* () {
204+
return yield* File.Service.use((svc) => svc.status())
205+
}),
206+
)
188207
return c.json(content)
189208
},
190209
),

packages/opencode/test/file/fsmonitor.test.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
import { $ } from "bun"
22
import { describe, expect, test } from "bun:test"
3+
import { Effect } from "effect"
34
import fs from "fs/promises"
45
import path from "path"
56
import { File } from "../../src/file"
67
import { Instance } from "../../src/project/instance"
7-
import { tmpdir } from "../fixture/fixture"
8+
import { provideInstance, tmpdir } from "../fixture/fixture"
9+
10+
const run = <A, E>(eff: Effect.Effect<A, E, File.Service>) =>
11+
Effect.runPromise(provideInstance(Instance.directory)(eff.pipe(Effect.provide(File.defaultLayer))))
12+
const status = () => run(File.Service.use((svc) => svc.status()))
13+
const read = (file: string) => run(File.Service.use((svc) => svc.read(file)))
814

915
const wintest = process.platform === "win32" ? test : test.skip
1016

@@ -27,7 +33,7 @@ describe("file fsmonitor", () => {
2733
await Instance.provide({
2834
directory: tmp.path,
2935
fn: async () => {
30-
await File.status()
36+
await status()
3137
},
3238
})
3339

@@ -52,7 +58,7 @@ describe("file fsmonitor", () => {
5258
await Instance.provide({
5359
directory: tmp.path,
5460
fn: async () => {
55-
await File.read("tracked.txt")
61+
await read("tracked.txt")
5662
},
5763
})
5864

0 commit comments

Comments
 (0)