scrabble-solver
Version:
Scrabble Solver 2 - Free, open-source, cross-platform, multi-language analysis tool for Scrabble, Scrabble Duel, Super Scrabble, Letter League, Crossplay, Literaki, and Kelimelik. Quickly find the top-scoring words using the given board and tiles.
38 lines (31 loc) • 1.28 kB
text/typescript
import { Board } from '@scrabble-solver/types';
import { registerRoute } from 'workbox-routing';
import { type VerifyRequestPayload } from '@/types';
import { revalidateDictionary } from './dictionaries';
import { getTrie } from './getTrie';
const headers = {
'Content-Type': 'application/json; charset=utf-8',
};
export const routeVerifyRequests = () => {
registerRoute(
({ url }) => url.origin === location.origin && url.pathname === '/api/verify',
async ({ request }) => {
const requestJson: VerifyRequestPayload = await request.clone().json();
const { board: boardJson, locale } = requestJson;
const trie = await getTrie(locale);
if (!trie) {
const response = await fetch(request);
// eslint-disable-next-line @typescript-eslint/no-floating-promises
revalidateDictionary(locale);
return response;
}
const board = Board.fromJson(boardJson);
const words = board.getWords().sort((a, b) => a.localeCompare(b, locale));
const invalidWords = words.filter((word) => !trie.has(word));
const validWords = words.filter((word) => trie.has(word));
const json = JSON.stringify({ invalidWords, validWords });
return new Response(json, { headers });
},
'POST',
);
};