d9950598d0
compliance-close / close-non-compliant (push) Has been cancelled
beta / sync (push) Has been cancelled
docs-update / update-docs (push) Has been cancelled
deploy / deploy (push) Has been cancelled
docs-locale-sync / sync-locales (push) Has been cancelled
generate / generate (push) Has been cancelled
nix-eval / nix-eval (push) Has been cancelled
nix-hashes / compute-hash (blacksmith-4vcpu-ubuntu-2404, x86_64-linux) (push) Has been cancelled
nix-hashes / compute-hash (blacksmith-4vcpu-ubuntu-2404-arm, aarch64-linux) (push) Has been cancelled
nix-hashes / compute-hash (macos-15-intel, x86_64-darwin) (push) Has been cancelled
nix-hashes / compute-hash (macos-latest, aarch64-darwin) (push) Has been cancelled
nix-hashes / update-hashes (push) Has been cancelled
publish / version (push) Has been cancelled
publish / build-cli (push) Has been cancelled
publish / sign-cli-windows (push) Has been cancelled
publish / build-tauri (map[host:blacksmith-4vcpu-ubuntu-2404 target:x86_64-unknown-linux-gnu]) (push) Has been cancelled
publish / build-tauri (map[host:blacksmith-4vcpu-windows-2025 target:x86_64-pc-windows-msvc]) (push) Has been cancelled
publish / build-tauri (map[host:blacksmith-8vcpu-ubuntu-2404-arm target:aarch64-unknown-linux-gnu]) (push) Has been cancelled
publish / build-tauri (map[host:macos-latest target:aarch64-apple-darwin]) (push) Has been cancelled
publish / build-tauri (map[host:macos-latest target:x86_64-apple-darwin]) (push) Has been cancelled
publish / build-tauri (map[host:windows-2025 target:aarch64-pc-windows-msvc]) (push) Has been cancelled
publish / build-electron (map[host:blacksmith-4vcpu-ubuntu-2404 platform_flag:--linux target:aarch64-unknown-linux-gnu]) (push) Has been cancelled
publish / build-electron (map[host:blacksmith-4vcpu-ubuntu-2404 platform_flag:--linux target:x86_64-unknown-linux-gnu]) (push) Has been cancelled
publish / build-electron (map[host:blacksmith-4vcpu-windows-2025 platform_flag:--win target:x86_64-pc-windows-msvc]) (push) Has been cancelled
publish / build-electron (map[host:macos-latest platform_flag:--mac --arm64 target:aarch64-apple-darwin]) (push) Has been cancelled
publish / build-electron (map[host:macos-latest platform_flag:--mac --x64 target:x86_64-apple-darwin]) (push) Has been cancelled
publish / build-electron (map[host:windows-2025 platform_flag:--win --arm64 target:aarch64-pc-windows-msvc]) (push) Has been cancelled
publish / publish (push) Has been cancelled
storybook / storybook build (push) Has been cancelled
test / unit (linux) (push) Has been cancelled
test / unit (windows) (push) Has been cancelled
test / e2e (linux) (push) Has been cancelled
test / e2e (windows) (push) Has been cancelled
typecheck / typecheck (push) Has been cancelled
stats / stats (push) Has been cancelled
daily-pr-recap / pr-recap (push) Has been cancelled
daily-issues-recap / daily-recap (push) Has been cancelled
close-issues / close (push) Has been cancelled
close-stale-prs / close-stale-prs (push) Has been cancelled
56 lines
1.7 KiB
TypeScript
56 lines
1.7 KiB
TypeScript
export * as ConfigPaths from "./paths"
|
|
|
|
import path from "path"
|
|
import { Filesystem } from "@/util"
|
|
import { Flag } from "@/flag/flag"
|
|
import { Global } from "@/global"
|
|
import { unique } from "remeda"
|
|
import { JsonError } from "./error"
|
|
import * as Effect from "effect/Effect"
|
|
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
|
|
|
|
export const files = Effect.fn("ConfigPaths.projectFiles")(function* (
|
|
name: string,
|
|
directory: string,
|
|
worktree?: string,
|
|
) {
|
|
const afs = yield* AppFileSystem.Service
|
|
return (yield* afs.up({
|
|
targets: [`${name}.jsonc`, `${name}.json`],
|
|
start: directory,
|
|
stop: worktree,
|
|
})).toReversed()
|
|
})
|
|
|
|
export const directories = Effect.fn("ConfigPaths.directories")(function* (directory: string, worktree?: string) {
|
|
const afs = yield* AppFileSystem.Service
|
|
return unique([
|
|
Global.Path.config,
|
|
...(!Flag.OPENCODE_DISABLE_PROJECT_CONFIG
|
|
? yield* afs.up({
|
|
targets: [".opencode"],
|
|
start: directory,
|
|
stop: worktree,
|
|
})
|
|
: []),
|
|
...(yield* afs.up({
|
|
targets: [".opencode"],
|
|
start: Global.Path.home,
|
|
stop: Global.Path.home,
|
|
})),
|
|
...(Flag.OPENCODE_CONFIG_DIR ? [Flag.OPENCODE_CONFIG_DIR] : []),
|
|
])
|
|
})
|
|
|
|
export function fileInDirectory(dir: string, name: string) {
|
|
return [path.join(dir, `${name}.json`), path.join(dir, `${name}.jsonc`)]
|
|
}
|
|
|
|
/** Read a config file, returning undefined for missing files and throwing JsonError for other failures. */
|
|
export async function readFile(filepath: string) {
|
|
return Filesystem.readText(filepath).catch((err: NodeJS.ErrnoException) => {
|
|
if (err.code === "ENOENT") return
|
|
throw new JsonError({ path: filepath }, { cause: err })
|
|
})
|
|
}
|