/* * **어느 레시피로 만들었나** — 판정만. 순수하다. * * ── 왜 따로 있나 ─────────────────────────────────────────────────────────── * 계보 질의는 TypeORM 과 shell 을 끌어온다. 규칙만 재려는 시험이 그것까지 들고 오면 무겁고, 이 * 저장소에서 그 이유로 시험이 안 서는 일을 겪었다. 판단과 배선을 나눈다 — 여기는 값만 보고 답한다. */ /** * 짐작하지 않는 규칙. * * order 오더가 말했다. 버전이 둘이든 열이든 그것을 쓴다 * only-candidate 오더는 말 안 했지만 후보가 하나다 — 고를 것이 없으면 짐작이 아니다 * ambiguous 후보가 둘 이상인데 말해 주는 것이 없다 → **답하지 않는다** * said-but-undeclared 오더는 말했는데 그 레시피가 선언에 없다 — 모르는 것이 아니라 어긋난 것이다 * * 마지막 둘을 가르는 이유: 사람이 할 일이 다르다. 어긋남은 선언이나 원본을 고칠 일이고, * 모호함은 그 개체가 어느 것으로 만들어졌는지 기록이 없는 일이다. */ export function chooseRecipe( recipes: any[], candidates: any[], saidRecipeKey: string | undefined ): { recipe?: any; basis: 'order' | 'only-candidate' | 'ambiguous' | 'said-but-undeclared' | 'none' } { if (saidRecipeKey) { const said = recipes.find((r: any) => r?.key === saidRecipeKey) return said ? { recipe: said, basis: 'order' } : { basis: 'said-but-undeclared' } } if (candidates.length === 1) return { recipe: candidates[0], basis: 'only-candidate' } if (candidates.length > 1) return { basis: 'ambiguous' } return { basis: 'none' } }