scrabble-solver 2.9.3 → 2.10.0

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 (213) hide show
  1. package/.prettierignore +2 -0
  2. package/README.md +3 -1
  3. package/lerna.json +1 -1
  4. package/package.json +1 -1
  5. package/packages/configs/build/literaki/literaki.d.ts +1 -0
  6. package/packages/configs/build/literaki/literaki.js +1 -0
  7. package/packages/configs/build/literaki/tiles/index.d.ts +1 -0
  8. package/packages/configs/build/literaki/tiles/index.js +3 -1
  9. package/packages/configs/build/literaki/tiles/tilesFa.d.ts +6 -0
  10. package/packages/configs/build/literaki/tiles/tilesFa.js +37 -0
  11. package/packages/configs/build/scrabble/scrabble.d.ts +1 -0
  12. package/packages/configs/build/scrabble/scrabble.js +1 -0
  13. package/packages/configs/build/scrabble/tiles/index.d.ts +1 -0
  14. package/packages/configs/build/scrabble/tiles/index.js +3 -1
  15. package/packages/configs/build/scrabble/tiles/tilesFa.d.ts +6 -0
  16. package/packages/configs/build/scrabble/tiles/tilesFa.js +37 -0
  17. package/packages/configs/package.json +3 -3
  18. package/packages/configs/src/literaki/literaki.ts +2 -1
  19. package/packages/configs/src/literaki/tiles/index.ts +1 -0
  20. package/packages/configs/src/literaki/tiles/tilesFa.ts +36 -0
  21. package/packages/configs/src/scrabble/scrabble.ts +2 -1
  22. package/packages/configs/src/scrabble/tiles/index.ts +1 -0
  23. package/packages/configs/src/scrabble/tiles/tilesFa.ts +36 -0
  24. package/packages/constants/package.json +1 -1
  25. package/packages/dictionaries/package-lock.json +2 -2
  26. package/packages/dictionaries/package.json +4 -4
  27. package/packages/logger/package-lock.json +2 -2
  28. package/packages/logger/package.json +1 -1
  29. package/packages/logger/scripts/stats.js +1 -1
  30. package/packages/scrabble-solver/.next/BUILD_ID +1 -1
  31. package/packages/scrabble-solver/.next/build-manifest.json +11 -11
  32. package/packages/scrabble-solver/.next/cache/.tsbuildinfo +1 -1
  33. package/packages/scrabble-solver/.next/cache/eslint/.cache_8dgz12 +1 -1
  34. package/packages/scrabble-solver/.next/cache/next-server.js.nft.json +1 -1
  35. package/packages/scrabble-solver/.next/cache/webpack/client-production/0.pack +0 -0
  36. package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack +0 -0
  37. package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/0.pack +0 -0
  38. package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/index.pack +0 -0
  39. package/packages/scrabble-solver/.next/cache/webpack/server-production/0.pack +0 -0
  40. package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack +0 -0
  41. package/packages/scrabble-solver/.next/next-server.js.nft.json +1 -1
  42. package/packages/scrabble-solver/.next/prerender-manifest.json +1 -1
  43. package/packages/scrabble-solver/.next/routes-manifest.json +1 -1
  44. package/packages/scrabble-solver/.next/server/chunks/{429.js → 131.js} +2 -3652
  45. package/packages/scrabble-solver/.next/server/chunks/413.js +367 -185
  46. package/packages/scrabble-solver/.next/server/chunks/44.js +71 -45
  47. package/packages/scrabble-solver/.next/server/chunks/515.js +1026 -480
  48. package/packages/scrabble-solver/.next/server/chunks/911.js +96 -2
  49. package/packages/scrabble-solver/.next/server/middleware-build-manifest.js +1 -1
  50. package/packages/scrabble-solver/.next/server/pages/404.html +2 -2
  51. package/packages/scrabble-solver/.next/server/pages/404.js.nft.json +1 -1
  52. package/packages/scrabble-solver/.next/server/pages/500.html +2 -2
  53. package/packages/scrabble-solver/.next/server/pages/_app.js.nft.json +1 -1
  54. package/packages/scrabble-solver/.next/server/pages/_error.js.nft.json +1 -1
  55. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale]/[word].js +48 -10
  56. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale]/[word].js.nft.json +1 -1
  57. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale].js +1 -8
  58. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale].js.nft.json +1 -1
  59. package/packages/scrabble-solver/.next/server/pages/api/solve.js +62 -49
  60. package/packages/scrabble-solver/.next/server/pages/api/solve.js.nft.json +1 -1
  61. package/packages/scrabble-solver/.next/server/pages/api/verify.js +2 -9
  62. package/packages/scrabble-solver/.next/server/pages/api/verify.js.nft.json +1 -1
  63. package/packages/scrabble-solver/.next/server/pages/index.html +9 -1
  64. package/packages/scrabble-solver/.next/server/pages/index.js +43 -36
  65. package/packages/scrabble-solver/.next/server/pages/index.js.nft.json +1 -1
  66. package/packages/scrabble-solver/.next/server/pages/index.json +1 -1
  67. package/packages/scrabble-solver/.next/server/pages-manifest.json +2 -2
  68. package/packages/scrabble-solver/.next/static/chunks/368-d423e70be6c0c473.js +1 -0
  69. package/packages/scrabble-solver/.next/static/chunks/pages/{404-8650986dc56dab75.js → 404-932294135c3206dd.js} +1 -1
  70. package/packages/scrabble-solver/.next/static/chunks/pages/_app-3f5508a5f544d9eb.js +1 -0
  71. package/packages/scrabble-solver/.next/static/chunks/pages/index-8af7a9d7a2cd98a7.js +1 -0
  72. package/packages/scrabble-solver/.next/static/css/6b1833fd19d3a74a.css +1 -0
  73. package/packages/scrabble-solver/.next/static/css/a6154e4ca046ca13.css +1 -0
  74. package/packages/scrabble-solver/.next/static/css/bad53af6f8616677.css +1 -0
  75. package/packages/scrabble-solver/.next/static/vscqn7BEtAxJteWSwNnas/_buildManifest.js +1 -0
  76. package/packages/scrabble-solver/.next/static/{s5pE_3C3ebZuSfaqE7xat → vscqn7BEtAxJteWSwNnas}/_ssgManifest.js +0 -0
  77. package/packages/scrabble-solver/.next/trace +52 -52
  78. package/packages/scrabble-solver/package-lock.json +2 -2
  79. package/packages/scrabble-solver/package.json +8 -8
  80. package/packages/scrabble-solver/src/components/Board/components/Cell/Cell.module.scss +45 -9
  81. package/packages/scrabble-solver/src/components/Board/hooks/useGrid.ts +4 -2
  82. package/packages/scrabble-solver/src/components/Dictionary/Dictionary.module.scss +8 -1
  83. package/packages/scrabble-solver/src/components/EmptyState/EmptyState.tsx +6 -2
  84. package/packages/scrabble-solver/src/components/Loading/Loading.tsx +13 -2
  85. package/packages/scrabble-solver/src/components/NavButtons/NavButtons.module.scss +8 -7
  86. package/packages/scrabble-solver/src/components/NavButtons/NavButtons.tsx +35 -28
  87. package/packages/scrabble-solver/src/components/PlainTiles/PlainTiles.tsx +7 -1
  88. package/packages/scrabble-solver/src/components/PlainTiles/Tile.tsx +4 -3
  89. package/packages/scrabble-solver/src/components/Rack/Rack.tsx +4 -2
  90. package/packages/scrabble-solver/src/components/Radio/Radio.module.scss +1 -1
  91. package/packages/scrabble-solver/src/components/RemainingTiles/Character.tsx +7 -2
  92. package/packages/scrabble-solver/src/components/RemainingTiles/RemainingTiles.tsx +28 -20
  93. package/packages/scrabble-solver/src/components/Results/Cell.tsx +5 -3
  94. package/packages/scrabble-solver/src/components/Results/Result.tsx +8 -3
  95. package/packages/scrabble-solver/src/components/Results/Results.module.scss +31 -9
  96. package/packages/scrabble-solver/src/components/Results/Results.tsx +6 -2
  97. package/packages/scrabble-solver/src/components/Results/getColumns.ts +58 -0
  98. package/packages/scrabble-solver/src/components/Settings/components/ConfigSetting/ConfigSetting.module.scss +1 -0
  99. package/packages/scrabble-solver/src/components/Settings/components/LocaleSetting/LocaleSetting.module.scss +12 -1
  100. package/packages/scrabble-solver/src/components/Settings/components/LocaleSetting/LocaleSetting.tsx +1 -1
  101. package/packages/scrabble-solver/src/components/Settings/components/LocaleSetting/options.ts +7 -1
  102. package/packages/scrabble-solver/src/components/Sidebar/Sidebar.module.scss +42 -8
  103. package/packages/scrabble-solver/src/components/SvgFontCss/SvgFontCss.tsx +8 -7
  104. package/packages/scrabble-solver/src/components/SvgFontCss/createCss.ts +11 -0
  105. package/packages/scrabble-solver/src/components/SvgFontCss/createStyle.ts +9 -0
  106. package/packages/scrabble-solver/src/components/SvgFontCss/createSvg.ts +10 -0
  107. package/packages/scrabble-solver/src/components/SvgFontFix/SvgFontFix.module.scss +5 -0
  108. package/packages/scrabble-solver/src/components/SvgFontFix/SvgFontFix.tsx +21 -0
  109. package/packages/scrabble-solver/src/components/SvgFontFix/index.ts +1 -0
  110. package/packages/scrabble-solver/src/components/Tile/Tile.module.scss +10 -2
  111. package/packages/scrabble-solver/src/components/Tile/Tile.tsx +4 -0
  112. package/packages/scrabble-solver/src/components/Tile/TilePure.tsx +3 -1
  113. package/packages/scrabble-solver/src/components/Words/Words.tsx +4 -3
  114. package/packages/scrabble-solver/src/components/index.ts +1 -0
  115. package/packages/scrabble-solver/src/hooks/index.ts +2 -0
  116. package/packages/scrabble-solver/src/hooks/useDirection.ts +22 -0
  117. package/packages/scrabble-solver/src/hooks/useLanguage.ts +22 -0
  118. package/packages/scrabble-solver/src/i18n/constants.ts +53 -0
  119. package/packages/scrabble-solver/src/i18n/fa.json +56 -0
  120. package/packages/scrabble-solver/src/i18n/i18n.ts +22 -0
  121. package/packages/scrabble-solver/src/i18n/index.ts +2 -20
  122. package/packages/scrabble-solver/src/icons/FlagFa.svg +95 -0
  123. package/packages/scrabble-solver/src/icons/index.ts +1 -0
  124. package/packages/scrabble-solver/src/lib/createComparator.ts +22 -0
  125. package/packages/scrabble-solver/src/lib/createKeyComparator.ts +4 -2
  126. package/packages/scrabble-solver/src/lib/createStringComparator.ts +5 -0
  127. package/packages/scrabble-solver/src/lib/detectLocale.ts +4 -0
  128. package/packages/scrabble-solver/src/lib/getRemainingTiles.ts +4 -2
  129. package/packages/scrabble-solver/src/lib/getRemainingTilesGroups.ts +48 -23
  130. package/packages/scrabble-solver/src/lib/index.ts +2 -2
  131. package/packages/scrabble-solver/src/lib/sortResults.ts +11 -9
  132. package/packages/scrabble-solver/src/lib/unorderedArraysEqual.ts +3 -2
  133. package/packages/scrabble-solver/src/pages/api/verify.ts +1 -1
  134. package/packages/scrabble-solver/src/pages/index.module.scss +7 -18
  135. package/packages/scrabble-solver/src/pages/index.tsx +10 -2
  136. package/packages/scrabble-solver/src/service-worker/routeVerifyRequests.ts +1 -1
  137. package/packages/scrabble-solver/src/state/selectors.ts +5 -5
  138. package/packages/scrabble-solver/src/styles/global.scss +6 -1
  139. package/packages/solver/package-lock.json +2 -2
  140. package/packages/solver/package.json +5 -5
  141. package/packages/types/build/Locale.d.ts +1 -0
  142. package/packages/types/build/Locale.js +1 -0
  143. package/packages/types/build/Result.d.ts +0 -1
  144. package/packages/types/build/Result.js +0 -5
  145. package/packages/types/package.json +2 -2
  146. package/packages/types/src/Locale.ts +1 -0
  147. package/packages/types/src/Result.ts +0 -11
  148. package/packages/word-definitions/build/crawl/crawl.js +2 -0
  149. package/packages/word-definitions/build/crawl/crawlFarsi.d.ts +2 -0
  150. package/packages/word-definitions/build/crawl/crawlFarsi.js +11 -0
  151. package/packages/word-definitions/build/lib/normalizeDefinition.js +2 -1
  152. package/packages/word-definitions/build/parse/index.d.ts +1 -0
  153. package/packages/word-definitions/build/parse/index.js +3 -1
  154. package/packages/word-definitions/build/parse/parse.js +2 -0
  155. package/packages/word-definitions/build/parse/parseFarsi.d.ts +3 -0
  156. package/packages/word-definitions/build/parse/parseFarsi.js +13 -0
  157. package/packages/word-definitions/package-lock.json +2 -2
  158. package/packages/word-definitions/package.json +2 -2
  159. package/packages/word-definitions/src/crawl/crawl.ts +2 -0
  160. package/packages/word-definitions/src/crawl/crawlFarsi.ts +11 -0
  161. package/packages/word-definitions/src/lib/normalizeDefinition.ts +2 -1
  162. package/packages/word-definitions/src/parse/index.ts +1 -0
  163. package/packages/word-definitions/src/parse/parse.ts +2 -0
  164. package/packages/word-definitions/src/parse/parseFarsi.ts +17 -0
  165. package/packages/word-lists/build/getDeDeWordList.js +2 -1
  166. package/packages/word-lists/build/getEnGbWordList.js +2 -1
  167. package/packages/word-lists/build/getEnUsWordList.js +2 -1
  168. package/packages/word-lists/build/getEsEsWordList.js +2 -1
  169. package/packages/word-lists/build/getFaIrWordList.d.ts +2 -0
  170. package/packages/word-lists/build/getFaIrWordList.js +9 -0
  171. package/packages/word-lists/build/getFrFrWordList.js +2 -1
  172. package/packages/word-lists/build/getPlPlWordList.js +9 -9
  173. package/packages/word-lists/build/getWordList.js +2 -0
  174. package/packages/word-lists/build/lib/downloadFile.js +5 -5
  175. package/packages/word-lists/build/lib/extractWords.d.ts +1 -1
  176. package/packages/word-lists/build/lib/extractWords.js +10 -7
  177. package/packages/word-lists/build/lib/findFirstWordIndex.d.ts +1 -1
  178. package/packages/word-lists/build/lib/findFirstWordIndex.js +2 -2
  179. package/packages/word-lists/build/lib/getTempFilepath.d.ts +2 -0
  180. package/packages/word-lists/build/lib/getTempFilepath.js +14 -0
  181. package/packages/word-lists/build/lib/getTxtWordList.d.ts +1 -1
  182. package/packages/word-lists/build/lib/getTxtWordList.js +5 -5
  183. package/packages/word-lists/build/lib/index.d.ts +1 -1
  184. package/packages/word-lists/build/lib/index.js +3 -3
  185. package/packages/word-lists/package-lock.json +2 -32
  186. package/packages/word-lists/package.json +2 -3
  187. package/packages/word-lists/src/getDeDeWordList.ts +3 -1
  188. package/packages/word-lists/src/getEnGbWordList.ts +3 -1
  189. package/packages/word-lists/src/getEnUsWordList.ts +3 -1
  190. package/packages/word-lists/src/getEsEsWordList.ts +3 -1
  191. package/packages/word-lists/src/getFaIrWordList.ts +11 -0
  192. package/packages/word-lists/src/getFrFrWordList.ts +3 -1
  193. package/packages/word-lists/src/getPlPlWordList.ts +7 -7
  194. package/packages/word-lists/src/getWordList.ts +2 -0
  195. package/packages/word-lists/src/lib/downloadFile.ts +5 -5
  196. package/packages/word-lists/src/lib/extractWords.ts +13 -7
  197. package/packages/word-lists/src/lib/findFirstWordIndex.ts +2 -2
  198. package/packages/word-lists/src/lib/getTempFilepath.ts +13 -0
  199. package/packages/word-lists/src/lib/getTxtWordList.ts +3 -3
  200. package/packages/word-lists/src/lib/index.ts +1 -1
  201. package/packages/scrabble-solver/.next/static/chunks/880-18e3aea6915aebe7.js +0 -1
  202. package/packages/scrabble-solver/.next/static/chunks/pages/_app-183f598b1d4d480b.js +0 -1
  203. package/packages/scrabble-solver/.next/static/chunks/pages/index-f1cef1e67e14d022.js +0 -1
  204. package/packages/scrabble-solver/.next/static/css/751e8a14776d05d8.css +0 -1
  205. package/packages/scrabble-solver/.next/static/css/ad2a08918868cad8.css +0 -1
  206. package/packages/scrabble-solver/.next/static/css/e8de67ad5ea35427.css +0 -1
  207. package/packages/scrabble-solver/.next/static/s5pE_3C3ebZuSfaqE7xat/_buildManifest.js +0 -1
  208. package/packages/scrabble-solver/src/components/Results/constants.ts +0 -42
  209. package/packages/scrabble-solver/src/lib/comparator.ts +0 -16
  210. package/packages/scrabble-solver/src/lib/stringComparator.ts +0 -5
  211. package/packages/word-lists/build/lib/getTempFilename.d.ts +0 -2
  212. package/packages/word-lists/build/lib/getTempFilename.js +0 -10
  213. package/packages/word-lists/src/lib/getTempFilename.ts +0 -7
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/solver",
3
- "version": "2.9.3",
3
+ "version": "2.10.0",
4
4
  "description": "Scrabble Solver 2 - Solver",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -25,12 +25,12 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@kamilmielnik/trie": "^2.0.1",
