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', ); };