scrabble-solver 2.12.1 → 2.12.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/README.md +36 -4
  2. package/lerna.json +1 -1
  3. package/package.json +9 -8
  4. package/packages/configs/build/games/index.d.ts +3 -0
  5. package/packages/configs/build/games/index.js +12 -0
  6. package/packages/configs/build/games/literaki.d.ts +25 -0
  7. package/packages/configs/build/games/literaki.js +110 -0
  8. package/packages/configs/build/games/scrabble.d.ts +18 -0
  9. package/packages/configs/build/games/scrabble.js +78 -0
  10. package/packages/configs/build/games/superScrabble.d.ts +18 -0
  11. package/packages/configs/build/games/superScrabble.js +141 -0
  12. package/packages/configs/build/getConfig.d.ts +2 -6
  13. package/packages/configs/build/getConfig.js +29 -10
  14. package/packages/configs/build/hasConfig.d.ts +3 -0
  15. package/packages/configs/build/hasConfig.js +31 -0
  16. package/packages/configs/build/index.d.ts +7 -4
  17. package/packages/configs/build/index.js +32 -9
  18. package/packages/configs/build/locales/deDe.d.ts +3 -0
  19. package/packages/configs/build/locales/deDe.js +42 -0
  20. package/packages/configs/build/locales/enGb.d.ts +3 -0
  21. package/packages/configs/build/locales/enGb.js +104 -0
  22. package/packages/configs/build/locales/enUs.d.ts +3 -0
  23. package/packages/configs/build/locales/enUs.js +104 -0
  24. package/packages/configs/build/locales/esEs.d.ts +3 -0
  25. package/packages/configs/build/locales/esEs.js +41 -0
  26. package/packages/configs/build/locales/faIr.d.ts +3 -0
  27. package/packages/configs/build/locales/faIr.js +45 -0
  28. package/packages/configs/build/locales/frFr.d.ts +3 -0
  29. package/packages/configs/build/locales/frFr.js +39 -0
  30. package/packages/configs/build/locales/index.d.ts +7 -0
  31. package/packages/configs/build/locales/index.js +20 -0
  32. package/packages/configs/build/locales/plPl.d.ts +3 -0
  33. package/packages/configs/build/locales/plPl.js +83 -0
  34. package/packages/configs/package.json +4 -4
  35. package/packages/configs/src/games/index.ts +3 -0
  36. package/packages/configs/src/games/literaki.ts +110 -0
  37. package/packages/configs/src/games/scrabble.ts +78 -0
  38. package/packages/configs/src/games/superScrabble.ts +141 -0
  39. package/packages/configs/src/getConfig.ts +8 -15
  40. package/packages/configs/src/hasConfig.ts +10 -0
  41. package/packages/configs/src/index.ts +7 -4
  42. package/packages/configs/src/locales/deDe.ts +43 -0
  43. package/packages/configs/src/locales/enGb.ts +105 -0
  44. package/packages/configs/src/locales/enUs.ts +105 -0
  45. package/packages/configs/src/locales/esEs.ts +42 -0
  46. package/packages/configs/src/locales/faIr.ts +46 -0
  47. package/packages/configs/src/locales/frFr.ts +40 -0
  48. package/packages/configs/src/locales/index.ts +7 -0
  49. package/packages/configs/src/locales/plPl.ts +84 -0
  50. package/packages/constants/package.json +2 -2
  51. package/packages/dictionaries/package-lock.json +3 -10
  52. package/packages/dictionaries/package.json +5 -5
  53. package/packages/logger/package-lock.json +3 -224
  54. package/packages/logger/package.json +2 -2
  55. package/packages/scrabble-solver/.next/BUILD_ID +1 -1
  56. package/packages/scrabble-solver/.next/build-manifest.json +14 -14
  57. package/packages/scrabble-solver/.next/cache/.tsbuildinfo +1 -1
  58. package/packages/scrabble-solver/.next/cache/eslint/.cache_8dgz12 +1 -1
  59. package/packages/scrabble-solver/.next/cache/next-server.js.nft.json +1 -1
  60. package/packages/scrabble-solver/.next/cache/webpack/client-production/0.pack +0 -0
  61. package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack +0 -0
  62. package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/0.pack +0 -0
  63. package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/index.pack +0 -0
  64. package/packages/scrabble-solver/.next/cache/webpack/server-production/0.pack +0 -0
  65. package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack +0 -0
  66. package/packages/scrabble-solver/.next/next-server.js.nft.json +1 -1
  67. package/packages/scrabble-solver/.next/prerender-manifest.json +1 -1
  68. package/packages/scrabble-solver/.next/required-server-files.json +1 -1
  69. package/packages/scrabble-solver/.next/routes-manifest.json +1 -1
  70. package/packages/scrabble-solver/.next/server/chunks/131.js +478 -106
  71. package/packages/scrabble-solver/.next/server/chunks/277.js +1202 -1013
  72. package/packages/scrabble-solver/.next/server/chunks/44.js +36 -6
  73. package/packages/scrabble-solver/.next/server/chunks/675.js +35 -13
  74. package/packages/scrabble-solver/.next/server/chunks/859.js +21 -4
  75. package/packages/scrabble-solver/.next/server/chunks/865.js +478 -106
  76. package/packages/scrabble-solver/.next/server/chunks/911.js +894 -773
  77. package/packages/scrabble-solver/.next/server/middleware-build-manifest.js +1 -1
  78. package/packages/scrabble-solver/.next/server/pages/404.html +1 -1
  79. package/packages/scrabble-solver/.next/server/pages/404.js.nft.json +1 -1
  80. package/packages/scrabble-solver/.next/server/pages/500.html +1 -1
  81. package/packages/scrabble-solver/.next/server/pages/_app.js +3 -1
  82. package/packages/scrabble-solver/.next/server/pages/_app.js.nft.json +1 -1
  83. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale]/[word].js +4 -2
  84. package/packages/scrabble-solver/.next/server/pages/api/solve.js +51 -20
  85. package/packages/scrabble-solver/.next/server/pages/api/verify.js +8 -5
  86. package/packages/scrabble-solver/.next/server/pages/index.html +1 -1
  87. package/packages/scrabble-solver/.next/server/pages/index.js +55 -65
  88. package/packages/scrabble-solver/.next/server/pages/index.js.nft.json +1 -1
  89. package/packages/scrabble-solver/.next/server/pages/index.json +1 -1
  90. package/packages/scrabble-solver/.next/server/pages-manifest.json +2 -2
  91. package/packages/scrabble-solver/.next/static/chunks/{framework-2c5cac93e8c637b5.js → framework-2c29dc3cd933590b.js} +2 -2
  92. package/packages/scrabble-solver/.next/static/chunks/main-4dcb7f9b52833aba.js +1 -0
  93. package/packages/scrabble-solver/.next/static/chunks/pages/_app-e7f3d1c9c09c8f91.js +32 -0
  94. package/packages/scrabble-solver/.next/static/chunks/pages/index-82b2939158c7729f.js +1 -0
  95. package/packages/scrabble-solver/.next/static/css/4e8b47fe382a8a8f.css +2 -0
  96. package/packages/scrabble-solver/.next/static/css/cfae5256f1689f57.css +1 -0
  97. package/packages/scrabble-solver/.next/static/{_yG9K-PD5kWT_p4sMdCSV → wNIKOJJzkMSJYb2nOL21o}/_buildManifest.js +1 -1
  98. package/packages/scrabble-solver/.next/trace +51 -52
  99. package/packages/scrabble-solver/package-lock.json +269 -5105
  100. package/packages/scrabble-solver/package.json +13 -13
  101. package/packages/scrabble-solver/src/components/Board/Board.module.scss +33 -0
  102. package/packages/scrabble-solver/src/components/Board/Board.tsx +3 -0
  103. package/packages/scrabble-solver/src/components/Board/BoardPure.tsx +25 -1
  104. package/packages/scrabble-solver/src/components/Board/components/Cell/Cell.module.scss +4 -12
  105. package/packages/scrabble-solver/src/components/Board/components/Cell/Cell.tsx +4 -0
  106. package/packages/scrabble-solver/src/components/Board/components/InputPrompt/InputPrompt.tsx +1 -0
  107. package/packages/scrabble-solver/src/components/Board/hooks/useBackgroundImage.tsx +24 -6
  108. package/packages/scrabble-solver/src/components/PlainTiles/lib/createPlainTile.ts +4 -4
  109. package/packages/scrabble-solver/src/components/Rack/components/InputPrompt/InputPrompt.tsx +1 -0
  110. package/packages/scrabble-solver/src/components/Radio/Radio.module.scss +4 -0
  111. package/packages/scrabble-solver/src/components/Radio/Radio.tsx +1 -0
  112. package/packages/scrabble-solver/src/components/SeoMessage/SeoMessage.tsx +3 -3
  113. package/packages/scrabble-solver/src/hooks/useAppLayout.ts +1 -2
  114. package/packages/scrabble-solver/src/hooks/useLocalStorage.ts +5 -5
  115. package/packages/scrabble-solver/src/i18n/constants.ts +31 -61
  116. package/packages/scrabble-solver/src/lib/extractCharacters.test.ts +3 -3
  117. package/packages/scrabble-solver/src/lib/extractCharactersByCase.test.ts +3 -3
  118. package/packages/scrabble-solver/src/lib/getCellSize.ts +2 -2
  119. package/packages/scrabble-solver/src/modals/MenuModal/MenuModal.module.scss +0 -1
  120. package/packages/scrabble-solver/src/modals/MenuModal/MenuModal.tsx +3 -3
  121. package/packages/scrabble-solver/src/modals/SettingsModal/SettingsModal.tsx +7 -3
  122. package/packages/scrabble-solver/src/modals/SettingsModal/components/ConfigSetting/ConfigSetting.tsx +16 -7
  123. package/packages/scrabble-solver/src/modals/SettingsModal/components/LocaleSetting/LocaleSetting.module.scss +1 -4
  124. package/packages/scrabble-solver/src/modals/SettingsModal/components/LocaleSetting/LocaleSetting.tsx +8 -8
  125. package/packages/scrabble-solver/src/pages/_app.tsx +3 -1
  126. package/packages/scrabble-solver/src/pages/api/dictionary/[locale]/[word].ts +6 -3
  127. package/packages/scrabble-solver/src/pages/api/solve.ts +11 -7
  128. package/packages/scrabble-solver/src/pages/api/verify.ts +11 -7
  129. package/packages/scrabble-solver/src/pages/index.module.scss +0 -1
  130. package/packages/scrabble-solver/src/parameters/index.ts +4 -6
  131. package/packages/scrabble-solver/src/sdk/solve.ts +3 -3
  132. package/packages/scrabble-solver/src/sdk/verify.ts +3 -3
  133. package/packages/scrabble-solver/src/service-worker/routeSolveRequests.ts +3 -3
  134. package/packages/scrabble-solver/src/state/localStorage.ts +6 -6
  135. package/packages/scrabble-solver/src/state/sagas.ts +18 -7
  136. package/packages/scrabble-solver/src/state/selectors.ts +10 -10
  137. package/packages/scrabble-solver/src/state/slices/boardInitialState.ts +3 -3
  138. package/packages/scrabble-solver/src/state/slices/boardSlice.ts +20 -6
  139. package/packages/scrabble-solver/src/state/slices/settingsInitialState.ts +3 -4
  140. package/packages/scrabble-solver/src/state/slices/settingsSlice.ts +5 -5
  141. package/packages/scrabble-solver/src/styles/variables.scss +0 -9
  142. package/packages/solver/README.md +1 -1
  143. package/packages/solver/build/areDigraphsValid.d.ts +3 -0
  144. package/packages/solver/build/areDigraphsValid.js +16 -0
  145. package/packages/solver/build/getPatternHash.js +2 -2
  146. package/packages/solver/build/index.d.ts +1 -0
  147. package/packages/solver/build/index.js +3 -1
  148. package/packages/solver/build/solve.js +5 -1
  149. package/packages/solver/package-lock.json +3 -10
  150. package/packages/solver/package.json +6 -6
  151. package/packages/solver/src/areDigraphsValid.ts +20 -0
  152. package/packages/solver/src/fillPattern.test.ts +3 -3
  153. package/packages/solver/src/generatePatterns.test.ts +13 -0
  154. package/packages/solver/src/getPatternHash.ts +2 -2
  155. package/packages/solver/src/getPatternScore.test.ts +13 -3
  156. package/packages/solver/src/index.ts +1 -0
  157. package/packages/solver/src/solve.test.ts +93 -7
  158. package/packages/solver/src/solve.ts +6 -1
  159. package/packages/types/build/Config.d.ts +2 -0
  160. package/packages/types/build/Config.js +3 -0
  161. package/packages/types/build/ConfigJson.d.ts +2 -1
  162. package/packages/types/build/Dictionary.d.ts +7 -0
  163. package/packages/types/build/Dictionary.js +2 -0
  164. package/packages/types/build/Game.d.ts +7 -0
  165. package/packages/types/build/Game.js +13 -0
  166. package/packages/types/build/Locale.d.ts +5 -0
  167. package/packages/types/build/Locale.js +5 -1
  168. package/packages/types/build/index.d.ts +4 -2
  169. package/packages/types/build/index.js +8 -5
  170. package/packages/types/package.json +3 -3
  171. package/packages/types/src/Config.ts +5 -0
  172. package/packages/types/src/ConfigJson.ts +2 -1
  173. package/packages/types/src/Dictionary.ts +9 -0
  174. package/packages/types/src/Game.ts +11 -0
  175. package/packages/types/src/Locale.ts +5 -1
  176. package/packages/types/src/index.ts +4 -2
  177. package/packages/word-definitions/build/lib/normalizeDefinition.js +3 -1
  178. package/packages/word-definitions/package-lock.json +9 -159
  179. package/packages/word-definitions/package.json +3 -3
  180. package/packages/word-definitions/src/lib/normalizeDefinition.ts +3 -1
  181. package/packages/word-lists/package-lock.json +9 -401
  182. package/packages/word-lists/package.json +3 -3
  183. package/packages/configs/build/getLocaleConfig.d.ts +0 -3
  184. package/packages/configs/build/getLocaleConfig.js +0 -10
  185. package/packages/configs/build/isConfigId.d.ts +0 -2
  186. package/packages/configs/build/isConfigId.js +0 -12
  187. package/packages/configs/build/literaki/bonuses.d.ts +0 -14
  188. package/packages/configs/build/literaki/bonuses.js +0 -99
  189. package/packages/configs/build/literaki/index.d.ts +0 -1
  190. package/packages/configs/build/literaki/index.js +0 -8
  191. package/packages/configs/build/literaki/literaki.d.ts +0 -13
  192. package/packages/configs/build/literaki/literaki.js +0 -31
  193. package/packages/configs/build/literaki/tiles/index.d.ts +0 -6
  194. package/packages/configs/build/literaki/tiles/index.js +0 -18
  195. package/packages/configs/build/literaki/tiles/tilesDe.d.ts +0 -6
  196. package/packages/configs/build/literaki/tiles/tilesDe.js +0 -34
  197. package/packages/configs/build/literaki/tiles/tilesEn.d.ts +0 -6
  198. package/packages/configs/build/literaki/tiles/tilesEn.js +0 -31
  199. package/packages/configs/build/literaki/tiles/tilesEs.d.ts +0 -6
  200. package/packages/configs/build/literaki/tiles/tilesEs.js +0 -33
  201. package/packages/configs/build/literaki/tiles/tilesFa.d.ts +0 -6
  202. package/packages/configs/build/literaki/tiles/tilesFa.js +0 -37
  203. package/packages/configs/build/literaki/tiles/tilesFr.d.ts +0 -6
  204. package/packages/configs/build/literaki/tiles/tilesFr.js +0 -31
  205. package/packages/configs/build/literaki/tiles/tilesPl.d.ts +0 -6
  206. package/packages/configs/build/literaki/tiles/tilesPl.js +0 -37
  207. package/packages/configs/build/scrabble/bonuses.d.ts +0 -7
  208. package/packages/configs/build/scrabble/bonuses.js +0 -67
  209. package/packages/configs/build/scrabble/index.d.ts +0 -1
  210. package/packages/configs/build/scrabble/index.js +0 -8
  211. package/packages/configs/build/scrabble/scrabble.d.ts +0 -13
  212. package/packages/configs/build/scrabble/scrabble.js +0 -31
  213. package/packages/configs/build/scrabble/tiles/index.d.ts +0 -6
  214. package/packages/configs/build/scrabble/tiles/index.js +0 -18
  215. package/packages/configs/build/scrabble/tiles/tilesDe.d.ts +0 -6
  216. package/packages/configs/build/scrabble/tiles/tilesDe.js +0 -34
  217. package/packages/configs/build/scrabble/tiles/tilesEn.d.ts +0 -6
  218. package/packages/configs/build/scrabble/tiles/tilesEn.js +0 -31
  219. package/packages/configs/build/scrabble/tiles/tilesEs.d.ts +0 -6
  220. package/packages/configs/build/scrabble/tiles/tilesEs.js +0 -33
  221. package/packages/configs/build/scrabble/tiles/tilesFa.d.ts +0 -6
  222. package/packages/configs/build/scrabble/tiles/tilesFa.js +0 -37
  223. package/packages/configs/build/scrabble/tiles/tilesFr.d.ts +0 -6
  224. package/packages/configs/build/scrabble/tiles/tilesFr.js +0 -31
  225. package/packages/configs/build/scrabble/tiles/tilesPl.d.ts +0 -6
  226. package/packages/configs/build/scrabble/tiles/tilesPl.js +0 -37
  227. package/packages/configs/src/getLocaleConfig.ts +0 -9
  228. package/packages/configs/src/isConfigId.ts +0 -10
  229. package/packages/configs/src/literaki/bonuses.ts +0 -99
  230. package/packages/configs/src/literaki/index.ts +0 -1
  231. package/packages/configs/src/literaki/literaki.ts +0 -30
  232. package/packages/configs/src/literaki/tiles/index.ts +0 -6
  233. package/packages/configs/src/literaki/tiles/tilesDe.ts +0 -33
  234. package/packages/configs/src/literaki/tiles/tilesEn.ts +0 -30
  235. package/packages/configs/src/literaki/tiles/tilesEs.ts +0 -32
  236. package/packages/configs/src/literaki/tiles/tilesFa.ts +0 -36
  237. package/packages/configs/src/literaki/tiles/tilesFr.ts +0 -30
  238. package/packages/configs/src/literaki/tiles/tilesPl.ts +0 -36
  239. package/packages/configs/src/scrabble/bonuses.ts +0 -67
  240. package/packages/configs/src/scrabble/index.ts +0 -1
  241. package/packages/configs/src/scrabble/scrabble.ts +0 -30
  242. package/packages/configs/src/scrabble/tiles/index.ts +0 -6
  243. package/packages/configs/src/scrabble/tiles/tilesDe.ts +0 -33
  244. package/packages/configs/src/scrabble/tiles/tilesEn.ts +0 -30
  245. package/packages/configs/src/scrabble/tiles/tilesEs.ts +0 -32
  246. package/packages/configs/src/scrabble/tiles/tilesFa.ts +0 -36
  247. package/packages/configs/src/scrabble/tiles/tilesFr.ts +0 -30
  248. package/packages/configs/src/scrabble/tiles/tilesPl.ts +0 -36
  249. package/packages/scrabble-solver/.next/static/chunks/main-0ecb9ccfcb6c9b24.js +0 -1
  250. package/packages/scrabble-solver/.next/static/chunks/pages/_app-bea4539a6b8042de.js +0 -32
  251. package/packages/scrabble-solver/.next/static/chunks/pages/index-4e8566409753e1c3.js +0 -1
  252. package/packages/scrabble-solver/.next/static/css/58053f9594647860.css +0 -2
  253. package/packages/scrabble-solver/.next/static/css/60e8258da7362a1a.css +0 -1
  254. package/packages/scrabble-solver/src/i18n/i18n.module.scss +0 -27
  255. package/packages/scrabble-solver/src/modals/SettingsModal/components/ConfigSetting/options.ts +0 -19
  256. package/packages/scrabble-solver/src/modals/SettingsModal/components/ConfigSetting/types.ts +0 -9
  257. package/packages/scrabble-solver/src/modals/SettingsModal/components/InputModeSetting/types.ts +0 -7
  258. package/packages/scrabble-solver/src/modals/SettingsModal/components/LocaleSetting/types.ts +0 -9
  259. /package/packages/scrabble-solver/.next/static/{_yG9K-PD5kWT_p4sMdCSV → wNIKOJJzkMSJYb2nOL21o}/_ssgManifest.js +0 -0