28
- "@scrabble-solver/types": "^2.9.3"
28
+ "@scrabble-solver/types": "^2.10.0"
29
29
  },
30
30
  "devDependencies": {
31
- "@scrabble-solver/configs": "^2.9.3",
32
- "@scrabble-solver/constants": "^2.9.3",
33
- "@scrabble-solver/dictionaries": "^2.9.3"
31
+ "@scrabble-solver/configs": "^2.10.0",
32
+ "@scrabble-solver/constants": "^2.10.0",
33
+ "@scrabble-solver/dictionaries": "^2.10.0"
34
34
  },
35
35
  "gitHead": "1e2d1ad49a288d4a44196d8e3336740da132c637"
36
36
  }
@@ -3,6 +3,7 @@ declare enum Locale {
3
3
  EN_GB = "en-GB",
4
4
  EN_US = "en-US",
5
5
  ES_ES = "es-ES",
6
+ FA_IR = "fa-IR",
6
7
  FR_FR = "fr-FR",
7
8
  PL_PL = "pl-PL"
8
9
  }
@@ -8,6 +8,7 @@ var Locale;
8
8
  Locale["EN_GB"] = "en-GB";
9
9
  Locale["EN_US"] = "en-US";
10
10
  Locale["ES_ES"] = "es-ES";
