Download packages/core/test/location-filesystem.test.ts from SaylorTwift/opencode: direct link, hf CLI and curl.
- Browser
- Download file 2.79 kB
-
https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/core/test/location-filesystem.test.ts
- Command line
-
hf download hf://SaylorTwift/opencode/packages/core/test/location-filesystem.test.ts
-
curl -L -o location-filesystem.test.ts https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/core/test/location-filesystem.test.ts
2.79 kB
| import fs from "fs/promises" | |
| import path from "path" | |
| import { describe, expect } from "bun:test" | |
| import { Effect, Exit, Layer } from "effect" | |
| import { LayerNode } from "@opencode-ai/core/effect/layer-node" | |
| import { FileSystem } from "@opencode-ai/core/filesystem" | |
| import { Location } from "@opencode-ai/core/location" | |
| import { AbsolutePath, RelativePath } from "@opencode-ai/core/schema" | |
| import { location } from "./fixture/location" | |
| import { tmpdir } from "./fixture/tmpdir" | |
| import { it } from "./lib/effect" | |
| const provide = (directory: string) => | |
| Effect.provide( | |
| LayerNode.compile(FileSystem.node, [ | |
| [ | |
| Location.node, | |
| Layer.succeed(Location.Service, Location.Service.of(location({ directory: AbsolutePath.make(directory) }))), | |
| ], | |
| ]), | |
| ) | |
| const withTmp = <A, E, R>(f: (directory: string) => Effect.Effect<A, E, R>) => | |
| Effect.acquireRelease( | |
| Effect.promise(() => tmpdir()), | |
| (tmp) => Effect.promise(() => tmp[Symbol.asyncDispose]()), | |
| ).pipe(Effect.flatMap((tmp) => f(tmp.path))) | |
| describe("FileSystem", () => { | |
| it.live("reads text and binary files", () => | |
| withTmp((directory) => | |
| Effect.gen(function* () { | |
| yield* Effect.promise(() => fs.writeFile(path.join(directory, "text.txt"), "hello")) | |
| yield* Effect.promise(() => fs.writeFile(path.join(directory, "data.bin"), Buffer.from([0, 1, 2]))) | |
| const service = yield* FileSystem.Service | |
| const text = yield* service.read({ path: RelativePath.make("text.txt") }) | |
| const binary = yield* service.read({ path: RelativePath.make("data.bin") }) | |
| expect(new TextDecoder().decode(text.content)).toBe("hello") | |
| expect(text.mime).toBe("text/plain") | |
| expect(binary.content).toEqual(new Uint8Array([0, 1, 2])) | |
| }).pipe(provide(directory)), | |
| ), | |
| ) | |
| it.live("lists direct children", () => | |
| withTmp((directory) => | |
| Effect.gen(function* () { | |
| yield* Effect.promise(() => fs.mkdir(path.join(directory, "src"))) | |
| yield* Effect.promise(() => fs.writeFile(path.join(directory, "README.md"), "# Test")) | |
| const entries = yield* (yield* FileSystem.Service).list() | |
| expect(entries.map((entry) => ({ path: entry.path, type: entry.type }))).toEqual([ | |
| { path: RelativePath.make("src" + path.sep), type: "directory" }, | |
| { path: RelativePath.make("README.md"), type: "file" }, | |
| ]) | |
| }).pipe(provide(directory)), | |
| ), | |
| ) | |
| it.live("rejects lexical escapes", () => | |
| withTmp((directory) => | |
| Effect.gen(function* () { | |
| const result = yield* (yield* FileSystem.Service) | |
| .read({ path: RelativePath.make("../outside.txt") }) | |
| .pipe(Effect.exit) | |
| expect(Exit.isFailure(result)).toBe(true) | |
| }).pipe(provide(directory)), | |
| ), | |
| ) | |
| }) | |