@scrabble-solver/scrabble-solver 2.15.3 → 2.15.5

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 (85) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +20 -19
  3. package/.next/cache/.rscinfo +1 -0
  4. package/.next/cache/.tsbuildinfo +1 -1
  5. package/.next/cache/eslint/.cache_8dgz12 +1 -1
  6. package/.next/cache/webpack/client-production/0.pack +0 -0
  7. package/.next/cache/webpack/client-production/index.pack +0 -0
  8. package/.next/cache/webpack/client-production/index.pack.old +0 -0
  9. package/.next/cache/webpack/edge-server-production/0.pack +0 -0
  10. package/.next/cache/webpack/edge-server-production/index.pack +0 -0
  11. package/.next/cache/webpack/edge-server-production/index.pack.old +0 -0
  12. package/.next/cache/webpack/server-production/0.pack +0 -0
  13. package/.next/cache/webpack/server-production/index.pack +0 -0
  14. package/.next/cache/webpack/server-production/index.pack.old +0 -0
  15. package/.next/diagnostics/build-diagnostics.json +6 -0
  16. package/.next/diagnostics/framework.json +1 -0
  17. package/.next/images-manifest.json +1 -1
  18. package/.next/next-minimal-server.js.nft.json +1 -1
  19. package/.next/next-server.js.nft.json +1 -1
  20. package/.next/prerender-manifest.json +1 -1
  21. package/.next/required-server-files.json +1 -1
  22. package/.next/routes-manifest.json +1 -1
  23. package/.next/server/chunks/331.js +4 -4
  24. package/.next/server/chunks/577.js +1 -1
  25. package/.next/server/chunks/67.js +1 -1
  26. package/.next/server/chunks/964.js +1 -0
  27. package/.next/server/functions-config-manifest.json +1 -1
  28. package/.next/server/middleware-build-manifest.js +1 -1
  29. package/.next/server/pages/404.html +1 -1
  30. package/.next/server/pages/500.html +1 -1
  31. package/.next/server/pages/_app.js +1 -1
  32. package/.next/server/pages/_app.js.nft.json +1 -1
  33. package/.next/server/pages/_document.js +1 -1
  34. package/.next/server/pages/_document.js.nft.json +1 -1
  35. package/.next/server/pages/_error.js +1 -1
  36. package/.next/server/pages/_error.js.nft.json +1 -1
  37. package/.next/server/pages/api/dictionary/[locale]/[word].js +2 -2
  38. package/.next/server/pages/api/dictionary/[locale]/[word].js.nft.json +1 -1
  39. package/.next/server/pages/api/dictionary/[locale].js +1 -1
  40. package/.next/server/pages/api/dictionary/[locale].js.nft.json +1 -1
  41. package/.next/server/pages/api/solve.js +1 -1
  42. package/.next/server/pages/api/solve.js.nft.json +1 -1
  43. package/.next/server/pages/api/verify.js +1 -1
  44. package/.next/server/pages/api/verify.js.nft.json +1 -1
  45. package/.next/server/pages/api/visit.js +1 -1
  46. package/.next/server/pages/api/visit.js.nft.json +1 -1
  47. package/.next/server/pages/index.html +1 -1
  48. package/.next/server/pages/index.js +1 -1
  49. package/.next/server/pages/index.js.nft.json +1 -1
  50. package/.next/server/pages/index.json +1 -1
  51. package/.next/static/_5S9YxXzM3OLRGGJe0qQv/_buildManifest.js +1 -0
  52. package/.next/static/chunks/framework-f09231abc7b3626e.js +1 -0
  53. package/.next/static/chunks/main-6e8e32bd2f4e331c.js +1 -0
  54. package/.next/static/chunks/pages/404-f6889310c253b0bd.js +1 -0
  55. package/.next/static/chunks/pages/_app-c960503f8645e1de.js +1 -0
  56. package/.next/static/chunks/pages/_error-3e47b8dbcedf0fd0.js +1 -0
  57. package/.next/static/chunks/pages/index-817f862d5980cebe.js +1 -0
  58. package/.next/static/chunks/webpack-a2ab570fe85c6bb6.js +1 -0
  59. package/.next/static/css/a7aa574f03b29f75.css +2 -0
  60. package/.next/trace +23 -45
  61. package/package.json +13 -13
  62. package/public/logo.svg +1 -1
  63. package/src/components/Board/Board.tsx +1 -0
  64. package/src/components/Button/Button.module.scss +16 -1
  65. package/src/components/Button/Button.tsx +3 -0
  66. package/src/components/Button/Link.tsx +3 -0
  67. package/src/components/PlainTiles/Tile.tsx +1 -1
  68. package/src/components/Radio/Radio.module.scss +14 -20
  69. package/src/components/Radio/Radio.tsx +3 -1
  70. package/src/components/Results/Results.module.scss +0 -12
  71. package/src/modals/MenuModal/MenuModal.tsx +11 -3
  72. package/src/state/sagas.ts +13 -3
  73. package/.next/server/chunks/270.js +0 -1
  74. package/.next/server/chunks/font-manifest.json +0 -1
  75. package/.next/server/font-manifest.json +0 -1
  76. package/.next/static/chunks/framework-a6ccb1a1ec9e2929.js +0 -1
  77. package/.next/static/chunks/main-28993fe925720280.js +0 -1
  78. package/.next/static/chunks/pages/404-265f7e92b4e2919b.js +0 -1
  79. package/.next/static/chunks/pages/_app-894a153491b0a81b.js +0 -1
  80. package/.next/static/chunks/pages/_error-640134e57f4bbbed.js +0 -1
  81. package/.next/static/chunks/pages/index-2fcc3538f2186958.js +0 -1
  82. package/.next/static/chunks/webpack-c4acd79e87956a0e.js +0 -1
  83. package/.next/static/css/ac3349339fcf58f2.css +0 -2
  84. package/.next/static/pp7rx7itNrkJG_c4Q9klh/_buildManifest.js +0 -1
  85. /package/.next/static/{pp7rx7itNrkJG_c4Q9klh → _5S9YxXzM3OLRGGJe0qQv}/_ssgManifest.js +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/scrabble-solver",
3
- "version": "2.15.3",
3
+ "version": "2.15.5",
4
4
  "description": "Scrabble Solver 2 - App",