11
+ Locale["FA_IR"] = "fa-IR";
11
12
  Locale["FR_FR"] = "fr-FR";
12
13
  Locale["PL_PL"] = "pl-PL";
13
14
  })(Locale || (Locale = {}));
@@ -13,7 +13,6 @@ declare class Result {
13
13
  readonly points: number;
14
14
  readonly pointsRatio: number;
15
15
  readonly tiles: Tile[];
16
- readonly tilesCharacters: string;
17
16
  readonly tilesCount: number;
18
17
  readonly vowelsCount: number;
19
18
  readonly word: string;
@@ -17,7 +17,6 @@ class Result {
17
17
  this.points = points;
18
18
  this.pointsRatio = getPointsRatio(tiles, points);
19
19
  this.tiles = tiles;
20
- this.tilesCharacters = getTilesCharacters(tiles);
21
20
  this.tilesCount = tiles.length;
22
21
  this.vowelsCount = getVowels(tiles).length;
23
22
  this.word = getWord(cells);
@@ -41,15 +40,11 @@ class Result {
41
40
  };
42
41
  }
43
42
  }
44
- const charactersComparator = (a, b) => a.localeCompare(b);
45
43
  const getBlanks = (tiles) => tiles.filter(({ isBlank }) => isBlank);
46
44
  const getConsonants = (tiles) => tiles.filter(isConsonant);
