/** * canonical.ts — canonical-serialization.md の参照実装(doc-grade, COMMON)。 * * 提供する 3 プリミティブ: * - pyFloatRepr(n) : CPython repr(float) 相当の正準10進(parity SSoT = Python) * - canonicalValue(v) : key identity(トップレベルのみキーソート) — §2 serializeContractKey * - canonicalJson(v) : fingerprint(全階層キーソート) — §3 canonicalJson * * 値モデルは expr-eval.ts と共有(bigint=int / number=float / string / bool / null / arr / obj)。 * 型付き値エンコード({int:"..."} / {float:n})は canonicalJson/canonicalValue が * 「値」を直列化するときの中間表現ではなく、expr-eval.encodeValue(IR 層)が担う点に注意 * (canonical-serialization.md §4.3: IR 直列化と値直列化は別層)。ここでは runtime 値の直列化を扱う: * - int(bigint) → 素の JSON 整数(範囲外も 10 進整数として素通し。DynamoDB N 値層) * - float(number)→ pyFloatRepr(§4.1)。NaN/±Inf は Failure(§4.1-6) * * canonical-serialization.md §4.1 の CPython format_float_short('r') を移植する。 */ import type { Value } from "./expr-eval.js"; export type CanonicalFailureCode = "NAN_OR_INF" | "INVALID_VALUE" | "FORBIDDEN_KEY"; export declare class CanonicalFailure extends Error { code: CanonicalFailureCode; constructor(code: CanonicalFailureCode, message: string); } /** * pyFloatRepr — CPython の repr(float) / json.dumps(float) と byte 一致する 10 進表現。 * * 規則(canonical-serialization.md §4.1 / CPython format_float_short('r')): * 1. 最短往復 digits(JS の Number.prototype.toString(10) は shortest round-trip を出す)。 * 2. scientific 判定: decpt <= -4 || decpt > 16 のとき指数表記。 * 3. 指数は符号つき・最低 2 桁 zero-pad(e+05 / e-07)。 * 4. 整数値 float は `.0` を保つ(123 → "123.0")。 * 5. -0.0 は "-0.0"、+0.0 は "0.0"(signbit で復元)。 * 6. NaN / ±Inf は Failure。 * * decpt は「10 進小数点の位置」= CPython の decpt。digits d1d2… に対し値 = 0.d1d2… × 10^decpt。 */ export declare function pyFloatRepr(n: number): string; /** * canonicalValue — key identity 用の正準直列化。 * トップレベル object のキーのみ昇順ソートし、compact JSON を返す。 * ネスト値は挿入順のまま(canonical-serialization.md §2 の注: ネスト key identity は canonicalJson を使う)。 */ export declare function canonicalValue(v: Value): string; /** canonicalJson — fingerprint 用。全 object 階層のキーを昇順ソート(配列は順序保持)。 */ export declare function canonicalJson(v: Value): string; //# sourceMappingURL=canonical.d.ts.map