5
5
  "engines": {
6
6
  "node": ">=16"
@@ -30,18 +30,18 @@
30
30
  "@floating-ui/react": "^0.26.25",
31
31
  "@kamilmielnik/trie": "^3.1.0",
32
32
  "@reduxjs/toolkit": "^2.3.0",
33
- "@scrabble-solver/configs": "^2.15.3",
34
- "@scrabble-solver/constants": "^2.15.3",
35
- "@scrabble-solver/dictionaries": "^2.15.3",
36
- "@scrabble-solver/logger": "^2.15.3",
37
- "@scrabble-solver/solver": "^2.15.3",
38
- "@scrabble-solver/types": "^2.15.3",
39
- "@scrabble-solver/word-definitions": "^2.15.3",
33
+ "@scrabble-solver/configs": "^2.15.5",
34
+ "@scrabble-solver/constants": "^2.15.5",
35
+ "@scrabble-solver/dictionaries": "^2.15.5",
36
+ "@scrabble-solver/logger": "^2.15.5",
37
+ "@scrabble-solver/solver": "^2.15.5",
38
+ "@scrabble-solver/types": "^2.15.5",
39
+ "@scrabble-solver/word-definitions": "^2.15.5",
40
40
  "classnames": "^2.5.1",
41
41
  "env-cmd": "^10.1.0",
42
42
  "include-media": "^2.0.0",
43
43
  "include-media-query-builder": "^1.1.0",
44
- "next": "^14.2.15",
44
+ "next": "^15.0.1",
45
45
  "normalize.css": "^8.0.1",
46
46
  "react": "^18.3.1",
47
47
  "react-cool-onclickoutside": "^1.7.0",
@@ -61,8 +61,8 @@
61
61
  },
62
62
  "devDependencies": {
63
63
  "@svgr/webpack": "^8.1.0",
64
- "@types/classnames": "^2.3.1",
65
- "@types/react": "^18.3.11",
64
+ "@types/classnames": "^2.3.4",
65
+ "@types/react": "^18.3.12",
66
66
  "@types/react-dom": "^18.3.1",
67
67
  "@types/react-highlight-words": "^0.20.0",
68
68
  "@types/react-modal": "^3.16.3",
@@ -71,7 +71,7 @@
71
71
  "@types/react-window": "^1.8.8",
72
72
  "@types/redux": "^3.6.31",
73
73
  "@types/redux-saga": "^0.10.5",
74
- "sass": "^1.80.3"
74
+ "sass": "^1.80.4"
75
75
  },
76
- "gitHead": "2f49efd33a1ce011d6916fc00d003663f0a75ca3"
76
+ "gitHead": "fcb31b606fe7fb501c7e00a6c00a676fb7d2174f"
77
77
  }
package/public/logo.svg CHANGED
@@ -1,4 +1,4 @@
1
- <svg viewBox="0 0 682 166" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
1
+ <svg fill="#222" viewBox="0 0 682 166" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
2
2
  <g transform="rotate(0, 40, 40)">
3
3
  <path d="m 12,0 h 56 c 6.648,0 12,5.352 12,12 v 56 c 0,6.648 -5.352,12 -12,12 H 12 C 5.352,80 0,74.648 0,68 V 12 C 0,5.352 5.352,0 12,0 Z" fill="#efe3ae" />
4
4
  <path d="m 51.320312,47.628907 q 0,3.046875 -1.476562,5.296875 -1.476563,2.25 -4.3125,3.46875 -2.8125,1.21875 -6.84375,1.21875 -1.78125,0 -3.492188,-0.234375 -1.6875,-0.234375 -3.257812,-0.679687 -1.546875,-0.46875 -2.953125,-1.148438 v -6.75 q 2.4375,1.078125 5.0625,1.945313 2.625,0.867187 5.203125,0.867187 1.78125,0 2.859375,-0.46875 1.101562,-0.46875 1.59375,-1.289062 0.492187,-0.820313 0.492187,-1.875 0,-1.289063 -0.867187,-2.203125 Q 42.460937,44.863282 40.9375,44.066407 39.4375,43.269532 37.539062,42.35547 36.34375,41.79297 34.9375,40.996095 33.53125,40.175782 32.265625,39.003907 31,37.832032 30.179687,36.16797 q -0.796875,-1.6875 -0.796875,-4.03125 0,-3.070313 1.40625,-5.25 1.40625,-2.179688 4.007813,-3.328125 2.625,-1.171875 6.1875,-1.171875 2.671875,0 5.085937,0.632812 2.4375,0.609375 5.085938,1.78125 L 48.8125,30.44922 q -2.367188,-0.960938 -4.242188,-1.476563 -1.875,-0.539062 -3.820312,-0.539062 -1.359375,0 -2.320313,0.445312 -0.960937,0.421875 -1.453125,1.21875 -0.492187,0.773438 -0.492187,1.804688 0,1.21875 0.703125,2.0625 0.726562,0.820312 2.15625,1.59375 1.453125,0.773437 3.609375,1.804687 2.625,1.242188 4.476562,2.601563 1.875,1.335937 2.882813,3.164062 1.007812,1.804688 1.007812,4.5 z" />