@@ -1,5 +1,4 @@
1
- import { literaki, scrabble } from '@scrabble-solver/configs';
2
- import { Locale } from '@scrabble-solver/types';
1
+ import { Game, Locale } from '@scrabble-solver/types';
3
2
 
4
3
  import { guessLocale } from 'lib';
5
4
  import { AutoGroupTiles, InputMode } from 'types';
@@ -8,7 +7,7 @@ import localStorage from '../localStorage';
8
7
 
9
8
  export interface SettingsState {
10
9
  autoGroupTiles: AutoGroupTiles;
11
- configId: typeof literaki.id | typeof scrabble.id;
10
+ game: Game;
12
11
  inputMode: InputMode;
13
12
  locale: Locale;
14
13
  }
@@ -18,7 +17,7 @@ const isTouchScreen = typeof globalThis.matchMedia !== 'undefined' && globalThis
18
17
 
19
18
  const settingsInitialState: SettingsState = {
20
19
  autoGroupTiles: typeof localStorageAutoGroupTiles === 'undefined' ? 'left' : localStorageAutoGroupTiles,
21
- configId: localStorage.getConfigId() || scrabble.id,
20
+ game: localStorage.getGame() || Game.Scrabble,
22
21
  inputMode: localStorage.getInputMode() || (isTouchScreen ? 'touchscreen' : 'keyboard'),
23
22
  locale: localStorage.getLocale() || guessLocale(),
24
23
  };
