scrabble-solver 2.12.2 → 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 (240) hide show
  1. package/README.md +31 -4
  2. package/lerna.json +1 -1
  3. package/package.json +3 -2
  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 +3 -3
  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 +1 -1
  51. package/packages/dictionaries/package-lock.json +3 -10
  52. package/packages/dictionaries/package.json +4 -4
  53. package/packages/logger/package-lock.json +3 -224
  54. package/packages/logger/package.json +1 -1
  55. package/packages/scrabble-solver/.next/BUILD_ID +1 -1
  56. package/packages/scrabble-solver/.next/build-manifest.json +6 -6
  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/routes-manifest.json +1 -1
  69. package/packages/scrabble-solver/.next/server/chunks/131.js +478 -106
  70. package/packages/scrabble-solver/.next/server/chunks/277.js +1132 -976
  71. package/packages/scrabble-solver/.next/server/chunks/44.js +36 -6
  72. package/packages/scrabble-solver/.next/server/chunks/865.js +478 -106
  73. package/packages/scrabble-solver/.next/server/chunks/911.js +894 -773
  74. package/packages/scrabble-solver/.next/server/middleware-build-manifest.js +1 -1
  75. package/packages/scrabble-solver/.next/server/pages/404.html +1 -1
  76. package/packages/scrabble-solver/.next/server/pages/404.js.nft.json +1 -1
  77. package/packages/scrabble-solver/.next/server/pages/500.html +1 -1
  78. package/packages/scrabble-solver/.next/server/pages/_app.js +3 -1
  79. package/packages/scrabble-solver/.next/server/pages/_app.js.nft.json +1 -1
  80. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale]/[word].js +4 -2
  81. package/packages/scrabble-solver/.next/server/pages/api/solve.js +23 -19
  82. package/packages/scrabble-solver/.next/server/pages/api/verify.js +8 -5
  83. package/packages/scrabble-solver/.next/server/pages/index.html +1 -1
  84. package/packages/scrabble-solver/.next/server/pages/index.js +42 -55
  85. package/packages/scrabble-solver/.next/server/pages/index.js.nft.json +1 -1
  86. package/packages/scrabble-solver/.next/server/pages/index.json +1 -1
  87. package/packages/scrabble-solver/.next/server/pages-manifest.json +1 -1
  88. package/packages/scrabble-solver/.next/static/chunks/pages/_app-e7f3d1c9c09c8f91.js +32 -0
  89. package/packages/scrabble-solver/.next/static/chunks/pages/index-82b2939158c7729f.js +1 -0
  90. package/packages/scrabble-solver/.next/static/css/4e8b47fe382a8a8f.css +2 -0
  91. package/packages/scrabble-solver/.next/static/css/cfae5256f1689f57.css +1 -0
  92. package/packages/scrabble-solver/.next/static/{9dmPfnTc_AQTHBPvL7xQe → wNIKOJJzkMSJYb2nOL21o}/_buildManifest.js +1 -1
  93. package/packages/scrabble-solver/.next/trace +51 -52
  94. package/packages/scrabble-solver/package-lock.json +158 -4898
  95. package/packages/scrabble-solver/package.json +8 -8
  96. package/packages/scrabble-solver/src/components/Board/components/Cell/Cell.module.scss +4 -12
  97. package/packages/scrabble-solver/src/components/Board/components/Cell/Cell.tsx +4 -0
  98. package/packages/scrabble-solver/src/components/Board/hooks/useBackgroundImage.tsx +23 -0
  99. package/packages/scrabble-solver/src/components/PlainTiles/lib/createPlainTile.ts +4 -4
  100. package/packages/scrabble-solver/src/components/Radio/Radio.module.scss +4 -0
  101. package/packages/scrabble-solver/src/components/Radio/Radio.tsx +1 -0
  102. package/packages/scrabble-solver/src/components/SeoMessage/SeoMessage.tsx +3 -3
  103. package/packages/scrabble-solver/src/hooks/useAppLayout.ts +1 -2
  104. package/packages/scrabble-solver/src/hooks/useLocalStorage.ts +5 -5
  105. package/packages/scrabble-solver/src/i18n/constants.ts +31 -61
  106. package/packages/scrabble-solver/src/lib/extractCharacters.test.ts +3 -3
  107. package/packages/scrabble-solver/src/lib/extractCharactersByCase.test.ts +3 -3
  108. package/packages/scrabble-solver/src/lib/getCellSize.ts +2 -2
  109. package/packages/scrabble-solver/src/modals/MenuModal/MenuModal.module.scss +0 -1
  110. package/packages/scrabble-solver/src/modals/MenuModal/MenuModal.tsx +3 -3
  111. package/packages/scrabble-solver/src/modals/SettingsModal/components/ConfigSetting/ConfigSetting.tsx +16 -7
  112. package/packages/scrabble-solver/src/modals/SettingsModal/components/LocaleSetting/LocaleSetting.module.scss +1 -4
  113. package/packages/scrabble-solver/src/modals/SettingsModal/components/LocaleSetting/LocaleSetting.tsx +8 -8
  114. package/packages/scrabble-solver/src/pages/_app.tsx +3 -1
  115. package/packages/scrabble-solver/src/pages/api/dictionary/[locale]/[word].ts +6 -3
  116. package/packages/scrabble-solver/src/pages/api/solve.ts +11 -7
  117. package/packages/scrabble-solver/src/pages/api/verify.ts +11 -7
  118. package/packages/scrabble-solver/src/pages/index.module.scss +0 -1
  119. package/packages/scrabble-solver/src/parameters/index.ts +4 -6
  120. package/packages/scrabble-solver/src/sdk/solve.ts +3 -3
  121. package/packages/scrabble-solver/src/sdk/verify.ts +3 -3
  122. package/packages/scrabble-solver/src/service-worker/routeSolveRequests.ts +3 -3
  123. package/packages/scrabble-solver/src/state/localStorage.ts +6 -6
  124. package/packages/scrabble-solver/src/state/sagas.ts +18 -7
  125. package/packages/scrabble-solver/src/state/selectors.ts +3 -3
  126. package/packages/scrabble-solver/src/state/slices/boardInitialState.ts +3 -3
  127. package/packages/scrabble-solver/src/state/slices/boardSlice.ts +20 -6
  128. package/packages/scrabble-solver/src/state/slices/settingsInitialState.ts +3 -4
  129. package/packages/scrabble-solver/src/state/slices/settingsSlice.ts +5 -5
  130. package/packages/scrabble-solver/src/styles/variables.scss +0 -9
  131. package/packages/solver/build/getPatternHash.js +2 -2
  132. package/packages/solver/build/solve.js +3 -1
  133. package/packages/solver/package-lock.json +3 -10
  134. package/packages/solver/package.json +5 -5
  135. package/packages/solver/src/fillPattern.test.ts +3 -3
  136. package/packages/solver/src/generatePatterns.test.ts +13 -0
  137. package/packages/solver/src/getPatternHash.ts +2 -2
  138. package/packages/solver/src/getPatternScore.test.ts +4 -3
  139. package/packages/solver/src/solve.test.ts +68 -6
  140. package/packages/solver/src/solve.ts +4 -1
  141. package/packages/types/build/Config.d.ts +2 -0
  142. package/packages/types/build/Config.js +3 -0
  143. package/packages/types/build/ConfigJson.d.ts +2 -1
  144. package/packages/types/build/Dictionary.d.ts +7 -0
  145. package/packages/types/build/Dictionary.js +2 -0
  146. package/packages/types/build/Game.d.ts +7 -0
  147. package/packages/types/build/Game.js +13 -0
  148. package/packages/types/build/Locale.d.ts +5 -0
  149. package/packages/types/build/Locale.js +5 -1
  150. package/packages/types/build/index.d.ts +4 -2
  151. package/packages/types/build/index.js +8 -5
  152. package/packages/types/package.json +2 -2
  153. package/packages/types/src/Config.ts +5 -0
  154. package/packages/types/src/ConfigJson.ts +2 -1
  155. package/packages/types/src/Dictionary.ts +9 -0
  156. package/packages/types/src/Game.ts +11 -0
  157. package/packages/types/src/Locale.ts +5 -1
  158. package/packages/types/src/index.ts +4 -2
  159. package/packages/word-definitions/build/lib/normalizeDefinition.js +3 -1
  160. package/packages/word-definitions/package-lock.json +9 -159
  161. package/packages/word-definitions/package.json +2 -2
  162. package/packages/word-definitions/src/lib/normalizeDefinition.ts +3 -1
  163. package/packages/word-lists/package-lock.json +9 -401
  164. package/packages/word-lists/package.json +2 -2
  165. package/packages/configs/build/getLocaleConfig.d.ts +0 -3
  166. package/packages/configs/build/getLocaleConfig.js +0 -10
  167. package/packages/configs/build/isConfigId.d.ts +0 -2
  168. package/packages/configs/build/isConfigId.js +0 -12
  169. package/packages/configs/build/literaki/bonuses.d.ts +0 -14
  170. package/packages/configs/build/literaki/bonuses.js +0 -99
  171. package/packages/configs/build/literaki/index.d.ts +0 -1
  172. package/packages/configs/build/literaki/index.js +0 -8
  173. package/packages/configs/build/literaki/literaki.d.ts +0 -13
  174. package/packages/configs/build/literaki/literaki.js +0 -31
  175. package/packages/configs/build/literaki/tiles/index.d.ts +0 -6
  176. package/packages/configs/build/literaki/tiles/index.js +0 -18
  177. package/packages/configs/build/literaki/tiles/tilesDe.d.ts +0 -6
  178. package/packages/configs/build/literaki/tiles/tilesDe.js +0 -34
  179. package/packages/configs/build/literaki/tiles/tilesEn.d.ts +0 -6
  180. package/packages/configs/build/literaki/tiles/tilesEn.js +0 -31
  181. package/packages/configs/build/literaki/tiles/tilesEs.d.ts +0 -6
  182. package/packages/configs/build/literaki/tiles/tilesEs.js +0 -33
  183. package/packages/configs/build/literaki/tiles/tilesFa.d.ts +0 -6
  184. package/packages/configs/build/literaki/tiles/tilesFa.js +0 -37
  185. package/packages/configs/build/literaki/tiles/tilesFr.d.ts +0 -6
  186. package/packages/configs/build/literaki/tiles/tilesFr.js +0 -31
  187. package/packages/configs/build/literaki/tiles/tilesPl.d.ts +0 -6
  188. package/packages/configs/build/literaki/tiles/tilesPl.js +0 -37
  189. package/packages/configs/build/scrabble/bonuses.d.ts +0 -7
  190. package/packages/configs/build/scrabble/bonuses.js +0 -67
  191. package/packages/configs/build/scrabble/index.d.ts +0 -1
  192. package/packages/configs/build/scrabble/index.js +0 -8
  193. package/packages/configs/build/scrabble/scrabble.d.ts +0 -13
  194. package/packages/configs/build/scrabble/scrabble.js +0 -31
  195. package/packages/configs/build/scrabble/tiles/index.d.ts +0 -6
  196. package/packages/configs/build/scrabble/tiles/index.js +0 -18
  197. package/packages/configs/build/scrabble/tiles/tilesDe.d.ts +0 -6
  198. package/packages/configs/build/scrabble/tiles/tilesDe.js +0 -34
  199. package/packages/configs/build/scrabble/tiles/tilesEn.d.ts +0 -6
  200. package/packages/configs/build/scrabble/tiles/tilesEn.js +0 -31
  201. package/packages/configs/build/scrabble/tiles/tilesEs.d.ts +0 -6
  202. package/packages/configs/build/scrabble/tiles/tilesEs.js +0 -33
  203. package/packages/configs/build/scrabble/tiles/tilesFa.d.ts +0 -6
  204. package/packages/configs/build/scrabble/tiles/tilesFa.js +0 -37
  205. package/packages/configs/build/scrabble/tiles/tilesFr.d.ts +0 -6
  206. package/packages/configs/build/scrabble/tiles/tilesFr.js +0 -31
  207. package/packages/configs/build/scrabble/tiles/tilesPl.d.ts +0 -6
  208. package/packages/configs/build/scrabble/tiles/tilesPl.js +0 -37
  209. package/packages/configs/src/getLocaleConfig.ts +0 -9
  210. package/packages/configs/src/isConfigId.ts +0 -10
  211. package/packages/configs/src/literaki/bonuses.ts +0 -99
  212. package/packages/configs/src/literaki/index.ts +0 -1
  213. package/packages/configs/src/literaki/literaki.ts +0 -30
  214. package/packages/configs/src/literaki/tiles/index.ts +0 -6
  215. package/packages/configs/src/literaki/tiles/tilesDe.ts +0 -33
  216. package/packages/configs/src/literaki/tiles/tilesEn.ts +0 -30
  217. package/packages/configs/src/literaki/tiles/tilesEs.ts +0 -32
  218. package/packages/configs/src/literaki/tiles/tilesFa.ts +0 -36
  219. package/packages/configs/src/literaki/tiles/tilesFr.ts +0 -30
  220. package/packages/configs/src/literaki/tiles/tilesPl.ts +0 -36
  221. package/packages/configs/src/scrabble/bonuses.ts +0 -67
  222. package/packages/configs/src/scrabble/index.ts +0 -1
  223. package/packages/configs/src/scrabble/scrabble.ts +0 -30
  224. package/packages/configs/src/scrabble/tiles/index.ts +0 -6
  225. package/packages/configs/src/scrabble/tiles/tilesDe.ts +0 -33
  226. package/packages/configs/src/scrabble/tiles/tilesEn.ts +0 -30
  227. package/packages/configs/src/scrabble/tiles/tilesEs.ts +0 -32
  228. package/packages/configs/src/scrabble/tiles/tilesFa.ts +0 -36
  229. package/packages/configs/src/scrabble/tiles/tilesFr.ts +0 -30
  230. package/packages/configs/src/scrabble/tiles/tilesPl.ts +0 -36
  231. package/packages/scrabble-solver/.next/static/chunks/pages/_app-02851b06b95b19cb.js +0 -32
  232. package/packages/scrabble-solver/.next/static/chunks/pages/index-0ba5607d1aad8a09.js +0 -1
  233. package/packages/scrabble-solver/.next/static/css/09dfdea53eba31a9.css +0 -2
  234. package/packages/scrabble-solver/.next/static/css/60e8258da7362a1a.css +0 -1
  235. package/packages/scrabble-solver/src/i18n/i18n.module.scss +0 -27
  236. package/packages/scrabble-solver/src/modals/SettingsModal/components/ConfigSetting/options.ts +0 -19
  237. package/packages/scrabble-solver/src/modals/SettingsModal/components/ConfigSetting/types.ts +0 -9
  238. package/packages/scrabble-solver/src/modals/SettingsModal/components/InputModeSetting/types.ts +0 -7
  239. package/packages/scrabble-solver/src/modals/SettingsModal/components/LocaleSetting/types.ts +0 -9
  240. /package/packages/scrabble-solver/.next/static/{9dmPfnTc_AQTHBPvL7xQe → wNIKOJJzkMSJYb2nOL21o}/_ssgManifest.js +0 -0
