gensx
Version:
`GenSX command line tools.
56 lines • 2.38 kB
JavaScript
import { useApp } from "ink";
import { useEffect, useState } from "react";
import { checkProjectExists } from "../models/projects.js";
import { readProjectConfig } from "../utils/project-config.js";
export function useProjectName(initialProjectName, skipValidation) {
const { exit } = useApp();
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
const [projectName, setProjectName] = useState(null);
const [isFromConfig, setIsFromConfig] = useState(false);
useEffect(() => {
let mounted = true;
async function resolveProjectName() {
try {
let resolvedProjectName = initialProjectName;
if (!resolvedProjectName) {
const projectConfig = await readProjectConfig(process.cwd());
if (!projectConfig?.projectName) {
throw new Error("No project name found. Either specify --project or create a gensx.yaml file with a 'projectName' field.");
}
resolvedProjectName = projectConfig.projectName;
if (mounted) {
setIsFromConfig(true);
}
}
// Only check if project exists if validation is not skipped
if (!skipValidation) {
const projectExists = await checkProjectExists(resolvedProjectName);
if (!projectExists) {
throw new Error(`Project ${resolvedProjectName} does not exist.`);
}
}
if (mounted) {
setProjectName(resolvedProjectName);
setLoading(false);
}
}
catch (err) {
if (mounted) {
const error = err instanceof Error ? err : new Error(String(err));
setError(error);
setLoading(false);
setTimeout(() => {
exit();
}, 100);
}
}
}
void resolveProjectName();
return () => {
mounted = false;
};
}, [initialProjectName, exit, skipValidation]);
return { loading, error, projectName, isFromConfig };
}
//# sourceMappingURL=useProjectName.js.map