1- import { FunboxWordsFrequency , WordsetPick , Wordset } from "../wordset" ;
1+ import {
2+ FunboxWordsFrequency ,
3+ WordsetPick ,
4+ Wordset ,
5+ IWordset ,
6+ } from "../wordset" ;
27import * as GetText from "../../utils/generate" ;
38import { Config } from "../../config/store" ;
49import { setConfig , toggleFunbox } from "../../config/setters" ;
@@ -30,9 +35,9 @@ import { Language, LanguageObject } from "@monkeytype/schemas/languages";
3035import { qs } from "../../utils/dom" ;
3136
3237export type FunboxFunctions = {
33- getWord ?: ( wordset ?: Wordset , wordIndex ?: number ) => string ;
38+ getWord ?: ( wordset ?: IWordset , wordIndex ?: number ) => string ;
3439 punctuateWord ?: ( word : string ) => string ;
35- withWords ?: ( words ?: string [ ] ) => Promise < Wordset | PolyglotWordset > ;
40+ withWords ?: ( words ?: string [ ] ) => Promise < IWordset > ;
3641 alterText ?: ( word : string , wordIndex : number , wordsBound : number ) => string ;
3742 applyConfig ?: ( ) => void ;
3843 applyGlobalCSS ?: ( ) => void ;
@@ -149,25 +154,36 @@ class PseudolangWordGenerator extends Wordset {
149154 }
150155}
151156
152- export class PolyglotWordset extends Wordset {
157+ export class PolyglotWordset implements IWordset {
153158 readonly wordsetMap : Map < Language , Wordset > ;
154159 readonly languageProperties : Map < Language , JSONData . LanguageProperties > ;
155160 readonly langs : Language [ ] ;
161+ length : number ;
162+
163+ constructor ( languages : LanguageObject [ ] ) {
164+ this . languageProperties = new Map < Language , JSONData . LanguageProperties > ( ) ;
165+ this . wordsetMap = new Map < Language , Wordset > ( ) ;
166+ this . length = 0 ;
167+
168+ for ( const lang of languages ) {
169+ const count = lang . words . length ;
170+ this . length += count ;
171+
172+ this . languageProperties . set ( lang . name , {
173+ noLazyMode : lang . noLazyMode ,
174+ ligatures : lang . ligatures ,
175+ rightToLeft : lang . rightToLeft ,
176+ additionalAccents : lang . additionalAccents ,
177+ } ) ;
156178
157- constructor (
158- words : string [ ] ,
159- wordsetMap : Map < Language , Wordset > ,
160- languageProperties : Map < Language , JSONData . LanguageProperties > ,
161- ) {
162- super ( words ) ;
163- this . languageProperties = languageProperties ;
164- this . langs = Array . from ( languageProperties . keys ( ) ) ;
165- this . wordsetMap = wordsetMap ;
179+ this . wordsetMap . set ( lang . name , new Wordset ( lang . words ) ) ;
180+ }
181+ this . langs = Array . from ( this . languageProperties . keys ( ) ) ;
182+ this . length = length ;
166183 this . resetIndexes ( ) ;
167- this . length = words . length ;
168184 }
169185
170- override resetIndexes ( ) : void {
186+ resetIndexes ( ) : void {
171187 this . wordsetMap . forEach ( ( ws ) => {
172188 ws . resetIndexes ( ) ;
173189 } ) ;
@@ -183,17 +199,17 @@ export class PolyglotWordset extends Wordset {
183199 return { wordset : this . wordsetMap . get ( language ) as Wordset , language } ;
184200 }
185201
186- override randomWord ( mode : FunboxWordsFrequency ) : WordsetPick {
202+ randomWord ( mode : FunboxWordsFrequency ) : WordsetPick {
187203 const { wordset, language } = this . getWordsetAndLang ( ) ;
188204 return { word : wordset . randomWord ( mode ) . word , language } ;
189205 }
190206
191- override shuffledWord ( ) : WordsetPick {
207+ shuffledWord ( ) : WordsetPick {
192208 const { wordset, language } = this . getWordsetAndLang ( ) ;
193209 return { word : wordset . shuffledWord ( ) . word , language } ;
194210 }
195211
196- override nextWord ( ) : WordsetPick {
212+ nextWord ( ) : WordsetPick {
197213 const { wordset, language } = this . getWordsetAndLang ( ) ;
198214 return { word : wordset . nextWord ( ) . word , language } ;
199215 }
@@ -580,9 +596,9 @@ const list: Partial<Record<FunboxName, FunboxFunctions>> = {
580596 } ,
581597 } ,
582598 weakspot : {
583- getWord ( wordset ?: Wordset ) : string {
599+ getWord ( wordset ?: IWordset ) : string {
584600 if ( wordset !== undefined ) return WeakSpot . getWord ( wordset ) ;
585- else return "" ;
601+ return "" ;
586602 } ,
587603 } ,
588604 pseudolang : {
@@ -772,30 +788,7 @@ const list: Partial<Record<FunboxName, FunboxFunctions>> = {
772788 throw new WordGenError ( "" ) ;
773789 }
774790
775- // build languageProperties
776- const languageProperties : Map < Language , JSONData . LanguageProperties > =
777- new Map (
778- languages . map ( ( lang ) => [
779- lang . name ,
780- {
781- noLazyMode : lang . noLazyMode ,
782- ligatures : lang . ligatures ,
783- rightToLeft : lang . rightToLeft ,
784- additionalAccents : lang . additionalAccents ,
785- } ,
786- ] ) ,
787- ) ;
788- // build wordsetMap and words
789- const wordsetMap = new Map < Language , Wordset > ( ) ;
790- let end = 0 ;
791- const words : string [ ] = [ ] ;
792- for ( const lang of languages ) {
793- const start = end ;
794- end += lang . words . length ;
795- words . push ( ...lang . words ) ;
796- wordsetMap . set ( lang . name , new Wordset ( words . slice ( start , end ) ) ) ;
797- }
798- return new PolyglotWordset ( words , wordsetMap , languageProperties ) ;
791+ return new PolyglotWordset ( languages ) ;
799792 } ,
800793 } ,
801794} ;
0 commit comments