MCPcopy Create free account
hub / github.com/Tatamo/atcoder-cli / findProjectJSON

Function findProjectJSON

src/project.ts:47–77  ·  view source on GitHub ↗
(path?: string)

Source from the content-addressed store, hash-verified

45 * @param path 省略するとカレントディレクトリを使用
46 */
47export async function findProjectJSON(path?: string): Promise<{ path: string, data: ContestProject }> {
48 const readFilePromise = promisify(readFile);
49 let cwd = path !== undefined ? path : process.cwd();
50
51 const data: ContestProject =
52 await (async () => {
53 let data = null;
54 while (true) {
55 try {
56 let filepath = resolve(cwd, PROJECT_JSON_FILE_NAME);
57 data = JSON.parse(await readFilePromise(filepath, "utf8"));
58 return data;
59 } catch (e) {
60 if (e.code === "ENOENT") {
61 // ファイルが存在しないので上の階層を探す
62 const parent = resolve(cwd, "..");
63 if (parent === cwd) {
64 throw new Error(`${PROJECT_JSON_FILE_NAME} not found.`);
65 }
66 cwd = parent;
67 }
68 else {
69 throw e;
70 }
71 }
72 }
73 })();
74 const [valid, error] = await validateProjectJSON(data);
75 if (valid) return {path: cwd, data};
76 else throw new Error(`failed to validate JSON: ${error!}`);
77}
78
79/**
80 * プロジェクトファイルを探し、現在のディレクトリ構造からコンテストと問題を特定する

Callers 5

contestFunction · 0.90
tasksFunction · 0.90
addFunction · 0.90
detectTaskByPathFunction · 0.85
saveProjectJSONFunction · 0.85

Calls 1

validateProjectJSONFunction · 0.85

Tested by

no test coverage detected