import { T3_PROJECT_FILE_NAME, type EnvironmentId, type T3ProjectFile, type T3ProjectFileScript, } from "@t3tools/contracts"; import { parseT3ProjectFile } from "@t3tools/shared/t3ProjectFile"; import { useProjectFileQuery } from "~/components/files/projectFilesQueryState"; const NO_SCRIPTS: ReadonlyArray = []; export interface T3ProjectFileState { status: "loading" | "missing" | "invalid" | "valid"; file: T3ProjectFile | null; scripts: ReadonlyArray; } export function useT3ProjectFileState( environmentId: EnvironmentId, cwd: string | null, ): T3ProjectFileState { const query = useProjectFileQuery(environmentId, cwd ?? "", T3_PROJECT_FILE_NAME, cwd !== null); const contents = query.data && !query.data.truncated ? query.data.contents : null; const isPending = query.isPending; if (contents === null) { return { status: isPending ? "loading" : "missing", file: null, scripts: NO_SCRIPTS, } as const; } const file = parseT3ProjectFile(contents); if (file === null) { return { status: "invalid", file: null, scripts: NO_SCRIPTS } as const; } return { status: "valid", file, scripts: file.scripts ?? NO_SCRIPTS } as const; } export function useT3ProjectFileScripts( environmentId: EnvironmentId, cwd: string | null, ): ReadonlyArray { return useT3ProjectFileState(environmentId, cwd).scripts; }