47
45
  const getVowels = (tiles) => tiles.filter(isVowel);
48
- const getNonBlankCharacters = (tiles) => getNonBlanks(tiles).map(({ character }) => character);
49
- const getNonBlanks = (tiles) => tiles.filter(({ isBlank }) => !isBlank);
50
46
  const getPointsRatio = (tiles, points) => points / tiles.length;
51
47
  const getTiles = (cells) => cells.filter(({ isEmpty }) => isEmpty).map(({ tile }) => tile);
52
- const getTilesCharacters = (tiles) => getNonBlankCharacters(tiles).sort(charactersComparator).join('');
53
48
  // eslint-disable-next-line prefer-template
54
49
  const getWord = (cells) => cells.reduce((word, cell) => word + cell.toString(), '');
55
50
  const getWords = (cells, collisions) => [cells, ...collisions].map(getWord);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/types",
3
- "version": "2.9.3",
3
+ "version": "2.10.0",
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.9.3"
27
+ "@scrabble-solver/constants": "^2.10.0"
28
28
  },
29
29
  "gitHead": "1e2d1ad49a288d4a44196d8e3336740da132c637"
30
30
  }
@@ -4,6 +4,7 @@ enum Locale {
4
4
  EN_GB = 'en-GB',
5
5
  EN_US = 'en-US',
6
6
  ES_ES = 'es-ES',
7
+ FA_IR = 'fa-IR',
7
8
  FR_FR = 'fr-FR',
8
9
  PL_PL = 'pl-PL',
9
10
  }