@@ -178,6 +178,7 @@ const Board: FunctionComponent<Props> = ({ className }) => {
178
178
  position: floatingFocus.strategy,
179
179
  top: floatingFocus.y + cellSize,
180
180
  left: floatingFocus.x,
181
+ display: floatingFocus.isPositioned ? 'block' : 'none',
181
182
  width: cellSize,
182
183
  height: cellSize,
183
184
  opacity: hasFocus ? 1 : 0,
@@ -60,8 +60,13 @@
60
60
  .content {
61
61
  display: flex;
62
62
  align-items: center;
63
+ justify-content: center;
63
64
  gap: var(--spacing--l);
64
65
  line-height: var(--button--icon--size);
66
+
67
+ @include media('<l') {
68
+ gap: var(--spacing--m);
69
+ }
65
70
  }
66
71
 
67
72
  .icon {
@@ -74,8 +79,18 @@
74
79
  .label {
75
80
  @include ellipsis;
76
81
 
77
- flex: 1;
78
82
  font-size: var(--font--size--h3);
79
83
  transition: var(--transition);
80
84
  text-align: start;
81
85
  }
86
+
87
+ .wide {
88
+ .content {
89
+ justify-content: normal;
90
+ gap: var(--spacing--l);
91
+ }
92
+
93
+ .label {
94
+ flex: 1;
95
+ }
96
+ }
@@ -12,6 +12,7 @@ interface Props extends ButtonHTMLAttributes<HTMLButtonElement> {
12
12
  iconClassName?: string;
13
13
  tooltip?: ReactNode;
14
14
  variant?: 'default' | 'primary';
15
+ wide?: boolean;
15
16
  }
16
17
 
17
18
  const Button: FunctionComponent<Props> = ({
@@ -21,6 +22,7 @@ const Button: FunctionComponent<Props> = ({
21
22
  iconClassName,
22
23
  tooltip,
23
24
  variant = 'default',
25
+ wide,
24
26
  ...props
25
27
  }) => {
26
28
  return (
@@ -29,6 +31,7 @@ const Button: FunctionComponent<Props> = ({
29
31
  className={classNames(styles.button, className, {
30
32
  [styles.default]: variant === 'default',
31
33
  [styles.primary]: variant === 'primary',
34
+ [styles.wide]: wide,
32
35
  })}
33
36
  type="button"
34
37
  {...props}
@@ -12,6 +12,7 @@ interface Props extends AnchorHTMLAttributes<HTMLAnchorElement> {
12
12
  iconClassName?: string;
13
13
  tooltip?: ReactNode;
14
14
  variant?: 'default' | 'primary';
15
+ wide?: boolean;
15
16
  }
16
17
 
17
18
  const Link: FunctionComponent<Props> = ({
@@ -21,6 +22,7 @@ const Link: FunctionComponent<Props> = ({
21
22
  iconClassName,
22
23
  tooltip,
23
24
  variant = 'default',
25
+ wide,
24
26
  ...props
25
27
  }) => {
26
28
  return (
@@ -29,6 +31,7 @@ const Link: FunctionComponent<Props> = ({
29
31
  className={classNames(styles.button, className, {
30
32
  [styles.default]: variant === 'default',
31
33
  [styles.primary]: variant === 'primary',
34
+ [styles.wide]: wide,
32
35
  })}
33
36
  {...props}
34
37
  >
@@ -12,7 +12,7 @@ interface Props {
12
12
  }
13
13
 
14
14
  const Tile: FunctionComponent<Props> = ({ character, className, color, points, size, transform, x, y }) => (
15
- <g className={className} transform={transform}>
15
+ <g className={className} fill="#222" transform={transform}>
16
16
  <rect fill={color} height={size} rx={size * 0.15} width={size} x={x} y={y} />
17
17
 
18
18
  <text
@@ -16,10 +16,8 @@ $radio-box-size: $radio-size + 2 * $radio-inner-border;
16
16
  cursor: pointer;
17
17
 
18
18
  &.checked {
19
- .icon {
20
- &::after {
21
- background-color: var(--color--primary);
22
- }
19
+ .iconContent {
20
+ background-color: var(--color--primary);
23
21
  }
24
22
  }
25
23
 
@@ -40,28 +38,24 @@ $radio-box-size: $radio-size + 2 * $radio-inner-border;
40
38
  }
41
39
 
42
40
  .icon {
41
+ display: flex;
42
+ justify-content: center;
43
+ align-items: center;
43
44
  flex: 0 0 auto;
44
- position: relative;
45
45
  width: $radio-box-size;
46
46
  height: $radio-box-size;
47
- border-radius: 50%;
48
47
  border: $radio-inner-border solid var(--color--primary);
49
- pointer-events: none;
50
-
51
- &::after {
52
- content: ' ';
53
- position: absolute;
54
- top: 50%;
55
- left: 50%;
56
- transform: translate(-50%, -50%);
57
- width: $radio-inner-size;
58
- height: $radio-inner-size;
59
- background-color: transparent;
60
- border-radius: 50%;
61
- transition: var(--transition);
62
- }
48
+ border-radius: 50%;
63
49
  }
64
50
 
65
51
  .content {
66
52
  flex: 1;
67
53
  }
54
+
55
+ .iconContent {
56
+ width: $radio-inner-size;
57
+ height: $radio-inner-size;
58
+ background-color: transparent;
59
+ border-radius: 50%;
60
+ transition: var(--transition);
61
+ }
@@ -30,7 +30,9 @@ const Radio: FunctionComponent<Props> = ({ checked, children, className, disable
30
30
  onChange={onChange}
31
31
  />
32
32
 
33
- <div aria-hidden="true" className={styles.icon} role="img" />
33
+ <div aria-hidden="true" className={styles.icon} role="img">
34
+ <div className={styles.iconContent} />
35
+ </div>
34
36
 
35
37
  <div className={styles.content}>{children}</div>
36
38
  </label>
@@ -30,7 +30,6 @@ $row-padding-horizontal: calc(var(--spacing--m) + var(--spacing--s));
30
30
  .list {
31
31
  @include scrollbars;
32
32
 
33
- scrollbar-gutter: stable;
34
33
  transition: var(--transition);
35
34
 
36
35
  &.outdated {
@@ -75,17 +74,6 @@ $row-padding-horizontal: calc(var(--spacing--m) + var(--spacing--s));
75
74
  background-color: var(--color--primary);
76
75
  color: var(--color--primary--opposite);
77
76
  }
78
-
79
- &.points {
80
- @include scrollbars;
81
-
82
- overflow-y: scroll;
83
-
84
- &,
85
- &:hover {
86
- scrollbar-color: transparent transparent;
87
- }
88
- }
89
77
  }
90
78
 
91
79
  .headerButtonLabel {
@@ -37,16 +37,23 @@ const MenuModal: FunctionComponent<Props> = ({
37
37
  aria-label={translate('remaining-tiles')}
38
38
  className={styles.button}
39
39
  Icon={Sack}
40
+ wide
40
41
  onClick={onShowRemainingTiles}
41
42
  >
42
43
  {translate('remaining-tiles')}
43
44
  </Button>
44
45
 
45
- <Button aria-label={translate('words')} className={styles.button} Icon={CardChecklist} onClick={onShowWords}>
46
+ <Button aria-label={translate('words')} className={styles.button} Icon={CardChecklist} wide onClick={onShowWords}>
46
47
  {translate('words')}
47
48
  </Button>
48
49
 
49
- <Button aria-label={translate('dictionary')} className={styles.button} Icon={BookHalf} onClick={onShowDictionary}>
50
+ <Button
51
+ aria-label={translate('dictionary')}
52
+ className={styles.button}
53
+ Icon={BookHalf}
54
+ wide
55
+ onClick={onShowDictionary}
56
+ >
50
57
  {translate('dictionary')}
51
58
  </Button>
52
59
 
@@ -57,11 +64,12 @@ const MenuModal: FunctionComponent<Props> = ({
57
64
  Icon={Github}
58
65
  rel="noopener noreferrer"
59
66
  target="_blank"
67
+ wide
60
68
  >
61
69
  {translate('github')}
62
70
  </Button.Link>
63
71
 
64
- <Button aria-label={translate('settings')} className={styles.button} Icon={Cog} onClick={onShowSettings}>
72
+ <Button aria-label={translate('settings')} className={styles.button} Icon={Cog} wide onClick={onShowSettings}>
65
73
  <div className={styles.settings}>
66
74
  <div className={styles.settingsLabel}>{translate('settings')}</div>
67
75
  <Icon aria-hidden="true" className={styles.flag} role="img" />
@@ -103,9 +103,17 @@ function* onDictionarySubmit(): AnyGenerator {
103
103
 
104
104
  try {
105
105
  const wordDefinitions = yield call(memoizedFindWordDefinitions, locale, word);
106
- yield put(dictionarySlice.actions.submitSuccess(wordDefinitions));
106
+ const { input: currentWord } = yield select(selectDictionary);
107
+
108
+ if (word === currentWord) {
109
+ yield put(dictionarySlice.actions.submitSuccess(wordDefinitions));
110
+ }
107
111
  } catch (error) {
108
- yield put(dictionarySlice.actions.submitFailure(error));
112
+ const { input: currentWord } = yield select(selectDictionary);
113
+
114
+ if (word === currentWord) {
115
+ yield put(dictionarySlice.actions.submitFailure(error));
116
+ }
109
117
  }
110
118
  }
111
119
 
@@ -159,7 +167,9 @@ function* onLocaleChange({ payload: locale }: PayloadAction<Locale>): AnyGenerat
159
167
  function* onResultCandidateChange({ payload: result }: PayloadAction<Result | null>): AnyGenerator {
160
168
  if (result) {
161
169
  const locale: Locale = yield select(selectLocale);
162
- yield put(dictionarySlice.actions.changeInput(result.words.join(LOCALE_FEATURES[locale].separator)));
170
+ const uniqueWords = Array.from(new Set(result.words));
171
+ const input = uniqueWords.join(LOCALE_FEATURES[locale].separator);
172
+ yield put(dictionarySlice.actions.changeInput(input));
163
173
  yield put(dictionarySlice.actions.submit());
164
174
  }
165
175
  }
@@ -1 +0,0 @@
1
- "use strict";exports.id=270,exports.ids=[270],exports.modules={6835:(e,t)=>{Object.defineProperty(t,"l",{enumerable:!0,get:function(){return function e(t,r){return r in t?t[r]:"then"in t&&"function"==typeof t.then?t.then(t=>e(t,r)):"function"==typeof t&&"default"===r?t:void 0}}})},8236:(e,t,r)=>{r.d(t,{Z:()=>i});let i=e=>({origin:e.headers.origin,referer:e.headers.referer,userAgent:e.headers["user-agent"],xForwardedFor:e.headers["x-forwarded-for"],xRealIp:e.headers["x-real-ip"]})},1631:(e,t)=>{var r;Object.defineProperty(t,"x",{enumerable:!0,get:function(){return r}}),function(e){e.PAGES="PAGES",e.PAGES_API="PAGES_API",e.APP_PAGE="APP_PAGE",e.APP_ROUTE="APP_ROUTE"}(r||(r={}))},9150:(e,t,r)=>{e.exports=r(145)},8436:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.VOWELS=t.CONSONANTS=t.NO_BONUS=t.EMPTY_CELL=t.BONUS_WORD=t.BONUS_CHARACTER=t.BLANK=t.COMMA_LATIN=t.COMMA_ARABIC=void 0,t.COMMA_ARABIC="،",t.COMMA_LATIN=",",t.BLANK=" ",t.BONUS_CHARACTER="BONUS_CHARACTER",t.BONUS_WORD="BONUS_WORD",t.EMPTY_CELL=" ",t.NO_BONUS={characterMultiplier:1,wordMultiplier:1},t.CONSONANTS="bc\xe7ćdfgğhjklłmnń\xf1pqrsşśtvwxzźż".split(""),t.VOWELS="aą\xe4eęio\xf3\xf6u\xfcyı".split("")},1285:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=i(r(2954)),o=r(6452),s=i(r(2048)),l=r(5823),a=r(6137);class u{constructor(){this.cache=new a.LayeredCache,this.downloadDictionaryProxies=Object.fromEntries(Object.values(o.Locale).map(e=>[e,(0,a.createAsyncProxy)(()=>(0,a.downloadDictionary)(e))]))}async get(e){if(this.cache.has(e)){let t=await this.cache.get(e);if(t)return t}return n.default.info("Dictionaries - cache miss",{locale:e}),this.updateDictionary(e)}remove(){s.default.rmdirSync(l.OUTPUT_DIRECTORY,{recursive:!0})}async update(e){let t=e?Object.values(o.Locale):this.getLocalesToUpdate();n.default.info("Dictionaries - update",{force:e,locales:t}),await Promise.all(t.map(e=>this.updateDictionary(e)))}getLocalesToUpdate(){return Object.values(o.Locale).filter(e=>!1!==this.cache.isStale(e))}async updateDictionary(e){n.default.info("Dictionaries - updateDictionary",{locale:e}),s.default.mkdirSync(l.OUTPUT_DIRECTORY,{recursive:!0});let t=this.downloadDictionaryProxies[e],r=await t();return await this.cache.set(e,r),r}}t.default=u},5823:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.OUTPUT_DIRECTORY=t.CACHE_STALE_THRESHOLD=t.DAY=void 0;let n=i(r(9801)),o=i(r(5315));t.DAY=864e5,t.CACHE_STALE_THRESHOLD=1*t.DAY,t.OUTPUT_DIRECTORY=o.default.resolve(n.default.homedir(),".scrabble-solver","dictionaries")},9044:function(e,t,r){var i=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var n=Object.getOwnPropertyDescriptor(t,r);(!n||("get"in n?!t.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,n)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),n=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||i(t,e,r)},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.dictionaries=void 0;let s=o(r(1285));n(r(6137),t),t.dictionaries=new s.default},2812:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=r(9119),o=i(r(2048)),s=r(5823),l=i(r(8638));class a{async get(e){if(!this.has(e))return;let t=(0,l.default)(e),r=await o.default.promises.readFile(t,"utf-8");return n.Trie.deserialize(r)}getLastModifiedTimestamp(e){let t=(0,l.default)(e);if(o.default.existsSync(t))return o.default.statSync(t).mtimeMs}has(e){let t=(0,l.default)(e);return o.default.existsSync(t)}isStale(e){if(!this.has(e))return;let t=this.getLastModifiedTimestamp(e);if(void 0!==t)return Math.abs(t-Date.now())>s.CACHE_STALE_THRESHOLD}async set(e,t){let r=(0,l.default)(e);await o.default.promises.writeFile(r,t.serialize())}}t.default=a},287:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=i(r(494)),o=i(r(2812)),s=i(r(192));class l{constructor(){this.layers=[new s.default,new o.default]}async get(e){let t=this.getLastModifiedLayer(e);if(!t)return Promise.resolve(void 0);let[r,i]=this.layers,n=await t.get(e);return t===i&&void 0!==n&&await r.set(e,n),n}getLastModifiedTimestamp(e){let t=this.getLastModifiedLayer(e);if(t)return t.getLastModifiedTimestamp(e)}has(e){return this.layers.some(t=>t.has(e))}isStale(e){return!!this.layers.some(t=>t.isStale(e))||!!this.layers.every(t=>void 0===t.isStale(e))&&void 0}async set(e,t){let[r,i]=this.layers;await i.set(e,t),await r.set(e,t)}getLastModifiedLayer(e){let[t]=[...this.layers.filter(t=>t.has(e))].sort((0,n.default)(e));return t}}t.default=l},192:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});let i=r(5823);class n{constructor(){this.cache={},this.cacheTimestamps={}}get(e){return Promise.resolve(this.cache[e])}getLastModifiedTimestamp(e){return this.cacheTimestamps[e]}has(e){return void 0!==this.cache[e]}isStale(e){let t=this.getLastModifiedTimestamp(e);if(this.has(e)&&void 0!==t)return Math.abs(t-Date.now())>i.CACHE_STALE_THRESHOLD}set(e,t){return this.cacheTimestamps[e]=Date.now(),this.cache[e]=t,Promise.resolve()}}t.default=n},6554:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=e=>{let t=null;return async()=>{if(t)return t;try{return t=e(),await t}finally{t=null}}}},494:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=e=>(t,r)=>{let i=t.getLastModifiedTimestamp(e),n=r.getLastModifiedTimestamp(e);return i===n?0:void 0===i?1:void 0===n?-1:n-i}},1281:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=r(9119),o=i(r(2954)),s=r(1585),l=async e=>{o.default.info("downloadDictionary",{locale:e});let t=await (0,s.getWordList)(e);return o.default.info("downloadDictionary - success",{locale:e}),n.Trie.fromArray(t)};t.default=l},8638:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=i(r(5315)),o=r(5823);t.default=e=>n.default.resolve(o.OUTPUT_DIRECTORY,`${e}.txt`)},6137:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MemoryCache=t.LayeredCache=t.getDictionaryFilepath=t.downloadDictionary=t.DiskCache=t.createCacheTimestampComparator=t.createAsyncProxy=void 0;var n=r(6554);Object.defineProperty(t,"createAsyncProxy",{enumerable:!0,get:function(){return i(n).default}});var o=r(494);Object.defineProperty(t,"createCacheTimestampComparator",{enumerable:!0,get:function(){return i(o).default}});var s=r(2812);Object.defineProperty(t,"DiskCache",{enumerable:!0,get:function(){return i(s).default}});var l=r(1281);Object.defineProperty(t,"downloadDictionary",{enumerable:!0,get:function(){return i(l).default}});var a=r(8638);Object.defineProperty(t,"getDictionaryFilepath",{enumerable:!0,get:function(){return i(a).default}});var u=r(287);Object.defineProperty(t,"LayeredCache",{enumerable:!0,get:function(){return i(u).default}});var d=r(192);Object.defineProperty(t,"MemoryCache",{enumerable:!0,get:function(){return i(d).default}})},8793:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.OUTPUT_DIRECTORY=void 0;let n=i(r(9801)),o=i(r(5315));t.OUTPUT_DIRECTORY=o.default.resolve(n.default.homedir(),".scrabble-solver","logs")},2954:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(6730);Object.defineProperty(t,"default",{enumerable:!0,get:function(){return i(n).default}})},6730:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=i(r(5315)),o=r(7773),s=r(8793),l=(0,o.createLogger)({level:"info",format:o.format.combine(o.format.timestamp({format:"YYYY-MM-DD HH:mm:ss"}),o.format.errors({stack:!0}),o.format.splat(),o.format.json(),o.format.prettyPrint()),transports:[new o.transports.File({filename:n.default.resolve(s.OUTPUT_DIRECTORY,"error.log"),level:"error"}),new o.transports.File({filename:n.default.resolve(s.OUTPUT_DIRECTORY,"all.log")}),new o.transports.Console({format:o.format.combine(o.format.colorize(),o.format.simple()),level:"error"})]});t.default=l},3017:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=r(8436),o=i(r(902)),s=i(r(580));class l{static create(e){return l.fromStringArray(Array(e).fill(Array(e).fill(" ").join("")))}static fromJson(e){return new l({rows:e.map(e=>e.map(o.default.fromJson))})}static fromStringArray(e){return new l({rows:e.map((e,t)=>e.split("").map((e,r)=>new o.default({isEmpty:!e||e===n.EMPTY_CELL,tile:e===n.EMPTY_CELL?s.default.Null:new s.default({character:e}),x:r,y:t})))})}constructor({rows:e}){this.rows=e,this.columnsCount=e[0].length,this.rowsCount=e.length}get center(){let e=Math.floor(this.columnsCount/2),t=Math.floor(this.rowsCount/2);return this.rows[t][e]}clone(){return new l({rows:this.rows.map(e=>e.map(e=>e.clone()))})}collides(e){return this.collidesUp(e)||this.collidesDown(e)||this.collidesLeft(e)||this.collidesRight(e)}collidesDown({x:e,y:t}){return t<this.rowsCount-1&&!this.rows[t+1][e].isEmpty}collidesLeft({x:e,y:t}){return e>0&&!this.rows[t][e-1].isEmpty}collidesRight({x:e,y:t}){return e<this.columnsCount-1&&!this.rows[t][e+1].isEmpty}collidesUp({x:e,y:t}){return t>0&&!this.rows[t-1][e].isEmpty}equals(e){return this.columnsCount===e.columnsCount&&this.rowsCount===e.rowsCount&&this.rows.every((t,r)=>t.every((t,i)=>t.equals(e.rows[r][i])))}getBlanksCount(){return this.rows.reduce((e,t)=>e+t.reduce((e,t)=>e+(t.tile.isBlank?1:0),0),0)}getColumn(e){return this.rows.map(t=>t[e])}getRow(e){return this.rows[e]}getTilesCount(){return this.rows.reduce((e,t)=>e+t.reduce((e,t)=>e+(t.hasTile()?1:0),0),0)}getWords(){let e=[];for(let t=0;t<this.columnsCount;++t){let r=[];for(let e=0;e<this.rowsCount;++e)r.push(this.rows[e][t]);e.push(r)}let t=new l({rows:e});return this.toString().split("\n").concat(t.toString().split("\n")).flatMap(e=>e.replaceAll(/\s+/g,n.EMPTY_CELL).split(" ")).filter(e=>e.length>1)}isEmpty(){return this.rows.every(e=>e.every(({isEmpty:e})=>e))}toJson(){return this.rows.map(e=>e.map(e=>e.toJson()))}toString(){return this.rows.map(e=>e.map(String).join("")).join("\n")}updateCell(e,t,r){this.rows[t][e]=r(this.rows[t][e])}updateRow(e,t){this.rows[e]=t(this.rows[e])}}t.default=l},8508:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isBoardJson=void 0;let i=r(6508);t.isBoardJson=e=>{if(!Array.isArray(e))return!1;for(let t of e){if(!Array.isArray(e))return!1;for(let e of t)if(!(0,i.isCellJson)(e))return!1}return!0}},769:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0});class r{constructor({multiplier:e,score:t,x:r,y:i}){this.multiplier=e,this.score=t,this.x=r,this.y=i}canApply(e,t){return t.isEmpty&&this.matchesCellCoordinates(t)}matchesCellCoordinates(e){return this.x===e.x&&this.y===e.y}toJson(){return{multiplier:this.multiplier,score:this.score,type:this.type,x:this.x,y:this.y}}get value(){return{characterMultiplier:1,wordMultiplier:1}}}t.default=r},902:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=i(r(580));class o{static fromJson(e){return new o({isEmpty:e.isEmpty,tile:n.default.fromJson(e.tile),x:e.x,y:e.y})}constructor({isEmpty:e=!0,tile:t=n.default.Null,x:r,y:i}){this.isEmpty=e,this.tile=t,this.x=r,this.y=i}clone(){return new o({isEmpty:this.isEmpty,tile:this.tile.clone(),x:this.x,y:this.y})}equals(e){return this.x===e.x&&this.y===e.y&&this.isEmpty===e.isEmpty&&this.tile.equals(e.tile)}hasTile(){return this.tile!==n.default.Null}isCandidate(){return this.isEmpty&&this.hasTile()}toJson(){return{isEmpty:this.isEmpty,tile:this.tile.toJson(),x:this.x,y:this.y}}toString(){return this.tile.toString()}}t.default=o},6508:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.isCellJson=void 0;let n=i(r(3518)),o=r(2298);t.isCellJson=e=>(0,n.default)(e)&&"boolean"==typeof e.isEmpty&&((0,o.isTileJson)(e.tile)||null===e.tile)&&"number"==typeof e.x&&"number"==typeof e.y},5699:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=r(8436),o=i(r(769));class s extends o.default{constructor(){super(...arguments),this.type=n.BONUS_CHARACTER}canApply(e,t){return super.canApply(e,t)&&this.matchesCellTileScore(e,t)}matchesCellTileScore(e,t){return void 0===this.score||this.score===e.pointsMap[t.tile.character]}get value(){return{characterMultiplier:this.multiplier,wordMultiplier:1}}}t.default=s},8725:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=r(8436),o=i(r(5699)),s=i(r(9667));class l{static fromJson(e){return new l(e)}constructor(e){this.bonuses=a(e),this.config=e,this.pointsMap=d(this.config)}get alphabet(){return u(this.config)}get bingoScore(){return this.config.bingoScore}get blankScore(){return this.config.blankScore}get blanksCount(){return this.config.blanksCount}get boardSize(){return this.config.boardSize}get game(){return this.config.game}get locale(){return this.config.locale}get twoCharacterTiles(){return this.config.tiles.filter(e=>2===e.character.length).map(e=>e.character)}getCellBonus(e){return this.bonuses.find(t=>t.matchesCellCoordinates(e))}getCellBonusValue(e){return this.getCellBonus(e)?.value||n.NO_BONUS}getCharacterPoints(e){return null===e?void 0:e===n.BLANK?this.blankScore:this.pointsMap[e]}getTwoCharacterTileByPrefix(e){if(1===e.length)return this.twoCharacterTiles.find(t=>t.startsWith(e))}getTilePoints(e){if(null!==e)return e.isBlank?this.blankScore:this.getCharacterPoints(e.character)}hasCharacter(e){return e in this.pointsMap}isTwoCharacterTilePrefix(e){return void 0!==this.getTwoCharacterTileByPrefix(e)}get rackSize(){return this.config.rackSize}get tiles(){return this.config.tiles}toJson(){return this.config}}let a=e=>e.bonuses.map(e=>{if(e.type===n.BONUS_CHARACTER)return new o.default(e);if(e.type===n.BONUS_WORD)return new s.default(e);throw Error(`Unsupported Bonus type: "${e.type}"`)}),u=e=>e.tiles.map(({character:e})=>e),d=e=>e.tiles.reduce((e,{character:t,score:r})=>({...e,[t]:r}),{});t.default=l},9238:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=i(r(3600));class o extends n.default{constructor(e){super(e.board,e.cells),this.collisions=e.getCollisions()}getCollisions(){return this.collisions}}t.default=o},7659:(e,t)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.isGame=void 0,function(e){e.Kelimelik="kelimelik",e.Literaki="literaki",e.Scrabble="scrabble",e.SuperScrabble="super-scrabble"}(r||(r={}));let i=Object.values(r);t.isGame=e=>i.includes(e),t.default=r},4405:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=i(r(3600));class o extends n.default{clone(){return new o(this.board,this.cells.map(e=>e.clone()))}getCollisions(){let e=[];return this.cells.filter(e=>e.isEmpty&&(this.board.collidesUp(e)||this.board.collidesDown(e))).forEach(t=>{let r=this.board.getColumn(t.x),i=t.y-1;for(;i>=0&&r[i].hasTile();)--i;let o=r.slice(i+1,t.y);for(i=t.y+1;i<r.length&&r[i].hasTile();)++i;let s=r.slice(t.y+1,i),l=[...o,t,...s];if(l.length>1){let t=new n.default(this.board,l);e.push(t)}}),e}}t.default=o},8044:(e,t)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.isLocale=void 0,function(e){e.DE_DE="de-DE",e.EN_GB="en-GB",e.EN_US="en-US",e.ES_ES="es-ES",e.FA_IR="fa-IR",e.FR_FR="fr-FR",e.PL_PL="pl-PL",e.RO_RO="ro-RO",e.TR_TR="tr-TR"}(r||(r={}));let i=Object.values(r);t.isLocale=e=>i.includes(e),t.default=r},3600:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0});class r{constructor(e,t){this.board=e,this.cells=t}canBePlaced(e){let t=this.getEmptyCellsCount();return t>=1&&t<=e.rackSize&&(this.hasAtLeast1NonEmptyCell()||this.collides()||this.goesThroughBoardCenter()&&this.board.isEmpty())}clone(){return new r(this.board,this.cells.map(e=>e.clone()))}collides(){return this.cells.some(e=>e.isEmpty&&this.board.collides(e))}getIndexOfFirstCellWithoutTile(){return this.cells.findIndex(e=>!e.hasTile())}getEmptyCellsCount(){return this.cells.filter(e=>e.isEmpty).length}goesThroughBoardCenter(){return this.cells.some(e=>e.x===this.board.center.x&&e.y===this.board.center.y&&e.isEmpty)}hasAtLeast1EmptyCell(){return this.cells.some(e=>e.isEmpty)}hasAtLeast1NonEmptyCell(){return this.cells.some(e=>!e.isEmpty)}getCollisions(){return[]}toJson(){return{cells:this.cells.map(e=>e.toJson()),collisions:this.getCollisions().map(e=>e.toJson()),word:this.toString()}}toString(){return this.cells.reduce((e,t)=>e+t.toString(),"")}}t.default=r},8211:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=r(8436),o=i(r(902));class s{static fromJson(e){return new s({id:e.id,cells:e.cells.map(o.default.fromJson),collisions:e.collisions.map(e=>e.map(o.default.fromJson)),points:e.points})}constructor({cells:e,id:t,collisions:r,points:i}){let n=c(e);this.blanksCount=l(n).length,this.cells=e,this.collisions=r,this.consonantsCount=a(n).length,this.id=t,this.length=e.length,this.points=i,this.pointsRatio=d(n,i),this.tiles=n,this.tilesCount=n.length,this.vowelsCount=u(n).length,this.word=f(e),this.words=h(e,r),this.wordsCount=1+this.collisions.length}toJson(){return{cells:this.cells.map(e=>e.toJson()),id:this.id,collisions:this.collisions.map(e=>e.map(e=>e.toJson())),points:this.points}}}let l=e=>e.filter(({isBlank:e})=>e),a=e=>e.filter(p),u=e=>e.filter(_),d=(e,t)=>t/e.length,c=e=>e.filter(({isEmpty:e})=>e).map(({tile:e})=>e),f=e=>e.reduce((e,t)=>e+t.toString(),""),h=(e,t)=>[e,...t].map(f),p=({character:e,isBlank:t})=>n.CONSONANTS.includes(e)&&!t,_=({character:e,isBlank:t})=>n.VOWELS.includes(e)&&!t;t.default=s},580:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});let i=r(8436);class n{static fromJson(e){return e?new n({character:e.character,isBlank:e.isBlank}):n.Null}constructor({character:e,isBlank:t=!1}){this.character=e,this.isBlank=t}clone(){return new n({character:this.character,isBlank:this.isBlank})}equals(e){return this.character===e.character&&this.isBlank===e.isBlank}toJson(){return{character:this.character,isBlank:this.isBlank}}toString(){return this.character}}n.Null=Object.freeze({character:i.EMPTY_CELL,isBlank:!1,clone:()=>n.Null,equals:e=>e===n.Null,toJson:()=>null,toString:()=>i.EMPTY_CELL}),t.default=n},2298:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.isTileJson=void 0;let n=i(r(3518));t.isTileJson=e=>(0,n.default)(e)&&"string"==typeof e.character&&"boolean"==typeof e.isBlank},6161:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=i(r(3600));class o extends n.default{clone(){return new o(this.board,this.cells.map(e=>e.clone()))}getCollisions(){let e=[];return this.cells.filter(e=>e.isEmpty&&(this.board.collidesLeft(e)||this.board.collidesRight(e))).forEach(t=>{let r=this.board.getRow(t.y),i=t.x-1;for(;i>=0&&r[i].hasTile();)--i;let o=r.slice(i+1,t.x);for(i=t.x+1;i<r.length&&r[i].hasTile();)++i;let s=r.slice(t.x+1,i),l=[...o,t,...s];if(l.length>1){let t=new n.default(this.board,l);e.push(t)}}),e}}t.default=o},9667:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=r(8436),o=i(r(769));class s extends o.default{constructor(){super(...arguments),this.type=n.BONUS_WORD}get value(){return{characterMultiplier:1,wordMultiplier:this.multiplier}}}t.default=s},3184:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0});class r{static fromJson(e){return e?new r({definitions:e.definitions,exists:e.exists,isAllowed:e.isAllowed,word:e.word}):r.Null}constructor({definitions:e,exists:t,isAllowed:r,word:i}){this.definitions=e,this.exists=t,this.isAllowed=r,this.word=i}toJson(){return{definitions:this.definitions,exists:this.exists,isAllowed:this.isAllowed,word:this.word}}}r.Null=Object.freeze({definitions:[],exists:!1,isAllowed:!1,word:"",toJson:()=>null}),t.default=r},6452:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.isObject=t.isError=t.WordDefinition=t.WordBonus=t.VerticalPattern=t.isTileJson=t.Tile=t.Result=t.Pattern=t.isLocale=t.Locale=t.HorizontalPattern=t.isGame=t.Game=t.FinalPattern=t.Config=t.CharacterBonus=t.isCellJson=t.Cell=t.Bonus=t.isBoardJson=t.Board=void 0;var n=r(3017);Object.defineProperty(t,"Board",{enumerable:!0,get:function(){return i(n).default}});var o=r(8508);Object.defineProperty(t,"isBoardJson",{enumerable:!0,get:function(){return o.isBoardJson}});var s=r(769);Object.defineProperty(t,"Bonus",{enumerable:!0,get:function(){return i(s).default}});var l=r(902);Object.defineProperty(t,"Cell",{enumerable:!0,get:function(){return i(l).default}});var a=r(6508);Object.defineProperty(t,"isCellJson",{enumerable:!0,get:function(){return a.isCellJson}});var u=r(5699);Object.defineProperty(t,"CharacterBonus",{enumerable:!0,get:function(){return i(u).default}});var d=r(8725);Object.defineProperty(t,"Config",{enumerable:!0,get:function(){return i(d).default}});var c=r(9238);Object.defineProperty(t,"FinalPattern",{enumerable:!0,get:function(){return i(c).default}});var f=r(7659);Object.defineProperty(t,"Game",{enumerable:!0,get:function(){return i(f).default}}),Object.defineProperty(t,"isGame",{enumerable:!0,get:function(){return f.isGame}});var h=r(4405);Object.defineProperty(t,"HorizontalPattern",{enumerable:!0,get:function(){return i(h).default}});var p=r(8044);Object.defineProperty(t,"Locale",{enumerable:!0,get:function(){return i(p).default}}),Object.defineProperty(t,"isLocale",{enumerable:!0,get:function(){return p.isLocale}});var _=r(3600);Object.defineProperty(t,"Pattern",{enumerable:!0,get:function(){return i(_).default}});var m=r(8211);Object.defineProperty(t,"Result",{enumerable:!0,get:function(){return i(m).default}});var y=r(580);Object.defineProperty(t,"Tile",{enumerable:!0,get:function(){return i(y).default}});var g=r(2298);Object.defineProperty(t,"isTileJson",{enumerable:!0,get:function(){return g.isTileJson}});var b=r(6161);Object.defineProperty(t,"VerticalPattern",{enumerable:!0,get:function(){return i(b).default}});var v=r(9667);Object.defineProperty(t,"WordBonus",{enumerable:!0,get:function(){return i(v).default}});var O=r(3184);Object.defineProperty(t,"WordDefinition",{enumerable:!0,get:function(){return i(O).default}});var P=r(4075);Object.defineProperty(t,"isError",{enumerable:!0,get:function(){return i(P).default}});var w=r(3518);Object.defineProperty(t,"isObject",{enumerable:!0,get:function(){return i(w).default}})},4075:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=i(r(3518));t.default=e=>!!(0,n.default)(e)&&"string"==typeof e.message},3518:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=e=>"object"==typeof e&&null!==e},8769:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getWordList=void 0;let i=r(6452),n=r(1390),o={[i.Locale.DE_DE]:n.german.getWordList,[i.Locale.EN_GB]:n.english.getWordListGb,[i.Locale.EN_US]:n.english.getWordListUs,[i.Locale.ES_ES]:n.spanish.getWordList,[i.Locale.FA_IR]:n.persian.getWordList,[i.Locale.FR_FR]:n.french.getWordList,[i.Locale.PL_PL]:n.polish.getWordList,[i.Locale.RO_RO]:n.romanian.getWordList,[i.Locale.TR_TR]:n.turkish.getWordList};t.getWordList=e=>o[e]()},1585:function(e,t,r){var i=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var n=Object.getOwnPropertyDescriptor(t,r);(!n||("get"in n?!t.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,n)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),n=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||i(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),t.getWordList=void 0;var o=r(8769);Object.defineProperty(t,"getWordList",{enumerable:!0,get:function(){return o.getWordList}}),n(r(1390),t),n(r(337),t)},9056:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getWordListUs=t.getWordListGb=void 0;let i=r(6452),n=r(337),o=async()=>(0,n.getTxtWordList)("https://www.wordgamedictionary.com/sowpods/download/sowpods.txt",i.Locale.EN_GB);t.getWordListGb=o;let s=async()=>(0,n.getTxtWordList)("https://www.wordgamedictionary.com/twl06/download/twl06.txt",i.Locale.EN_US);t.getWordListUs=s},9637:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getWordList=void 0;let i=r(6452),n=r(337),o=async()=>{let e=await (0,n.getTxtWordList)("https://raw.githubusercontent.com/Thecoolsim/French-Scrabble-ODS8/main/French%20ODS%20dictionary.txt",i.Locale.FR_FR);return(0,n.latinizeDiacritics)(e)};t.getWordList=o},4342:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getWordList=void 0;let i=r(6452),n=r(337),o=async()=>(0,n.getTxtWordList)("https://raw.githubusercontent.com/hippler/german-wordlist/master/words.txt",i.Locale.DE_DE);t.getWordList=o},1390:function(e,t,r){var i=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var n=Object.getOwnPropertyDescriptor(t,r);(!n||("get"in n?!t.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,n)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&i(t,e,r);return n(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.turkish=t.spanish=t.romanian=t.polish=t.persian=t.french=t.german=t.english=void 0,t.english=o(r(9056)),t.german=o(r(4342)),t.french=o(r(9637)),t.persian=o(r(6855)),t.polish=o(r(7872)),t.romanian=o(r(8311)),t.spanish=o(r(2726)),t.turkish=o(r(2372))},6855:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getWordList=void 0;let i=r(6452),n=r(337),o=async()=>(0,n.getTxtWordList)("https://raw.githubusercontent.com/MansourM/persian-to-persian-dictionary/main/moein/words.txt",i.Locale.FA_IR);t.getWordList=o},7872:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getWordList=void 0;let n=r(8048),o=i(r(2048)),s=r(7360),l=r(337),a=async()=>{let e=(0,l.getTempFilepath)(),t=await u("https://sjp.pl/sl/growy/"),r=await (0,l.downloadFile)(t);await (0,l.unzip)(r,"slowa.txt",e),o.default.unlinkSync(r);let i=o.default.readFileSync(e,"utf-8");return o.default.unlinkSync(e),(0,l.extractWords)(i.toLocaleString(),"pl-PL")};t.getWordList=a;let u=async e=>{let t=await (0,l.downloadHtml)(e),r=await d(t),{href:i}=new s.URL(r,e);return i},d=e=>{let t=(0,n.load)(e),r=Array.from(t("a")).map(e=>t(e).attr("href")).filter(Boolean).find(e=>e.endsWith(".zip"));if(void 0===r)throw Error("Cannot find link to zip file on the page");return r}},8311:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getWordList=void 0;let i=r(6452),n=r(337),o=async()=>{let e=await (0,n.getTxtWordList)("https://raw.githubusercontent.com/kamilmielnik/scrabble-dictionaries/master/romanian/loc-5.0.txt",i.Locale.RO_RO);return(0,n.latinizeDiacritics)(e)};t.getWordList=o},2726:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getWordList=void 0;let n=r(6452),o=i(r(1118)),s=r(337),l="---n---",a=async()=>(await (0,s.getTxtWordList)("https://raw.githubusercontent.com/kamilmielnik/scrabble-dictionaries/master/spanish/file-2017.txt",n.Locale.ES_ES)).map(e=>e.replaceAll("\xf1",l)).map(o.default).map(e=>e.replaceAll(l,"\xf1"));t.getWordList=a},2372:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getWordList=void 0;let i=r(6452),n=r(337),o=async()=>(0,n.getTxtWordList)("https://raw.githubusercontent.com/kamilmielnik/scrabble-dictionaries/master/turkish/turkish.txt",i.Locale.TR_TR);t.getWordList=o},920:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=r(6953),o=i(r(2048)),s=i(r(5026));t.default=e=>new Promise((t,r)=>{let i=(0,s.default)(),l=e.startsWith("https")?n.https:n.http,a=o.default.createWriteStream(i);l.get(e,n=>{if(void 0===n.statusCode||n.statusCode>=400){r(Error(`Cannot download file: ${e}`));return}n.on("error",e=>{a.close(),r(e)}),n.on("end",()=>{a.on("finish",()=>{a.close(),t(i)})}),n.pipe(a)}).on("error",e=>{a.close(),r(e)})})},8015:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});let i=r(6953);t.default=e=>new Promise((t,r)=>{(e.startsWith("https")?i.https:i.http).get(e,e=>{let i="";e.setEncoding("utf8"),e.on("data",e=>{i+=e}),e.on("end",()=>{t(i)}),e.on("error",r)})})},9759:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=i(r(7669));t.default=(e,t)=>{let r=e.split(/\r?\n/g),i=(0,n.default)(r,t),o=[];for(let e=i;e<r.length;++e){let t=r[e].trim();t.length>0&&o.push(t.toLocaleLowerCase())}return o}},7669:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=(e,t)=>{let r=e.findIndex((e,r)=>{let i=e[r+1]||"",n=e.localeCompare(i,t)>0,o=!!e.match(/\s/);return 0!==e.trim().length&&!o&&n});if(void 0===r)throw Error("Cannot find index of the first word in the file");return r}},3938:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=i(r(4770));t.default=(e=8)=>n.default.randomBytes(e).toString("hex")},5026:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=i(r(9801)),o=i(r(5315)),s=i(r(3938)),l=o.default.resolve(n.default.homedir(),".scrabble-solver");t.default=()=>{let e=`${(0,s.default)()}.txt`;return o.default.join(l,e)}},8029:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=i(r(2048)),o=i(r(920)),s=i(r(9759)),l=async(e,t)=>{let r=await (0,o.default)(e),i=n.default.readFileSync(r,"utf-8"),l=(0,s.default)(i.toLocaleString(),t);return n.default.unlinkSync(r),l};t.default=l},337:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.unzip=t.unique=t.latinizeDiacritics=t.getTxtWordList=t.getTempFilepath=t.getHash=t.findFirstWordIndex=t.extractWords=t.downloadHtml=t.downloadFile=void 0;var n=r(920);Object.defineProperty(t,"downloadFile",{enumerable:!0,get:function(){return i(n).default}});var o=r(8015);Object.defineProperty(t,"downloadHtml",{enumerable:!0,get:function(){return i(o).default}});var s=r(9759);Object.defineProperty(t,"extractWords",{enumerable:!0,get:function(){return i(s).default}});var l=r(7669);Object.defineProperty(t,"findFirstWordIndex",{enumerable:!0,get:function(){return i(l).default}});var a=r(3938);Object.defineProperty(t,"getHash",{enumerable:!0,get:function(){return i(a).default}});var u=r(5026);Object.defineProperty(t,"getTempFilepath",{enumerable:!0,get:function(){return i(u).default}});var d=r(8029);Object.defineProperty(t,"getTxtWordList",{enumerable:!0,get:function(){return i(d).default}});var c=r(1563);Object.defineProperty(t,"latinizeDiacritics",{enumerable:!0,get:function(){return i(c).default}});var f=r(2017);Object.defineProperty(t,"unique",{enumerable:!0,get:function(){return i(f).default}});var h=r(6987);Object.defineProperty(t,"unzip",{enumerable:!0,get:function(){return i(h).default}})},1563:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=i(r(1118)),o=i(r(2017));t.default=e=>(0,o.default)(e.map(e=>(0,n.default)(e)))},2017:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=e=>Array.from(new Set(e))},6987:function(e,t,r){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let n=i(r(2048)),o=i(r(4616));t.default=(e,t,r)=>n.default.createReadStream(e).pipe(o.default.Parse()).on("entry",e=>{e.path===t?e.pipe(n.default.createWriteStream(r)):e.autodrain()}).promise()}};
@@ -1 +0,0 @@
1
- []
@@ -1 +0,0 @@
1
- []