Files
kuber/lib/yaml.ts
T
2026-08-08 22:23:27 +07:00

33 lines
973 B
TypeScript

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<typeof z.fromJSONSchema>[0],
) as z.ZodType<ComposeSpecification>;
export function readCompose(path: string): Promise<ComposeSpecification> {
return file(path).text().then(YAML.parse).then(ComposeSchema.parse);
}
export async function resolveComposeFile(
path: string,
): Promise<string | undefined> {
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];
}