import z from "zod"; import { readdir } from "node:fs/promises"; import { join } from "node:path"; import type { ComposeSpecification } from "../schema/docker.d"; import JsonSchema from "../schema/docker.ts"; import { file, YAML } from "bun"; const ComposeFileNames = new Set([ "compose.yml", "compose.yaml", "docker-compose.yml", "docker-compose.yaml", ]); const ComposeSchema = z.fromJSONSchema( JsonSchema as unknown as Parameters[0], ) as z.ZodType; export function readCompose(path: string): Promise { return file(path).text().then(YAML.parse).then(ComposeSchema.parse); } export async function resolveComposeFile( path: string, ): Promise { const entries = await readdir(path, { withFileTypes: true }); return entries .filter((entry) => entry.isFile() && ComposeFileNames.has(entry.name)) .map((entry) => join(path, entry.name)) .sort()[0]; }