| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import { describe, expect, test } from "bun:test"
- import os from "os"
- import path from "path"
- import { Effect, Layer } from "effect"
- import { AppNodeBuilder } from "@opencode-ai/core/effect/app-node-builder"
- import { FileSystem } from "@opencode-ai/core/filesystem"
- import { Protected } from "@opencode-ai/core/filesystem/protected"
- import { FileSystemSearch } from "@opencode-ai/core/filesystem/search"
- import { Location } from "@opencode-ai/core/location"
- import { Ripgrep } from "@opencode-ai/core/ripgrep"
- import { AbsolutePath, RelativePath } from "@opencode-ai/core/schema"
- import { location } from "../fixture/location"
- describe("FileSystemSearch", () => {
- test("bounds a home scan even when home is detected as a repository", async () => {
- let observed: Ripgrep.FindInput | undefined
- const home = AbsolutePath.make(os.homedir())
- const layer = AppNodeBuilder.build(FileSystemSearch.node, [
- [
- Location.node,
- Layer.succeed(
- Location.Service,
- Location.Service.of(
- location({ directory: home }, { vcs: { type: "git", store: AbsolutePath.make(path.join(home, ".git")) } }),
- ),
- ),
- ],
- [
- Ripgrep.node,
- Layer.succeed(
- Ripgrep.Service,
- Ripgrep.Service.of({
- find: (input) =>
- Effect.gen(function* () {
- observed = input
- if (input.onEntry)
- yield* input.onEntry(FileSystem.Entry.make({ path: RelativePath.make("src/index.ts"), type: "file" }))
- return []
- }),
- glob: () => Effect.succeed([]),
- grep: () => Effect.succeed([]),
- }),
- ),
- ],
- ])
- await Effect.runPromise(
- Effect.gen(function* () {
- const search = yield* FileSystemSearch.Service
- yield* Effect.sleep("10 millis")
- expect(observed?.limit).toBe(100_000)
- expect(observed?.exclude).toEqual([...Protected.names()].map((name) => `${name}/**`))
- expect((yield* search.find({ query: "src", type: "directory" }))[0]?.path).toBe(
- RelativePath.make(`src${path.sep}`),
- )
- }).pipe(Effect.provide(layer), Effect.scoped),
- )
- })
- })
|