@@ -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(() => {
@@ -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(() => {
@@ -161,3 +186,40 @@ describe('solve - ES', () => {
161
186
  expect(words).not.toContain('chocho');
162
187
  });
163
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
+ });
225
+ });
@@ -10,7 +10,10 @@ import getUniquePatterns from './getUniquePatterns';
10
10
  const solve = (trie: Trie, config: Config, board: Board, tiles: Tile[]): ResultJson[] => {
11
11
  const patterns = generatePatterns(config, board);
12
12
  const filledPatterns = patterns.flatMap((pattern) => fillPattern(trie, config, pattern, tiles));
13
- const validPatterns = filledPatterns.filter((pattern) => areDigraphsValid(config, pattern));
13
+ const validPatterns =
14
+ config.twoCharacterTiles.length > 0
15
+ ? filledPatterns.filter((pattern) => areDigraphsValid(config, pattern))
16
+ : filledPatterns;
14
17
  const uniquePatterns = getUniquePatterns(validPatterns);
15
18
  const results = uniquePatterns.map((pattern, index) => ({
16
19
  cells: pattern.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; } });
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/types",
3
- "version": "2.12.2",
3
+ "version": "2.12.3",
4
4
  "description": "Scrabble Solver 2 - Types",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -24,7 +24,7 @@
24
24
  "clean:force": "npm run clean && rimraf package-lock.json"
25
25
  },
