mirror of
https://github.com/morluto/rea
synced 2026-10-26 14:25:49 -04:00
45e3edc17f
* feat(javascript): report observed export property presence Extend compare_javascript_export_shapes so each retained return variant lists observed property names and each change reports presence independently of value resolution. Complete parent coverage classifies one-sided names as added or removed even when static values stay unknown. Fixes #725 * test(javascript): match unknown export-shape values by availability Nested availability objects include a reason when values stay unresolved. Assert availability through objectContaining so presence-only added and removed rows still verify unknown values. * fix(javascript): preserve uncertain export property presence and locations * fix(javascript): normalize presence and preserve local property coverage * fix(javascript): require present discriminants for return pairing * fix(javascript): normalize retained shapes before comparison * refactor(javascript): share return projection with executable examples * fix(javascript): localize uncertainty for missing mutated slots * fix(javascript): bind advertised export examples to exact artifacts * fix(javascript): keep uncertain property flow as candidates --------- Co-authored-by: morluto <76467478+morluto@users.noreply.github.com>
23 lines
779 B
TypeScript
23 lines
779 B
TypeScript
import { createHash } from "node:crypto";
|
|
|
|
import canonicalize from "canonicalize";
|
|
|
|
/**
|
|
* Canonically encode one export-shape comparison value.
|
|
*
|
|
* Comparison identifiers hash the full result semantics, including each
|
|
* change's presence object and the per-variant property inventories.
|
|
*/
|
|
export const canonicalExportShapeValue = (value: unknown): string => {
|
|
const encoded = canonicalize(value);
|
|
if (encoded === undefined)
|
|
throw new TypeError(
|
|
"JavaScript export shape comparison could not canonicalize data",
|
|
);
|
|
return encoded;
|
|
};
|
|
|
|
/** Derive one deterministic SHA-256 comparison identifier component. */
|
|
export const digestExportShapeValue = (value: unknown): string =>
|
|
createHash("sha256").update(canonicalExportShapeValue(value)).digest("hex");
|