Files
Aislo/A00_Common/spreadsheet/spreadsheet_eval.ts
T
eomsangdonandClaude Opus 5.5 26fd4fb72e feat(spreadsheet): 산출근거 스프레드시트 0 계약 — 타입 · 엔진 머리 · 저장 견본
- spreadsheet_types.ts · spreadsheet_view_types.ts — 문서 · 칸 · 서식 · 수식 나무 · 값 · 명령 · 계산 엔진 · 화면 문맥 계약
- 머리 주석에 파일 · 주인(A~F) · 예산 줄 수 · 크기 예산(gzip 54 KB) · 규칙(외부 라이브러리 0 · M02 만 늦게 불러옴)
- A · B 엔진 · C 격자 · D 진입 · E 도구 공개 함수 머리(빈 몸)
- spreadsheet_sample.json — basis/<열 id>.json 한 벌 견본(병합 · 서식 · 다른 시트 참조 · 숨김 · 계산값)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0168FQuoV7vDh5nhnSowW5cp
2026-09-27 19:48:20 +09:00

59 lines
1.8 KiB
TypeScript

/* =============================================================================
* spreadsheet_eval.ts (주인 A)
* 나무 풀기 · 오류 값 전파 · 형 바꾸기(엑셀 규칙). B 의 함수들이 형 바꾸기 도우미를 씀.
* 빈 칸 = 수에서 0 · 글에서 "" · `"12"+1 = 13` · `TRUE+1 = 2` · 글이 수로 안 읽히면 `#VALUE!`.
* 무리수(SQRT · 삼각 · PI · 소수 거듭제곱)는 double → 유효 15 자리 십진 → 분수(B · A 같이 `fromDouble`).
* 0 계약 머리 — 몸은 A 가 채움.
* ========================================================================== */
import type {
CalcValue,
ErrorCode,
ErrorValue,
EvalContext,
EvalResult,
FormulaNode,
Frac,
Scalar,
} from "./spreadsheet_types";
const todo = (): never => {
throw new Error("spreadsheet_eval: 아직 없음(A)");
};
export function evaluate(_node: FormulaNode, _ctx: EvalContext): EvalResult {
return todo();
}
export function err(_code: ErrorCode, _why?: string): ErrorValue {
return todo();
}
export function isError(_value: unknown): _value is ErrorValue {
return todo();
}
/** 수로 — 빈 칸 0 · 참거짓 1/0 · 수 글 · 아니면 `#VALUE!` · 범위는 칸 하나일 때만 */
export function asNumber(_value: EvalResult): Frac | ErrorValue {
return todo();
}
/** 글로 — 수는 일반 형식 글(엑셀 `&` 와 같게) · 참거짓 `TRUE`/`FALSE` */
export function asText(_value: EvalResult): string | ErrorValue {
return todo();
}
export function asBool(_value: EvalResult): boolean | ErrorValue {
return todo();
}
/** double → 유효 15 자리 십진 → 분수 · NaN · 무한은 `#NUM!` */
export function fromDouble(_x: number): Frac | ErrorValue {
return todo();
}
/** 저장 모양 — 수는 십진 글(30 자리까지) */
export function toCalcValue(_value: Scalar): CalcValue {
return todo();
}