@@ -1,5 +1,5 @@
1
1
  import { createSlice, PayloadAction } from '@reduxjs/toolkit';
2
- import { Locale } from '@scrabble-solver/types';
2
+ import { Game, Locale } from '@scrabble-solver/types';
3
3
 
4
4
  import { AutoGroupTiles, InputMode } from 'types';
5
5
 
@@ -14,9 +14,9 @@ const settingsSlice = createSlice({
14
14
  return { ...state, autoGroupTiles };
15
15
  },
16
16
 
17
- changeConfigId: (state, action: PayloadAction<string>) => {
18
- const configId = action.payload;
19
- return { ...state, configId };
17
+ changeGame: (state, action: PayloadAction<Game>) => {
18
+ const game = action.payload;
19
+ return { ...state, game };
20
20
  },
21
21
 
22
22
  changeInputMode: (state, action: PayloadAction<InputMode>) => {
@@ -29,7 +29,7 @@ const settingsSlice = createSlice({
29
29
  return { ...state, locale };
30
30
  },
31
31
 
32
- init: (state, action: PayloadAction<Partial<Pick<typeof settingsInitialState, 'configId' | 'locale'>>>) => {
32
+ init: (state, action: PayloadAction<Partial<Pick<typeof settingsInitialState, 'game' | 'locale'>>>) => {
33
33
  return { ...state, ...action.payload };
34
34
  },
35
35
  },
@@ -97,20 +97,11 @@ $easeOutSine: cubic-bezier(0.61, 1, 0.88, 1);
97
97
  --z-index--close-button: 101;
98
98
  --z-index--tooltip: 102;
99
99
 
100
- --flag--de--aspect-ratio: 20 / 12;
101
- --flag--es--aspect-ratio: 750 / 500;
102
- --flag--fa--aspect-ratio: 630 / 360;
103
- --flag--fr--aspect-ratio: 24 / 15;
104
- --flag--gb--aspect-ratio: 60 / 30;
105
- --flag--pl--aspect-ratio: 16 / 10;
106
- --flag--us--aspect-ratio: 7410 / 3900;
107
-
108
100
  --button--icon--size: 24px;
109
101
  --dictionary--height: 260px;
110
102
  --dictionary--height--mobile: 110px;
111
103
  --key--height: 36px;
112
104
  --key--icon--size: 16px;
113
- --logo--aspect-ratio: 682 / 166;
114
105
  --logo--height: 60px;
115
106
  --modal--width: 370px;
116
107
  --nav--height: calc(var(--logo--height) + var(--nav--padding));
@@ -2,4 +2,4 @@
2
2
 
3
3
  ![Coverage](https://img.shields.io/badge/coverage-100%25-brightgreen.svg)
4
4
 
5
- The brains of the Scrabble-Solver.
5
+ The brains of Scrabble Solver.
@@ -0,0 +1,3 @@
1
+ import { Config, Pattern } from '@scrabble-solver/types';
2
+ declare const areDigraphsValid: (config: Config, pattern: Pattern) => boolean;
3
+ export default areDigraphsValid;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const areDigraphsValid = (config, pattern) => {
4
+ const { twoCharacterTiles } = config;
5
+ const { cells } = pattern;
6
+ for (let index = 0; index < cells.length - 1; ++index) {
7
+ const current = cells[index];
8
+ const next = cells[index + 1];
9
+ const digraphCandidate = current.tile.character + next.tile.character;
10
+ if (twoCharacterTiles.includes(digraphCandidate)) {
11
+ return false;
12
+ }
13
+ }
14
+ return true;
15
+ };
16
+ exports.default = areDigraphsValid;
@@ -2,11 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const getPatternHash = (pattern) => {
4
4
  return pattern.cells
5
+ .filter((cell) => cell.isEmpty)
5
6
  .map((cell) => {
6
7
  const blank = cell.tile.isBlank ? '!' : '';
7
8
  const tile = cell.tile.character + blank;
8
- // eslint-disable-next-line prefer-template
9
- return cell.x + ',' + cell.y + ',' + tile;
9
+ return [cell.x, cell.y, tile].join(',');
10
10
  })
11
11
  .join('-');
12
12
  };
@@ -1,3 +1,4 @@
1
+ export { default as areDigraphsValid } from './areDigraphsValid';
1
2
  export { default as fillPattern } from './fillPattern';
2
3
  export { default as generateEndIndices } from './generateEndIndices';
3
4
  export { default as generateHorizontalPatterns } from './generateHorizontalPatterns';
@@ -3,7 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.solve = exports.getUniquePatterns = exports.getPatternScore = exports.getPatternHash = exports.getCellsScore = exports.generateVerticalPatterns = exports.generateVectors = exports.generateStartIndices = exports.generatePatterns = exports.generatePattern = exports.generateHorizontalPatterns = exports.generateEndIndices = exports.fillPattern = void 0;
6
+ exports.solve = exports.getUniquePatterns = exports.getPatternScore = exports.getPatternHash = exports.getCellsScore = exports.generateVerticalPatterns = exports.generateVectors = exports.generateStartIndices = exports.generatePatterns = exports.generatePattern = exports.generateHorizontalPatterns = exports.generateEndIndices = exports.fillPattern = exports.areDigraphsValid = void 0;
7
+ var areDigraphsValid_1 = require("./areDigraphsValid");
8
+ Object.defineProperty(exports, "areDigraphsValid", { enumerable: true, get: function () { return __importDefault(areDigraphsValid_1).default; } });
7
9
  var fillPattern_1 = require("./fillPattern");
8
10
  Object.defineProperty(exports, "fillPattern", { enumerable: true, get: function () { return __importDefault(fillPattern_1).default; } });
9
11
  var generateEndIndices_1 = require("./generateEndIndices");
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ const areDigraphsValid_1 = __importDefault(require("./areDigraphsValid"));
6
7
  const fillPattern_1 = __importDefault(require("./fillPattern"));
7
8
  const generatePatterns_1 = __importDefault(require("./generatePatterns"));
8
9
  const getPatternScore_1 = __importDefault(require("./getPatternScore"));
@@ -10,7 +11,10 @@ const getUniquePatterns_1 = __importDefault(require("./getUniquePatterns"));
10
11
  const solve = (trie, config, board, tiles) => {
11
12
  const patterns = (0, generatePatterns_1.default)(config, board);
12
13
  const filledPatterns = patterns.flatMap((pattern) => (0, fillPattern_1.default)(trie, config, pattern, tiles));
13
- const uniquePatterns = (0, getUniquePatterns_1.default)(filledPatterns);
14
+ const validPatterns = config.twoCharacterTiles.length > 0
15
+ ? filledPatterns.filter((pattern) => (0, areDigraphsValid_1.default)(config, pattern))
16
+ : filledPatterns;
17
+ const uniquePatterns = (0, getUniquePatterns_1.default)(validPatterns);
14
18
  const results = uniquePatterns.map((pattern, index) => ({
15
19
  cells: pattern.cells.map((cell) => cell.toJson()),
16
20
  collisions: pattern.getCollisions().map((collision) => collision.cells.map((cell) => cell.toJson())),
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@scrabble-solver/solver",
3
- "version": "2.12.1",
4
- "lockfileVersion": 2,
3
+ "version": "2.12.3",
4
+ "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@scrabble-solver/solver",
9
- "version": "2.12.1",
9
+ "version": "2.12.3",
10
10
  "license": "CC-BY-NC-ND-4.0",
11
11
  "dependencies": {
12
12
  "@kamilmielnik/trie": "^2.0.1"
@@ -20,12 +20,5 @@
20
20
  "node": ">=16"
21
21
  }
22
22
  }
23
- },
24
- "dependencies": {
25
- "@kamilmielnik/trie": {
26
- "version": "2.0.1",
27
- "resolved": "https://registry.npmjs.org/@kamilmielnik/trie/-/trie-2.0.1.tgz",
28
- "integrity": "sha512-6Ulw5/xgFRadHsx0uVnpOxB2E2ZO2osnaakI26yS3RMlww580JiaQEfXUmQjXZcmOjcO+HrZ0CWjRDhoDYKHbg=="
29
- }
30
23
  }
31
24
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/solver",
3
- "version": "2.12.1",
3
+ "version": "2.12.3",
4
4
  "description": "Scrabble Solver 2 - Solver",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -17,7 +17,7 @@
17
17
  "bugs": {
18
18
  "url": "https://github.com/kamilmielnik/scrabble-solver/issues"
19
19
  },
20
- "homepage": "https://github.com/kamilmielnik/scrabble-solver#readme",
20
+ "homepage": "https://scrabble-solver.org",
21
21
  "scripts": {
22
22
  "build": "tsc --project .",
23
23
  "clean": "rimraf build/ node_modules/",
@@ -25,12 +25,12 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@kamilmielnik/trie": "^2.0.1",
28
- "@scrabble-solver/types": "^2.12.1"
28
+ "@scrabble-solver/types": "^2.12.3"
29
29
  },
30
30
  "devDependencies": {
31
- "@scrabble-solver/configs": "^2.12.1",
32
- "@scrabble-solver/constants": "^2.12.1",
33
- "@scrabble-solver/dictionaries": "^2.12.1"
31
+ "@scrabble-solver/configs": "^2.12.3",
32
+ "@scrabble-solver/constants": "^2.12.3",
33
+ "@scrabble-solver/dictionaries": "^2.12.3"
34
34
  },
35
35
  "gitHead": "1e2d1ad49a288d4a44196d8e3336740da132c637"
36
36
  }
@@ -0,0 +1,20 @@
1
+ import { Config, Pattern } from '@scrabble-solver/types';
2
+
3
+ const areDigraphsValid = (config: Config, pattern: Pattern): boolean => {
4
+ const { twoCharacterTiles } = config;
5
+ const { cells } = pattern;
6
+
7
+ for (let index = 0; index < cells.length - 1; ++index) {
8
+ const current = cells[index];
9
+ const next = cells[index + 1];
10
+ const digraphCandidate = current.tile.character + next.tile.character;
11
+
12
+ if (twoCharacterTiles.includes(digraphCandidate)) {
13
+ return false;
14
+ }
15
+ }
16
+
17
+ return true;
18
+ };
19
+
20
+ export default areDigraphsValid;
@@ -1,13 +1,13 @@
1
1
  import { Trie } from '@kamilmielnik/trie';
2
- import { literaki } from '@scrabble-solver/configs';
2
+ import { getConfig } from '@scrabble-solver/configs';
3
3
  import { dictionaries } from '@scrabble-solver/dictionaries';
4
- import { Board, Cell, FinalPattern, Locale, Pattern, Tile, VerticalPattern } from '@scrabble-solver/types';
4
+ import { Board, Cell, FinalPattern, Game, Locale, Pattern, Tile, VerticalPattern } from '@scrabble-solver/types';
5
5
 
6
6
  import fillPattern, { fillPatternRecursive } from './fillPattern';
7
7
 
8
8
  const board = Board.fromStringArray([' t ', 'do ', ' ']);
9
9
  const locale = Locale.PL_PL;
10
- const config = literaki[locale];
10
+ const config = getConfig(Game.Literaki, locale);
11
11
 
12
12
  describe('fillPattern', () => {
13
13
  let trie: Trie | undefined;
@@ -0,0 +1,13 @@
1
+ import { getConfig } from '@scrabble-solver/configs';
2
+ import { Board, Game, Locale } from '@scrabble-solver/types';
3
+
4
+ import generatePatterns from './generatePatterns';
5
+
6
+ describe('generatePatterns', () => {
7
+ it('Generates all patterns for an empty board', () => {
8
+ const config = getConfig(Game.Scrabble, Locale.EN_US);
9
+ const board = Board.create(config.boardWidth, config.boardHeight);
10
+
11
+ expect(generatePatterns(config, board).length).toEqual(54);
12
+ });
13
+ });
@@ -2,11 +2,11 @@ import { Pattern } from '@scrabble-solver/types';
2
2
 
3
3
  const getPatternHash = (pattern: Pattern): string => {
4
4
  return pattern.cells
5
+ .filter((cell) => cell.isEmpty)
5
6
  .map((cell) => {
6
7
  const blank = cell.tile.isBlank ? '!' : '';
7
8
  const tile = cell.tile.character + blank;
8
- // eslint-disable-next-line prefer-template
9
- return cell.x + ',' + cell.y + ',' + tile;
9
+ return [cell.x, cell.y, tile].join(',');
10
10
  })
11
11
  .join('-');
12
12
  };
@@ -1,9 +1,10 @@
1
- import { literaki } from '@scrabble-solver/configs';
2
- import { Board, Cell, HorizontalPattern, Locale, Pattern, Tile, VerticalPattern } from '@scrabble-solver/types';
1
+ import { getConfig } from '@scrabble-solver/configs';
2
+ import { Board, Cell, Game, HorizontalPattern, Locale, Pattern, Tile, VerticalPattern } from '@scrabble-solver/types';
3
3
 
4
4
  import getPatternScore from './getPatternScore';
5
5
 
6
- const config = literaki[Locale.PL_PL];
6
+ const locale = Locale.PL_PL;
7
+ const config = getConfig(Game.Literaki, locale);
7
8
  const board = Board.fromStringArray([
8
9
  ' kasom ',
9
10
  ' i ',
@@ -57,4 +58,13 @@ describe('getPatternScore', () => {
57
58
 
58
59
  expect(getPatternScore(config, pattern)).toBe(2);
59
60
  });
61
+
62
+ it('gives 0 score for unknown characters', () => {
63
+ const pattern = new HorizontalPattern(board, [
64
+ new Cell({ x: 13, y: 14, tile: new Tile({ character: '?', isBlank: false }), isEmpty: true }),
65
+ new Cell({ x: 12, y: 14, tile: new Tile({ character: 't' }), isEmpty: false }),
66
+ ]);
67
+
68
+ expect(getPatternScore(config, pattern)).toBe(2);
69
+ });
60
70
  });
@@ -1,3 +1,4 @@
1
+ export { default as areDigraphsValid } from './areDigraphsValid';
1
2
  export { default as fillPattern } from './fillPattern';
2
3
  export { default as generateEndIndices } from './generateEndIndices';
3
4
  export { default as generateHorizontalPatterns } from './generateHorizontalPatterns';
@@ -1,7 +1,9 @@
1
+ /* eslint-disable max-lines */
2
+
1
3
  import { Trie } from '@kamilmielnik/trie';
2
- import { literaki, scrabble } from '@scrabble-solver/configs';
4
+ import { getConfig } from '@scrabble-solver/configs';
3
5
  import { dictionaries } from '@scrabble-solver/dictionaries';
4
- import { Board, Locale, Result, Tile } from '@scrabble-solver/types';
6
+ import { Board, Game, Locale, Result, Tile } from '@scrabble-solver/types';
5
7
 
6
8
  import solve from './solve';
7
9
 
@@ -16,9 +18,9 @@ const getBestResult = ([firstResult, ...results]: Result[]): Result => {
16
18
  );
17
19
  };
18
20
 
19
- describe('solve - PL', () => {
21
+ describe('solve - pl-PL', () => {
20
22
  const locale = Locale.PL_PL;
21
- const config = literaki[locale];
23
+ const config = getConfig(Game.Literaki, locale);
22
24
  let trie: Trie | undefined;
23
25
 
24
26
  beforeAll(() => {
@@ -47,7 +49,7 @@ describe('solve - PL', () => {
47
49
  ]);
48
50
  const tiles = generateTiles(['l', 'i', 'n', 'o']);
49
51
  const results = solve(trie!, config, board, tiles);
50
- expect(results.length).toBe(61);
52
+ expect(results.length).toBe(60);
51
53
  });
52
54
 
53
55
  it('zmartwychwstałą x9', () => {
@@ -99,11 +101,34 @@ describe('solve - PL', () => {
99
101
  expect(bestResult.word).toBe('zmartwychwstałą');
100
102
  expect(bestResult.points).toBe(1157);
101
103
  });
104
+
105
+ it('does not duplicate results', () => {
106
+ const board = Board.fromStringArray([
107
+ ' a ',
108
+ ' a',
109
+ ' ',
110
+ ' ',
111
+ ' ',
112
+ ' ',
113
+ ' ',
114
+ ' ',
115
+ ' ',
116
+ ' ',
117
+ ' ',
118
+ ' ',
119
+ ' ',
120
+ ' ',
121
+ ' ',
122
+ ]);
123
+ const tiles = generateTiles(['d']);
124
+ const results = solve(trie!, config, board, tiles);
125
+ expect(results.length).toBe(4);
126
+ });
102
127
  });
103
128
 
104
- describe('solve - ES', () => {
129
+ describe('solve - es-ES', () => {
105
130
  const locale = Locale.ES_ES;
106
- const config = scrabble[locale];
131
+ const config = getConfig(Game.Scrabble, locale);
107
132
  let trie: Trie | undefined;
108
133
 
109
134
  beforeAll(() => {
@@ -136,4 +161,65 @@ describe('solve - ES', () => {
136
161
  expect(results.length).toBe(24);
137
162
  expect(bestResult.points).toBe(22);
138
163
  });
164
+
165
+ it('chooho - does not use C + H to imitate CH', () => {
166
+ const board = Board.fromStringArray([
167
+ ' ',
168
+ ' ',
169
+ ' ',
170
+ ' ',
171
+ ' ',
172
+ ' ',
173
+ ' ',
174
+ ' ',
175
+ ' ',
176
+ ' ',
177
+ ' ',
178
+ ' ',
179
+ ' ',
180
+ ' ',
181
+ ' ',
182
+ ]);
183
+ const tiles = generateTiles(['ch', 'o', 'o', 'c', 'h']);
184
+ const results = solve(trie!, config, board, tiles);
185
+ const words = results.map((result) => result.cells.map((cell) => cell.tile?.character).join(''));
186
+ expect(words).not.toContain('chocho');
187
+ });
188
+ });
189
+
190
+ describe('solve - en-GB', () => {
191
+ const locale = Locale.EN_GB;
192
+ const config = getConfig(Game.Scrabble, locale);
193
+ let trie: Trie | undefined;
194
+
195
+ beforeAll(() => {
196
+ return dictionaries.get(locale).then((loadedTrie) => {
197
+ trie = loadedTrie;
198
+ });
199
+ });
200
+
201
+ it('no', () => {
202
+ const board = Board.fromStringArray([
203
+ ' ',
204
+ ' ko',
205
+ ' ',
206
+ ' ',
207
+ ' ',
208
+ ' ',
209
+ ' ',
210
+ ' ',
211
+ ' ',
212
+ ' ',
213
+ ' ',
214
+ ' ',
215
+ ' ',
216
+ ' ',
217
+ ' ',
218
+ ]);
219
+ const tiles = generateTiles(['n']);
220
+ const results = solve(trie!, config, board, tiles).map(Result.fromJson);
221
+ expect(results.some((result) => result.word === 'no')).toBe(true);
222
+ expect(results.some((result) => result.word === 'on')).toBe(true);
223
+ expect(results.length).toBe(2);
224
+ });
139
225
  });
@@ -1,6 +1,7 @@
1
1
  import { Trie } from '@kamilmielnik/trie';
2
2
  import { Board, Config, ResultJson, Tile } from '@scrabble-solver/types';
3
3
 
4
+ import areDigraphsValid from './areDigraphsValid';
4
5
  import fillPattern from './fillPattern';
5
6
  import generatePatterns from './generatePatterns';
6
7
  import getPatternScore from './getPatternScore';
@@ -9,7 +10,11 @@ import getUniquePatterns from './getUniquePatterns';
9
10
  const solve = (trie: Trie, config: Config, board: Board, tiles: Tile[]): ResultJson[] => {
10
11
  const patterns = generatePatterns(config, board);
11
12
  const filledPatterns = patterns.flatMap((pattern) => fillPattern(trie, config, pattern, tiles));
12
- const uniquePatterns = getUniquePatterns(filledPatterns);
13
+ const validPatterns =
14
+ config.twoCharacterTiles.length > 0
15
+ ? filledPatterns.filter((pattern) => areDigraphsValid(config, pattern))
16
+ : filledPatterns;
17
+ const uniquePatterns = getUniquePatterns(validPatterns);
13
18
  const results = uniquePatterns.map((pattern, index) => ({
14
19
  cells: pattern.cells.map((cell) => cell.toJson()),
15
20
  collisions: pattern.getCollisions().map((collision) => collision.cells.map((cell) => cell.toJson())),
@@ -2,6 +2,7 @@ import Bonus from './Bonus';
2
2
  import BonusValue from './BonusValue';
3
3
  import Cell from './Cell';
4
4
  import ConfigJson from './ConfigJson';
5
+ import Game from './Game';
5
6
  import Locale from './Locale';
6
7
  import Tile from './Tile';
7
8
  import TileConfig from './TileConfig';
@@ -17,6 +18,7 @@ declare class Config {
17
18
  get blanksCount(): number;
18
19
  get boardHeight(): number;
19
20
  get boardWidth(): number;
21
+ get game(): Game;
20
22
  get locale(): Locale;
21
23
  get twoCharacterTiles(): string[];
22
24
  getCellBonus(cell: Cell): Bonus | undefined;
@@ -33,6 +33,9 @@ class Config {
33
33
  get boardWidth() {
34
34
  return this.config.boardWidth;
35
35
  }
36
+ get game() {
37
+ return this.config.game;
38
+ }
36
39
  get locale() {
37
40
  return this.config.locale;
38
41
  }
@@ -1,4 +1,5 @@
1
1
  import BonusJson from './BonusJson';
2
+ import Game from './Game';
2
3
  import Locale from './Locale';
3
4
  import TileConfig from './TileConfig';
4
5
  interface ConfigJson {
@@ -8,7 +9,7 @@ interface ConfigJson {
8
9
  boardHeight: number;
9
10
  boardWidth: number;
10
11
  bonuses: BonusJson[];
11
- id: string;
12
+ game: Game;
12
13
  locale: Locale;
13
14
  maximumCharactersCount: number;
14
15
  name: string;
@@ -0,0 +1,7 @@
1
+ import Locale from './Locale';
2
+ interface Dictionary {
3
+ description: string;
4
+ locale: Locale;
5
+ name: string;
6
+ }
7
+ export default Dictionary;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
1
+ declare enum Game {
2
+ Literaki = "literaki",
3
+ Scrabble = "scrabble",
4
+ SuperScrabble = "super-scrabble"
5
+ }
6
+ export declare const isGame: (locale: unknown) => locale is Game;
7
+ export default Game;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isGame = void 0;
4
+ var Game;
5
+ (function (Game) {
6
+ Game["Literaki"] = "literaki";
7
+ Game["Scrabble"] = "scrabble";
8
+ Game["SuperScrabble"] = "super-scrabble";
9
+ })(Game || (Game = {}));
10
+ const games = Object.values(Game);
11
+ const isGame = (locale) => games.includes(locale);
12
+ exports.isGame = isGame;
13
+ exports.default = Game;
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Locales are defined using IETF language tags
3
+ * @see https://en.wikipedia.org/wiki/IETF_language_tag
4
+ * @see https://en.wikipedia.org/wiki/ISO_3166-1
5
+ */
1
6
  declare enum Locale {
2
7
  DE_DE = "de-DE",
3
8
  EN_GB = "en-GB",
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isLocale = void 0;
4
- // eslint-disable-next-line no-shadow
4
+ /**
5
+ * Locales are defined using IETF language tags
6
+ * @see https://en.wikipedia.org/wiki/IETF_language_tag
7
+ * @see https://en.wikipedia.org/wiki/ISO_3166-1
8
+ */
5
9
  var Locale;
6
10
  (function (Locale) {
7
11
  Locale["DE_DE"] = "de-DE";
@@ -10,10 +10,10 @@ export { default as Collision } from './Collision';
10
10
  export { default as CollisionJson } from './CollisionJson';
11
11
  export { default as Config } from './Config';
12
12
  export { default as ConfigJson } from './ConfigJson';
13
+ export { default as Dictionary } from './Dictionary';
13
14
  export { default as FinalPattern } from './FinalPattern';
15
+ export { default as Game, isGame } from './Game';
14
16
  export { default as HorizontalPattern } from './HorizontalPattern';
15
- export { default as isError } from './isError';
16
- export { default as isObject } from './isObject';
17
17
  export { default as Locale, isLocale } from './Locale';
18
18
  export { default as Pattern } from './Pattern';
19
19
  export { default as PatternJson } from './PatternJson';
@@ -26,3 +26,5 @@ export { default as VerticalPattern } from './VerticalPattern';
26
26
  export { default as WordBonus } from './WordBonus';
27
27
  export { default as WordDefinition } from './WordDefinition';
28
28
  export { default as WordDefinitionJson } from './WordDefinitionJson';
29
+ export { default as isError } from './isError';
30
+ export { default as isObject } from './isObject';
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.WordDefinition = exports.WordBonus = exports.VerticalPattern = exports.isTileJson = exports.Tile = exports.Result = exports.Pattern = exports.isLocale = exports.Locale = exports.isObject = exports.isError = exports.HorizontalPattern = exports.FinalPattern = exports.Config = exports.CharacterBonus = exports.isCellJson = exports.Cell = exports.Bonus = exports.isBoardJson = exports.Board = void 0;
6
+ exports.isObject = exports.isError = exports.WordDefinition = exports.WordBonus = exports.VerticalPattern = exports.isTileJson = exports.Tile = exports.Result = exports.Pattern = exports.isLocale = exports.Locale = exports.HorizontalPattern = exports.isGame = exports.Game = exports.FinalPattern = exports.Config = exports.CharacterBonus = exports.isCellJson = exports.Cell = exports.Bonus = exports.isBoardJson = exports.Board = void 0;
7
7
  var Board_1 = require("./Board");
8
8
  Object.defineProperty(exports, "Board", { enumerable: true, get: function () { return __importDefault(Board_1).default; } });
9
9
  var BoardJson_1 = require("./BoardJson");
@@ -20,12 +20,11 @@ var Config_1 = require("./Config");
20
20
  Object.defineProperty(exports, "Config", { enumerable: true, get: function () { return __importDefault(Config_1).default; } });
21
21
  var FinalPattern_1 = require("./FinalPattern");
22
22
  Object.defineProperty(exports, "FinalPattern", { enumerable: true, get: function () { return __importDefault(FinalPattern_1).default; } });
23
+ var Game_1 = require("./Game");
24
+ Object.defineProperty(exports, "Game", { enumerable: true, get: function () { return __importDefault(Game_1).default; } });
25
+ Object.defineProperty(exports, "isGame", { enumerable: true, get: function () { return Game_1.isGame; } });
23
26
  var HorizontalPattern_1 = require("./HorizontalPattern");
24
27
  Object.defineProperty(exports, "HorizontalPattern", { enumerable: true, get: function () { return __importDefault(HorizontalPattern_1).default; } });
25
- var isError_1 = require("./isError");
26
- Object.defineProperty(exports, "isError", { enumerable: true, get: function () { return __importDefault(isError_1).default; } });
27
- var isObject_1 = require("./isObject");
28
- Object.defineProperty(exports, "isObject", { enumerable: true, get: function () { return __importDefault(isObject_1).default; } });
29
28
  var Locale_1 = require("./Locale");
30
29
  Object.defineProperty(exports, "Locale", { enumerable: true, get: function () { return __importDefault(Locale_1).default; } });
31
30
  Object.defineProperty(exports, "isLocale", { enumerable: true, get: function () { return Locale_1.isLocale; } });
@@ -43,3 +42,7 @@ var WordBonus_1 = require("./WordBonus");
43
42
  Object.defineProperty(exports, "WordBonus", { enumerable: true, get: function () { return __importDefault(WordBonus_1).default; } });
44
43
  var WordDefinition_1 = require("./WordDefinition");
45
44
  Object.defineProperty(exports, "WordDefinition", { enumerable: true, get: function () { return __importDefault(WordDefinition_1).default; } });
45
+ var isError_1 = require("./isError");
46
+ Object.defineProperty(exports, "isError", { enumerable: true, get: function () { return __importDefault(isError_1).default; } });
47
+ var isObject_1 = require("./isObject");
48
+ Object.defineProperty(exports, "isObject", { enumerable: true, get: function () { return __importDefault(isObject_1).default; } });