26
26
  "dependencies": {
27
- "@scrabble-solver/constants": "^2.12.2"
27
+ "@scrabble-solver/constants": "^2.12.3"
28
28
  },
29
29
  "gitHead": "1e2d1ad49a288d4a44196d8e3336740da132c637"
30
30
  }
@@ -5,6 +5,7 @@ import BonusValue from './BonusValue';
5
5
  import Cell from './Cell';
6
6
  import CharacterBonus from './CharacterBonus';
7
7
  import ConfigJson from './ConfigJson';
8
+ import Game from './Game';
8
9
  import Locale from './Locale';
9
10
  import Tile from './Tile';
10
11
  import TileConfig from './TileConfig';
@@ -51,6 +52,10 @@ class Config {
51
52
  return this.config.boardWidth;
52
53
  }
53
54
 
55
+ public get game(): Game {
56
+ return this.config.game;
57
+ }
58
+
54
59
  public get locale(): Locale {
55
60
  return this.config.locale;
56
61
  }
@@ -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
 
@@ -9,7 +10,7 @@ interface ConfigJson {
9
10
  boardHeight: number;
10
11
  boardWidth: number;
11
12
  bonuses: BonusJson[];
12
- id: string;
13
+ game: Game;
13
14
  locale: Locale;
14
15
  maximumCharactersCount: number;
15
16
  name: string;
@@ -0,0 +1,9 @@
1
+ import Locale from './Locale';
2
+
3
+ interface Dictionary {
4
+ description: string;
5
+ locale: Locale;
6
+ name: string;
7
+ }
8
+
9
+ export default Dictionary;
@@ -0,0 +1,11 @@
1
+ enum Game {
2
+ Literaki = 'literaki',
3
+ Scrabble = 'scrabble',
4
+ SuperScrabble = 'super-scrabble',
5
+ }
6
+
7
+ const games = Object.values(Game);
8
+
9
+ export const isGame = (locale: unknown): locale is Game => games.includes(locale as Game);
10
+
11
+ export default Game;
@@ -1,4 +1,8 @@
1
- // eslint-disable-next-line no-shadow
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
+ */
2
6
  enum Locale {
3
7
  DE_DE = 'de-DE',
4
8
  EN_GB = 'en-GB',
@@ -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';
@@ -15,7 +15,9 @@ const normalizeQuotes = (definition) => definition.replace(/\."/g, '".');
15
15
  const normalizeMarkers = (definition) => definition.replace(/^\(\d+\.\d+\)\s+/g, '');
16
16
  const normalizeTrailingSymbols = (definition) => definition.trim().replace(/:$/, '');
17
17
  const normalizeLeadingSymbols = (definition) => definition.trim().replace(/^:/, '');
18
- // https://stackoverflow.com/a/40732368
18
+ /**
19
+ * @see https://stackoverflow.com/a/40732368
20
+ */
19
21
  const normalizeNonWords = (definition) => (/[\w\u0621-\u064A]+/.test(definition) ? definition : '');
20
22
  const normalizeCommas = (definition) => {
21
23
  return definition
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@scrabble-solver/word-definitions",
3
- "version": "2.12.2",
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/word-definitions",
9
- "version": "2.12.2",
9
+ "version": "2.12.3",
10
10
  "license": "CC-BY-NC-ND-4.0",
11
11
  "dependencies": {
12
12
  "cheerio": "^1.0.0-rc.12",
@@ -27,9 +27,9 @@
27
27
  }
28
28
  },
29
29
  "node_modules/@types/node": {
30
- "version": "18.15.11",
31
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz",
32
- "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==",
30
+ "version": "18.15.13",
31
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz",
32
+ "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==",
33
33
  "dev": true
34
34
  },
35
35
  "node_modules/boolbase": {
@@ -151,9 +151,9 @@
151
151
  }
152
152
  },
153
153
  "node_modules/entities": {
154
- "version": "4.4.0",
155
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
156
- "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==",
154
+ "version": "4.5.0",
155
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
156
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
157
157
  "engines": {
158
158
  "node": ">=0.12"
159
159
  },
@@ -237,155 +237,5 @@
237
237
  "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz",
238
238
  "integrity": "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw=="
239
239
  }
240
- },
241
- "dependencies": {
242
- "@types/follow-redirects": {
243
- "version": "1.14.1",
244
- "resolved": "https://registry.npmjs.org/@types/follow-redirects/-/follow-redirects-1.14.1.tgz",
245
- "integrity": "sha512-THBEFwqsLuU/K62B5JRwab9NW97cFmL4Iy34NTMX0bMycQVzq2q7PKOkhfivIwxdpa/J72RppgC42vCHfwKJ0Q==",
246
- "dev": true,
247
- "requires": {
248
- "@types/node": "*"
249
- }
250
- },
251
- "@types/node": {
252
- "version": "18.15.11",
253
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz",
254
- "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==",
255
- "dev": true
256
- },
257
- "boolbase": {
258
- "version": "1.0.0",
259
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
260
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
261
- },
262
- "cheerio": {
263
- "version": "1.0.0-rc.12",
264
- "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
265
- "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
266
- "requires": {
267
- "cheerio-select": "^2.1.0",
268
- "dom-serializer": "^2.0.0",
269
- "domhandler": "^5.0.3",
270
- "domutils": "^3.0.1",
271
- "htmlparser2": "^8.0.1",
272
- "parse5": "^7.0.0",
273
- "parse5-htmlparser2-tree-adapter": "^7.0.0"
274
- }
275
- },
276
- "cheerio-select": {
277
- "version": "2.1.0",
278
- "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
279
- "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
280
- "requires": {
281
- "boolbase": "^1.0.0",
282
- "css-select": "^5.1.0",
283
- "css-what": "^6.1.0",
284
- "domelementtype": "^2.3.0",
285
- "domhandler": "^5.0.3",
286
- "domutils": "^3.0.1"
287
- }
288
- },
289
- "css-select": {
290
- "version": "5.1.0",
291
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
292
- "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
293
- "requires": {
294
- "boolbase": "^1.0.0",
295
- "css-what": "^6.1.0",
296
- "domhandler": "^5.0.2",
297
- "domutils": "^3.0.1",
298
- "nth-check": "^2.0.1"
299
- }
300
- },
301
- "css-what": {
302
- "version": "6.1.0",
303
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
304
- "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw=="
305
- },
306
- "dom-serializer": {
307
- "version": "2.0.0",
308
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
309
- "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
310
- "requires": {
311
- "domelementtype": "^2.3.0",
312
- "domhandler": "^5.0.2",
313
- "entities": "^4.2.0"
314
- }
315
- },
316
- "domelementtype": {
317
- "version": "2.3.0",
318
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
319
- "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="
320
- },
321
- "domhandler": {
322
- "version": "5.0.3",
323
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
324
- "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
325
- "requires": {
326
- "domelementtype": "^2.3.0"
327
- }
328
- },
329
- "domutils": {
330
- "version": "3.0.1",
331
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz",
332
- "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==",
333
- "requires": {
334
- "dom-serializer": "^2.0.0",
335
- "domelementtype": "^2.3.0",
336
- "domhandler": "^5.0.1"
337
- }
338
- },
339
- "entities": {
340
- "version": "4.4.0",
341
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
342
- "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA=="
343
- },
344
- "follow-redirects": {
345
- "version": "1.15.2",
346
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
347
- "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
348
- },
349
- "htmlparser2": {
350
- "version": "8.0.2",
351
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
352
- "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
353
- "requires": {
354
- "domelementtype": "^2.3.0",
355
- "domhandler": "^5.0.3",
356
- "domutils": "^3.0.1",
357
- "entities": "^4.4.0"
358
- }
359
- },
360
- "nth-check": {
361
- "version": "2.1.1",
362
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
363
- "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
364
- "requires": {
365
- "boolbase": "^1.0.0"
366
- }
367
- },
368
- "parse5": {
369
- "version": "7.1.2",
370
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
371
- "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
372
- "requires": {
373
- "entities": "^4.4.0"
374
- }
375
- },
376
- "parse5-htmlparser2-tree-adapter": {
377
- "version": "7.0.0",
378
- "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz",
379
- "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==",
380
- "requires": {
381
- "domhandler": "^5.0.2",
382
- "parse5": "^7.0.0"
383
- }
384
- },
385
- "striptags": {
386
- "version": "3.2.0",
387
- "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz",
388
- "integrity": "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw=="
389
- }
390
240
  }
391
241
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/word-definitions",
3
- "version": "2.12.2",
3
+ "version": "2.12.3",
4
4
  "description": "Scrabble Solver 2 - Word definitions",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -23,7 +23,7 @@
23
23
  "clean": "rimraf build/ node_modules/ package-lock.json"
24
24
  },
25
25
  "dependencies": {
26
- "@scrabble-solver/types": "^2.12.2",
26
+ "@scrabble-solver/types": "^2.12.3",
27
27
  "cheerio": "^1.0.0-rc.12",
28
28
  "follow-redirects": "^1.15.2",
29
29
  "striptags": "^3.2.0"
@@ -21,7 +21,9 @@ const normalizeTrailingSymbols: Normalize = (definition) => definition.trim().re
21
21
 
22
22
  const normalizeLeadingSymbols: Normalize = (definition) => definition.trim().replace(/^:/, '');
23
23
 
24
- // https://stackoverflow.com/a/40732368
24
+ /**
25
+ * @see https://stackoverflow.com/a/40732368
26
+ */
25
27
  const normalizeNonWords: Normalize = (definition) => (/[\w\u0621-\u064A]+/.test(definition) ? definition : '');
26
28
 
27
29
  const normalizeCommas: Normalize = (definition) => {