@@ -34,8 +34,6 @@ class Result {
34
34
 
35
35
  public readonly tiles: Tile[];
36
36
 
37
- public readonly tilesCharacters: string;
38
-
39
37
  public readonly tilesCount: number;
40
38
 
41
39
  public readonly vowelsCount: number;
@@ -67,7 +65,6 @@ class Result {
67
65
  this.points = points;
68
66
  this.pointsRatio = getPointsRatio(tiles, points);
69
67
  this.tiles = tiles;
70
- this.tilesCharacters = getTilesCharacters(tiles);
71
68
  this.tilesCount = tiles.length;
72
69
  this.vowelsCount = getVowels(tiles).length;
73
70
  this.word = getWord(cells);
@@ -85,24 +82,16 @@ class Result {
85
82
  }
86
83
  }
87
84
 
88
- const charactersComparator = (a: string, b: string): number => a.localeCompare(b);
89
-
90
85
  const getBlanks = (tiles: Tile[]): Tile[] => tiles.filter(({ isBlank }) => isBlank);
91
86
 
92
87
  const getConsonants = (tiles: Tile[]): Tile[] => tiles.filter(isConsonant);
93
88
 
94
89
  const getVowels = (tiles: Tile[]): Tile[] => tiles.filter(isVowel);
95
90
 
96
- const getNonBlankCharacters = (tiles: Tile[]): string[] => getNonBlanks(tiles).map(({ character }) => character);
97
-
98
- const getNonBlanks = (tiles: Tile[]): Tile[] => tiles.filter(({ isBlank }) => !isBlank);
99
-
100
91
  const getPointsRatio = (tiles: Tile[], points: number): number => points / tiles.length;
101
92
 
102
93
  const getTiles = (cells: Cell[]): Tile[] => cells.filter(({ isEmpty }) => isEmpty).map(({ tile }) => tile);
103
94
 
104
- const getTilesCharacters = (tiles: Tile[]): string => getNonBlankCharacters(tiles).sort(charactersComparator).join('');
105
-
106
95
  // eslint-disable-next-line prefer-template
107
96
  const getWord = (cells: Cell[]): string => cells.reduce((word, cell) => word + cell.toString(), '');
108
97
 
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const types_1 = require("@scrabble-solver/types");
7
7
  const crawlEnglish_1 = __importDefault(require("./crawlEnglish"));
8
+ const crawlFarsi_1 = __importDefault(require("./crawlFarsi"));
8
9
  const crawlFrench_1 = __importDefault(require("./crawlFrench"));
9
10
  const crawlGerman_1 = __importDefault(require("./crawlGerman"));
10
11
  const crawlPolish_1 = __importDefault(require("./crawlPolish"));
@@ -14,6 +15,7 @@ const crawlPerLocale = {
14
15
  [types_1.Locale.EN_GB]: crawlEnglish_1.default,
15
16
  [types_1.Locale.EN_US]: crawlEnglish_1.default,
16
17
  [types_1.Locale.ES_ES]: crawlSpanish_1.default,
18
+ [types_1.Locale.FA_IR]: crawlFarsi_1.default,
17
19
  [types_1.Locale.FR_FR]: crawlFrench_1.default,
18
20
  [types_1.Locale.PL_PL]: crawlPolish_1.default,
19
21
  };
@@ -0,0 +1,2 @@
1
+ declare const crawlFarsi: (word: string) => Promise<string>;
2
+ export default crawlFarsi;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lib_1 = require("../lib");
4
+ const crawlFarsi = (word) => {
5
+ return (0, lib_1.request)({
6
+ protocol: 'https',
7
+ hostname: 'www.vajehyab.com',
8
+ path: `/moein/${encodeURIComponent(word)}`,
9
+ });
10
+ };
11
+ exports.default = crawlFarsi;
@@ -15,7 +15,8 @@ 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
- const normalizeNonWords = (definition) => (/\w/.test(definition) ? definition : '');
18
+ // https://stackoverflow.com/a/40732368
19
+ const normalizeNonWords = (definition) => (/[\w\u0621-\u064A]+/.test(definition) ? definition : '');
19
20
  const normalizeCommas = (definition) => {
20
21
  return definition
21
22
  .replace(/\s+,\s+/g, ', ')
@@ -1,5 +1,6 @@
1
1
  export { default as parse } from './parse';
2
2
  export { default as parseEnglish } from './parseEnglish';
3
+ export { default as parseFarsi } from './parseFarsi';
3
4
  export { default as parseFrench } from './parseFrench';
4
5
  export { default as parseGerman } from './parseGerman';
5
6
  export { default as parsePolish } from './parsePolish';
@@ -3,11 +3,13 @@ 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.parseSpanish = exports.parsePolish = exports.parseGerman = exports.parseFrench = exports.parseEnglish = exports.parse = void 0;
6
+ exports.parseSpanish = exports.parsePolish = exports.parseGerman = exports.parseFrench = exports.parseFarsi = exports.parseEnglish = exports.parse = void 0;
7
7
  var parse_1 = require("./parse");
8
8
  Object.defineProperty(exports, "parse", { enumerable: true, get: function () { return __importDefault(parse_1).default; } });
9
9
  var parseEnglish_1 = require("./parseEnglish");
10
10
  Object.defineProperty(exports, "parseEnglish", { enumerable: true, get: function () { return __importDefault(parseEnglish_1).default; } });
11
+ var parseFarsi_1 = require("./parseFarsi");
12
+ Object.defineProperty(exports, "parseFarsi", { enumerable: true, get: function () { return __importDefault(parseFarsi_1).default; } });
11
13
  var parseFrench_1 = require("./parseFrench");
12
14
  Object.defineProperty(exports, "parseFrench", { enumerable: true, get: function () { return __importDefault(parseFrench_1).default; } });
13
15
  var parseGerman_1 = require("./parseGerman");
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const types_1 = require("@scrabble-solver/types");
7
7
  const lib_1 = require("../lib");
8
8
  const parseEnglish_1 = __importDefault(require("./parseEnglish"));
9
+ const parseFarsi_1 = __importDefault(require("./parseFarsi"));
9
10
  const parseFrench_1 = __importDefault(require("./parseFrench"));
10
11
  const parseGerman_1 = __importDefault(require("./parseGerman"));
11
12
  const parsePolish_1 = __importDefault(require("./parsePolish"));
@@ -15,6 +16,7 @@ const parsePerLocale = {
15
16
  [types_1.Locale.EN_GB]: parseEnglish_1.default,
16
17
  [types_1.Locale.EN_US]: parseEnglish_1.default,
17
18
  [types_1.Locale.ES_ES]: parseSpanish_1.default,
19
+ [types_1.Locale.FA_IR]: parseFarsi_1.default,
18
20
  [types_1.Locale.FR_FR]: parseFrench_1.default,
19
21
  [types_1.Locale.PL_PL]: parsePolish_1.default,
20
22
  };
@@ -0,0 +1,3 @@
1
+ import { ParseResult } from '../types';
2
+ declare const parseFarsi: (html: string) => ParseResult;
3
+ export default parseFarsi;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const cheerio_1 = require("cheerio");
4
+ const DOES_NOT_EXIST_MESSAGE = '404 Page Not Found';
5
+ const parseFarsi = (html) => {
6
+ const $ = (0, cheerio_1.load)(html);
7
+ const $definitions = $('[itemprop=articleBody]');
8
+ return {
9
+ definitions: Array.from($definitions).map((definition) => $(definition).text()),
10
+ exists: $('#container h1').text() !== DOES_NOT_EXIST_MESSAGE,
11
+ };
12
+ };
13
+ exports.default = parseFarsi;
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@scrabble-solver/word-definitions",
3
- "version": "2.9.3",
3
+ "version": "2.10.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@scrabble-solver/word-definitions",
9
- "version": "2.9.3",
9
+ "version": "2.10.0",
10
10
  "license": "CC-BY-NC-ND-4.0",
11
11
  "dependencies": {
12
12
  "cheerio": "^1.0.0-rc.12",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/word-definitions",
3
- "version": "2.9.3",
3
+ "version": "2.10.0",
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.9.3",
26
+ "@scrabble-solver/types": "^2.10.0",
27
27
  "cheerio": "^1.0.0-rc.12",
28
28
  "follow-redirects": "^1.15.2",
29
29
  "striptags": "^3.2.0"
@@ -1,6 +1,7 @@
1
1
  import { Locale } from '@scrabble-solver/types';
2
2
 
3
3
  import crawlEnglish from './crawlEnglish';
4
+ import crawlFarsi from './crawlFarsi';
4
5
  import crawlFrench from './crawlFrench';
5
6
  import crawlGerman from './crawlGerman';
6
7
  import crawlPolish from './crawlPolish';
@@ -11,6 +12,7 @@ const crawlPerLocale: Record<Locale, (word: string) => Promise<string>> = {
11
12
  [Locale.EN_GB]: crawlEnglish,
12
13
  [Locale.EN_US]: crawlEnglish,
13
14
  [Locale.ES_ES]: crawlSpanish,
15
+ [Locale.FA_IR]: crawlFarsi,
14
16
  [Locale.FR_FR]: crawlFrench,
15
17
  [Locale.PL_PL]: crawlPolish,
16
18
  };
@@ -0,0 +1,11 @@
1
+ import { request } from '../lib';
2
+
3
+ const crawlFarsi = (word: string): Promise<string> => {
4
+ return request({
5
+ protocol: 'https',
6
+ hostname: 'www.vajehyab.com',
7
+ path: `/moein/${encodeURIComponent(word)}`,
8
+ });
9
+ };
10
+
11
+ export default crawlFarsi;
@@ -21,7 +21,8 @@ const normalizeTrailingSymbols: Normalize = (definition) => definition.trim().re
21
21
 
22
22
  const normalizeLeadingSymbols: Normalize = (definition) => definition.trim().replace(/^:/, '');
23
23
 
24
- const normalizeNonWords: Normalize = (definition) => (/\w/.test(definition) ? definition : '');
24
+ // https://stackoverflow.com/a/40732368
25
+ const normalizeNonWords: Normalize = (definition) => (/[\w\u0621-\u064A]+/.test(definition) ? definition : '');
25
26
 
26
27
  const normalizeCommas: Normalize = (definition) => {
27
28
  return definition
@@ -1,5 +1,6 @@
1
1
  export { default as parse } from './parse';
2
2
  export { default as parseEnglish } from './parseEnglish';
3
+ export { default as parseFarsi } from './parseFarsi';
3
4
  export { default as parseFrench } from './parseFrench';
4
5
  export { default as parseGerman } from './parseGerman';
5
6
  export { default as parsePolish } from './parsePolish';
@@ -4,6 +4,7 @@ import { normalizeDefinition, unique } from '../lib';
4
4
  import { ParseResult } from '../types';
5
5
 
6
6
  import parseEnglish from './parseEnglish';
7
+ import parseFarsi from './parseFarsi';
7
8
  import parseFrench from './parseFrench';
8
9
  import parseGerman from './parseGerman';
9
10
  import parsePolish from './parsePolish';
@@ -14,6 +15,7 @@ const parsePerLocale: Record<Locale, (html: string) => ParseResult> = {
14
15
  [Locale.EN_GB]: parseEnglish,
15
16
  [Locale.EN_US]: parseEnglish,
16
17
  [Locale.ES_ES]: parseSpanish,
18
+ [Locale.FA_IR]: parseFarsi,
17
19
  [Locale.FR_FR]: parseFrench,
18
20
  [Locale.PL_PL]: parsePolish,
19
21
  };
@@ -0,0 +1,17 @@
1
+ import { load } from 'cheerio';
2
+
3
+ import { ParseResult } from '../types';
4
+
5
+ const DOES_NOT_EXIST_MESSAGE = '404 Page Not Found';
6
+
7
+ const parseFarsi = (html: string): ParseResult => {
8
+ const $ = load(html);
9
+ const $definitions = $('[itemprop=articleBody]');
10
+
11
+ return {
12
+ definitions: Array.from($definitions).map((definition) => $(definition).text()),
13
+ exists: $('#container h1').text() !== DOES_NOT_EXIST_MESSAGE,
14
+ };
15
+ };
16
+
17
+ export default parseFarsi;
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const types_1 = require("@scrabble-solver/types");
3
4
  const lib_1 = require("./lib");
4
5
  const FILE_URL = 'https://raw.githubusercontent.com/hippler/german-wordlist/master/words.txt';
5
6
  const getDeDeWordList = async () => {
6
- return (0, lib_1.getTxtWordList)(FILE_URL);
7
+ return (0, lib_1.getTxtWordList)(FILE_URL, types_1.Locale.DE_DE);
7
8
  };
8
9
  exports.default = getDeDeWordList;
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const types_1 = require("@scrabble-solver/types");
3
4
  const lib_1 = require("./lib");
4
5
  const FILE_URL = 'https://www.wordgamedictionary.com/sowpods/download/sowpods.txt';
5
6
  const getEnGbWordList = async () => {
6
- return (0, lib_1.getTxtWordList)(FILE_URL);
7
+ return (0, lib_1.getTxtWordList)(FILE_URL, types_1.Locale.EN_GB);
7
8
  };
8
9
  exports.default = getEnGbWordList;
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const types_1 = require("@scrabble-solver/types");
3
4
  const lib_1 = require("./lib");
4
5
  const FILE_URL = 'https://www.wordgamedictionary.com/twl06/download/twl06.txt';
5
6
  const getEnUsWordList = async () => {
6
- return (0, lib_1.getTxtWordList)(FILE_URL);
7
+ return (0, lib_1.getTxtWordList)(FILE_URL, types_1.Locale.EN_US);
7
8
  };
8
9
  exports.default = getEnUsWordList;
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const types_1 = require("@scrabble-solver/types");
3
4
  const lib_1 = require("./lib");
4
5
  const FILE_URL = 'https://raw.githubusercontent.com/kamilmielnik/fise-2/master/fise-2.txt';
5
6
  const getEsEsWordList = async () => {
6
- const words = await (0, lib_1.getTxtWordList)(FILE_URL);
7
+ const words = await (0, lib_1.getTxtWordList)(FILE_URL, types_1.Locale.ES_ES);
7
8
  return words.map(normalizeWord);
8
9
  };
9
10
  const normalizeWord = (word) => {
@@ -0,0 +1,2 @@
1
+ declare const getFaIrWordList: () => Promise<string[]>;
2
+ export default getFaIrWordList;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const types_1 = require("@scrabble-solver/types");
4
+ const lib_1 = require("./lib");
5
+ const FILE_URL = 'https://raw.githubusercontent.com/MansourM/persian-to-persian-dictionary/main/moein/words.txt';
6
+ const getFaIrWordList = async () => {
7
+ return (0, lib_1.getTxtWordList)(FILE_URL, types_1.Locale.FA_IR);
8
+ };
9
+ exports.default = getFaIrWordList;
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const types_1 = require("@scrabble-solver/types");
3
4
  const lib_1 = require("./lib");
4
5
  const FILE_URL =
5
6
  // eslint-disable-next-line max-len
6
7
  'https://raw.githubusercontent.com/hbenbel/French-Dictionary/a573eab10cc798d7d5da7daab4d2ac0259bb46a3/dictionary/dictionary.txt';
7
8
  const getFrFrWordList = async () => {
8
- const words = await (0, lib_1.getTxtWordList)(FILE_URL);
9
+ const words = await (0, lib_1.getTxtWordList)(FILE_URL, types_1.Locale.FR_FR);
9
10
  return words.map(normalizeWord);
10
11
  };
11
12
  const normalizeWord = (word) => {
@@ -4,21 +4,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const cheerio_1 = require("cheerio");
7
- const memfs_1 = require("memfs");
7
+ const fs_1 = __importDefault(require("fs"));
8
8
  const unzipper_1 = __importDefault(require("unzipper"));
9
9
  const url_1 = require("url");
10
10
  const lib_1 = require("./lib");
11
11
  const PAGE_URL = 'https://sjp.pl/sl/growy/';
12
12
  const FILE_TO_EXTRACT_FROM_ZIP = 'slowa.txt';
13
13
  const getPlPlWordList = async () => {
14
- const tempFilename = (0, lib_1.getTempFilename)();
14
+ const tempFilepath = (0, lib_1.getTempFilepath)();
15
15
  const zipUrl = await fetchZipUrl(PAGE_URL);
16
16
  const zipTempFilename = await (0, lib_1.downloadFile)(zipUrl);
17
- await unzip(zipTempFilename, tempFilename);
18
- memfs_1.fs.unlinkSync(zipTempFilename);
19
- const file = memfs_1.fs.readFileSync(tempFilename, 'utf-8');
20
- memfs_1.fs.unlinkSync(tempFilename);
21
- const words = (0, lib_1.extractWords)(file.toLocaleString());
17
+ await unzip(zipTempFilename, tempFilepath);
18
+ fs_1.default.unlinkSync(zipTempFilename);
19
+ const file = fs_1.default.readFileSync(tempFilepath, 'utf-8');
20
+ fs_1.default.unlinkSync(tempFilepath);
21
+ const words = (0, lib_1.extractWords)(file.toLocaleString(), 'pl-PL');
22
22
  return words;
23
23
  };
24
24
  const fetchZipUrl = async (url) => {
@@ -40,13 +40,13 @@ const parseZipContainingPage = (html) => {
40
40
  return zipFilename;
41
41
  };
42
42
  const unzip = (zipFilename, outputFilename) => {
43
- return memfs_1.fs
43
+ return fs_1.default
44
44
  .createReadStream(zipFilename)
45
45
  .pipe(unzipper_1.default.Parse())
46
46
  .on('entry', (entry) => {
47
47
  const fileName = entry.path;
48
48
  if (fileName === FILE_TO_EXTRACT_FROM_ZIP) {
49
- entry.pipe(memfs_1.fs.createWriteStream(outputFilename));
49
+ entry.pipe(fs_1.default.createWriteStream(outputFilename));
50
50
  }
51
51
  else {
52
52
  entry.autodrain();
@@ -8,6 +8,7 @@ const getDeDeWordList_1 = __importDefault(require("./getDeDeWordList"));
8
8
  const getEnGbWordList_1 = __importDefault(require("./getEnGbWordList"));
9
9
  const getEnUsWordList_1 = __importDefault(require("./getEnUsWordList"));
10
10
  const getEsEsWordList_1 = __importDefault(require("./getEsEsWordList"));
11
+ const getFaIrWordList_1 = __importDefault(require("./getFaIrWordList"));
11
12
  const getFrFrWordList_1 = __importDefault(require("./getFrFrWordList"));
12
13
  const getPlPlWordList_1 = __importDefault(require("./getPlPlWordList"));
13
14
  const localeMap = {
@@ -15,6 +16,7 @@ const localeMap = {
15
16
  [types_1.Locale.EN_GB]: getEnGbWordList_1.default,
16
17
  [types_1.Locale.EN_US]: getEnUsWordList_1.default,
17
18
  [types_1.Locale.ES_ES]: getEsEsWordList_1.default,
19
+ [types_1.Locale.FA_IR]: getFaIrWordList_1.default,
18
20
  [types_1.Locale.FR_FR]: getFrFrWordList_1.default,
19
21
  [types_1.Locale.PL_PL]: getPlPlWordList_1.default,
20
22
  };
@@ -4,13 +4,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const follow_redirects_1 = require("follow-redirects");
7
- const memfs_1 = require("memfs");
8
- const getTempFilename_1 = __importDefault(require("./getTempFilename"));
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const getTempFilepath_1 = __importDefault(require("./getTempFilepath"));
9
9
  const downloadFile = (url) => {
10
10
  return new Promise((resolve, reject) => {
11
- const tempFilename = (0, getTempFilename_1.default)();
11
+ const tempFilepath = (0, getTempFilepath_1.default)();
12
12
  const protocol = url.startsWith('https') ? follow_redirects_1.https : follow_redirects_1.http;
13
- const writeStream = memfs_1.fs.createWriteStream(tempFilename);
13
+ const writeStream = fs_1.default.createWriteStream(tempFilepath);
14
14
  const request = protocol.get(url, (response) => {
15
15
  if (typeof response.statusCode === 'undefined' || response.statusCode >= 400) {
16
16
  reject(new Error(`Cannot download file: ${url}`));
@@ -23,7 +23,7 @@ const downloadFile = (url) => {
23
23
  response.on('end', () => {
24
24
  writeStream.on('finish', () => {
25
25
  writeStream.close();
26
- resolve(tempFilename);
26
+ resolve(tempFilepath);
27
27
  });
28
28
  });
29
29
  response.pipe(writeStream);
@@ -1,2 +1,2 @@
1
- declare const extractWords: (file: string) => string[];
1
+ declare const extractWords: (file: string, locale: string) => string[];
2
2
  export default extractWords;
@@ -4,13 +4,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const findFirstWordIndex_1 = __importDefault(require("./findFirstWordIndex"));
7
- const extractWords = (file) => {
8
- const lines = file.replace(/\r/g, '').split('\n');
9
- const firstWordIndex = (0, findFirstWordIndex_1.default)(lines);
10
- const words = lines
11
- .slice(firstWordIndex)
12
- .filter((word) => word.trim().length > 0)
13
- .map((word) => word.toLocaleLowerCase());
7
+ const extractWords = (file, locale) => {
8
+ const lines = file.split(/\r?\n/g);
9
+ const firstWordIndex = (0, findFirstWordIndex_1.default)(lines, locale);
10
+ const words = [];
11
+ for (let i = firstWordIndex; i < lines.length; ++i) {
12
+ const trimmed = lines[i].trim();
13
+ if (trimmed.length > 0) {
14
+ words.push(trimmed.toLocaleLowerCase());
15
+ }
16
+ }
14
17
  return words;
15
18
  };
16
19
  exports.default = extractWords;
@@ -1,2 +1,2 @@
1
- declare const findFirstWordIndex: (lines: string[]) => number;
1
+ declare const findFirstWordIndex: (lines: string[], locale: string) => number;
2
2
  export default findFirstWordIndex;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const findFirstWordIndex = (lines) => {
3
+ const findFirstWordIndex = (lines, locale) => {
4
4
  const firstWordIndex = lines.findIndex((line, index) => {
5
5
  const nextLine = line[index + 1] || '';
6
- const isNextLineInOrder = line.localeCompare(nextLine) === 1;
6
+ const isNextLineInOrder = line.localeCompare(nextLine, locale) > 0;
7
7
  const hasWhitespace = Boolean(line.match(/\s/));
8
8
  const isEmpty = line.trim().length === 0;
9
9
  return !isEmpty && !hasWhitespace && isNextLineInOrder;
@@ -0,0 +1,2 @@
1
+ declare const getTempFilepath: () => string;
2
+ export default getTempFilepath;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const os_1 = __importDefault(require("os"));
7
+ const path_1 = __importDefault(require("path"));
8
+ const getHash_1 = __importDefault(require("./getHash"));
9
+ const OUTPUT_DIRECTORY = path_1.default.resolve(os_1.default.homedir(), '.scrabble-solver');
10
+ const getTempFilepath = () => {
11
+ const filename = `${(0, getHash_1.default)()}.txt`;
12
+ return path_1.default.join(OUTPUT_DIRECTORY, filename);
13
+ };
14
+ exports.default = getTempFilepath;
@@ -1,2 +1,2 @@
1
- declare const getTxtWordList: (url: string) => Promise<string[]>;
1
+ declare const getTxtWordList: (url: string, locale: string) => Promise<string[]>;
2
2
  export default getTxtWordList;