fixture.ts 780 B

123456789101112131415161718192021222324
  1. import { $ } from "bun"
  2. import os from "os"
  3. import path from "path"
  4. type TmpDirOptions<Init extends Record<string, any>> = {
  5. git?: boolean
  6. init?: (dir: string) => Promise<Init>
  7. dispose?: (dir: string) => Promise<void>
  8. }
  9. export async function tmpdir<Init extends Record<string, any>>(options?: TmpDirOptions<Init>) {
  10. const dirpath = path.join(os.tmpdir(), "opencode-test-" + Math.random().toString(36).slice(2))
  11. await $`mkdir -p ${dirpath}`.quiet()
  12. if (options?.git) await $`git init`.cwd(dirpath).quiet()
  13. const extra = await options?.init?.(dirpath)
  14. const result = {
  15. [Symbol.asyncDispose]: async () => {
  16. await options?.dispose?.(dirpath)
  17. await $`rm -rf ${dirpath}`.quiet()
  18. },
  19. path: dirpath,
  20. extra: extra as Init,
  21. }
  22. return result
  23. }