authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-09-05 01:30:22-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-09-05 01:30:22-07:00
logc2aff911c37f94558ab273ca3d44bb4854d01714
treec80a21ecdcb007096a4b04bb043ef20f9a0e39ea
parent56a2f42b8ce27f5deefaa85a02ae9c1d3b61f309
signature Signed by PGP key B5690EEEBB952194

refactor(mobile): keep review reset hashing private (#10048)


3 files changed, 10 insertions(+), 13 deletions(-)

apps/mobile/src/features/review/reviewDiffBridgeKeys.test.ts+8-11
......@@ -1,9 +1,9 @@
11import { describe, expect, it } from "vite-plus/test";
22
3import { buildNativeReviewTokensResetKey, hashReviewDiffKey } from "./reviewDiffBridgeKeys";
3import { buildNativeReviewTokensResetKey } from "./reviewDiffBridgeKeys";
44
55describe("native review diff bridge", () => {
6 it("builds stable reset keys from the rendered diff identity", () => {
6 it("changes reset keys when the rendered diff identity changes", () => {
77 const input = {
88 threadKey: "env:thread",
99 sectionId: "turn:2",
......@@ -13,15 +13,12 @@ describe("native review diff bridge", () => {
1313 rowCount: 4,
1414 };
1515
16 expect(buildNativeReviewTokensResetKey(input)).toBe(buildNativeReviewTokensResetKey(input));
17 expect(buildNativeReviewTokensResetKey({ ...input, rowCount: 5 })).not.toBe(
18 buildNativeReviewTokensResetKey(input),
19 );
20 expect(buildNativeReviewTokensResetKey({ ...input, diff: null })).toContain(":empty:");
21 });
16 const resetKey = buildNativeReviewTokensResetKey(input);
2217
23 it("includes diff length in the hash key to reduce accidental collisions", () => {
24 expect(hashReviewDiffKey("abc")).toMatch(/^3:/);
25 expect(hashReviewDiffKey("abcd")).toMatch(/^4:/);
18 expect(
19 buildNativeReviewTokensResetKey({ ...input, diff: "diff --git a/b.ts b/b.ts" }),
20 ).not.toBe(resetKey);
21 expect(buildNativeReviewTokensResetKey({ ...input, rowCount: 5 })).not.toBe(resetKey);
22 expect(buildNativeReviewTokensResetKey({ ...input, diff: null })).not.toBe(resetKey);
2623 });
2724});
apps/mobile/src/features/review/reviewDiffBridgeKeys.ts+1-1
......@@ -3,7 +3,7 @@ import type { NativeReviewDiffHighlightScheme } from "../diffs/nativeReviewDiffH
33// Pure key-derivation helpers for the native review diff bridge. Kept free of
44// react-native / hook imports so they stay unit-testable in node.
55
6export function hashReviewDiffKey(diff: string | null | undefined): string {
6function hashReviewDiffKey(diff: string | null | undefined): string {
77 if (!diff) {
88 return "empty";
99 }
apps/mobile/src/features/review/useNativeReviewDiffBridge.ts+1-1
......@@ -8,7 +8,7 @@ import { useNativeReviewDiffHighlighting } from "./useNativeReviewDiffHighlighti
88import { buildNativeReviewTokensResetKey } from "./reviewDiffBridgeKeys";
99import { useUniwindTheme } from "../../lib/useUniwindTheme";
1010
11export { buildNativeReviewTokensResetKey, hashReviewDiffKey } from "./reviewDiffBridgeKeys";
11export { buildNativeReviewTokensResetKey } from "./reviewDiffBridgeKeys";
1212
1313export function useNativeReviewDiffBridge(input: {
1414 readonly threadKey: string | null;