8881214213
Mechanical, behaviour-preserving removal of Stage N / TODO-N / phase (RN) references from comments, doc-comments, service READMEs, the current-state docs (ARCHITECTURE, FUNCTIONAL+_ru, TESTING, UI_DESIGN), config-file comments, and the .fbs/.proto schema comments. PLAN.md / PRERELEASE.md / CLAUDE.md keep the stage history. - Rename the only stage-named identifiers: registerStage8 -> registerSocialOps, registerStage11 -> registerLinkOps (gateway transcode). - Split stage6_test.go: TestEmailLoginFlow -> email_test.go, TestGuestAutoMatchLeavesNoStats (+ provisionGuest) -> account_test.go. - Regenerated proto bindings (push.pb.go, telegram_grpc.pb.go) from the de-staged .proto comments; FB Go/TS bindings unchanged (flatc strips schema comments). go build/vet/gofmt clean across modules; integration typecheck and pnpm check green.
42 lines
1.7 KiB
TypeScript
42 lines
1.7 KiB
TypeScript
// Mock alphabet fixtures. In production the per-variant (index, letter, value)
|
||
// table comes from the server; the mock seeds the same client cache from a local copy so
|
||
// the rack, the blank chooser and the mock's scoring work with no backend. The data is the
|
||
// solver's value tables (scrabble-solver/rules/rules.go), in alphabet-index order, so a
|
||
// token's position is its index — the same shape the wire delivers.
|
||
|
||
import { setAlphabet, type AlphabetEntryWire } from '../alphabet';
|
||
import type { Variant } from '../model';
|
||
|
||
// "letter+value" tokens in alphabet-index order. English Latin a..z; Russian а..я incl. ё;
|
||
// Эрудит а..я incl. ё=0.
|
||
const SPECS: Record<Variant, string> = {
|
||
scrabble_en:
|
||
'a1 b3 c3 d2 e1 f4 g2 h4 i1 j8 k5 l1 m3 n1 o1 p3 q10 r1 s1 t1 u1 v4 w4 x8 y4 z10',
|
||
scrabble_ru:
|
||
'а1 б3 в1 г3 д2 е1 ё3 ж5 з5 и1 й4 к2 л2 м2 н1 о1 п2 р1 с1 т1 у2 ф10 х5 ц5 ч5 ш8 щ10 ъ10 ы4 ь3 э8 ю8 я3',
|
||
erudit_ru:
|
||
'а1 б3 в2 г3 д2 е1 ё0 ж5 з5 и1 й2 к2 л2 м2 н1 о1 п2 р2 с2 т2 у3 ф10 х5 ц10 ч5 ш10 щ10 ъ10 ы5 ь5 э10 ю10 я3',
|
||
};
|
||
|
||
function parse(spec: string): AlphabetEntryWire[] {
|
||
return spec
|
||
.trim()
|
||
.split(/\s+/)
|
||
.map((tok, index) => {
|
||
const m = tok.match(/^(.+?)(\d+)$/);
|
||
return { index, letter: m ? m[1] : tok, value: m ? Number(m[2]) : 0 };
|
||
});
|
||
}
|
||
|
||
let seeded = false;
|
||
|
||
/** seedMockAlphabets populates the alphabet cache for every variant once, mirroring the
|
||
* server-sent tables so the mock-driven UI is alphabet-agnostic too. */
|
||
export function seedMockAlphabets(): void {
|
||
if (seeded) return;
|
||
for (const variant of Object.keys(SPECS) as Variant[]) {
|
||
setAlphabet(variant, parse(SPECS[variant]));
|
||
}
|
||
seeded = true;
|
||
}
|