scrabble-solver 2.18.2 → 2.18.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/.nx/workspace-data/d/server-process.json +2 -2
  2. package/.nx/workspace-data/file-map.json +530 -526
  3. package/.nx/workspace-data/lockfile-dependencies.hash +1 -1
  4. package/.nx/workspace-data/lockfile-nodes.hash +1 -1
  5. package/.nx/workspace-data/nx_files.nxt +0 -0
  6. package/.nx/workspace-data/project-graph.json +12 -11
  7. package/.nx/workspace-data/source-maps.json +4 -0
  8. package/CLAUDE.md +1 -1
  9. package/README.md +1 -1
  10. package/bun.lock +29 -29
  11. package/lerna.json +1 -1
  12. package/package.json +4 -3
  13. package/packages/configs/build/games/index.d.ts +1 -0
  14. package/packages/configs/build/games/index.js +1 -0
  15. package/packages/configs/build/games/wyrazy.d.ts +19 -0
  16. package/packages/configs/build/games/wyrazy.js +73 -0
  17. package/packages/configs/build/languages/polish.d.ts +1 -0
  18. package/packages/configs/build/languages/polish.js +39 -1
  19. package/packages/configs/package.json +5 -4
  20. package/packages/configs/src/games/index.ts +1 -0
  21. package/packages/configs/src/games/wyrazy.ts +71 -0
  22. package/packages/configs/src/languages/polish.ts +40 -1
  23. package/packages/constants/package.json +1 -1
  24. package/packages/dictionaries/package.json +4 -4
  25. package/packages/logger/package.json +1 -1
  26. package/packages/logger/scripts/stats.js +52 -31
  27. package/packages/scrabble-solver/.next/BUILD_ID +1 -1
  28. package/packages/scrabble-solver/.next/build-manifest.json +8 -8
  29. package/packages/scrabble-solver/.next/cache/.previewinfo +1 -1
  30. package/packages/scrabble-solver/.next/cache/.rscinfo +1 -1
  31. package/packages/scrabble-solver/.next/cache/.tsbuildinfo +1 -1
  32. package/packages/scrabble-solver/.next/cache/webpack/client-production/0.pack +0 -0
  33. package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack +0 -0
  34. package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack.old +0 -0
  35. package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/index.pack +0 -0
  36. package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/index.pack.old +0 -0
  37. package/packages/scrabble-solver/.next/cache/webpack/server-production/0.pack +0 -0
  38. package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack +0 -0
  39. package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack.old +0 -0
  40. package/packages/scrabble-solver/.next/prerender-manifest.json +4 -4
  41. package/packages/scrabble-solver/.next/routes-manifest.json +1 -1
  42. package/packages/scrabble-solver/.next/server/chunks/392.js +1 -1
  43. package/packages/scrabble-solver/.next/server/chunks/67.js +1 -1
  44. package/packages/scrabble-solver/.next/server/chunks/812.js +1 -1
  45. package/packages/scrabble-solver/.next/server/middleware-build-manifest.js +1 -1
  46. package/packages/scrabble-solver/.next/server/pages/404.html +2 -2
  47. package/packages/scrabble-solver/.next/server/pages/500.html +2 -2
  48. package/packages/scrabble-solver/.next/server/pages/_app.js.nft.json +1 -1
  49. package/packages/scrabble-solver/.next/server/pages/_document.js.nft.json +1 -1
  50. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale]/[word].js.nft.json +1 -1
  51. package/packages/scrabble-solver/.next/server/pages/api/solve.js.nft.json +1 -1
  52. package/packages/scrabble-solver/.next/server/pages/api/verify.js.nft.json +1 -1
  53. package/packages/scrabble-solver/.next/server/pages/index.html +2 -2
  54. package/packages/scrabble-solver/.next/server/pages/index.js +1 -1
  55. package/packages/scrabble-solver/.next/server/pages/index.js.nft.json +1 -1
  56. package/packages/scrabble-solver/.next/server/pages/index.json +1 -1
  57. package/packages/scrabble-solver/.next/server/pages/not-found.html +2 -2
  58. package/packages/scrabble-solver/.next/server/pages/not-found.js.nft.json +1 -1
  59. package/packages/scrabble-solver/.next/static/{nvGZh1gPuX98L07YmxlYD → 8WnIUTe-yJvPD6stltvYI}/_buildManifest.js +1 -1
  60. package/packages/scrabble-solver/.next/static/chunks/256.6a20b23a766cfebd.js +1 -0
  61. package/packages/scrabble-solver/.next/static/chunks/pages/_app-e3fe880e24c024ab.js +1 -0
  62. package/packages/scrabble-solver/.next/static/chunks/pages/{index-b5bf018100015277.js → index-b073a1686818dd26.js} +1 -1
  63. package/packages/scrabble-solver/.next/static/chunks/{webpack-9f5c9d275348829b.js → webpack-d7138f1ef6b8c9d6.js} +1 -1
  64. package/packages/scrabble-solver/.next/trace +22 -21
  65. package/packages/scrabble-solver/.next/trace-build +1 -1
  66. package/packages/scrabble-solver/package.json +8 -8
  67. package/packages/scrabble-solver/public/llms.txt +1 -1
  68. package/packages/scrabble-solver/public/service-worker.js +1 -1
  69. package/packages/scrabble-solver/src/pages/index.tsx +1 -1
  70. package/packages/scrabble-solver/tsconfig.tsbuildinfo +1 -1
  71. package/packages/solver/package.json +5 -5
  72. package/packages/types/build/Game.d.ts +2 -1
  73. package/packages/types/build/Game.js +1 -0
  74. package/packages/types/package.json +2 -2
  75. package/packages/types/src/Game.ts +1 -0
  76. package/packages/word-definitions/package.json +2 -2
  77. package/packages/word-lists/package.json +2 -2
  78. package/playwright-report/index.html +1 -1
  79. package/packages/scrabble-solver/.next/static/chunks/256.66ff9fb6d7db9ec7.js +0 -1
  80. package/packages/scrabble-solver/.next/static/chunks/pages/_app-f9ec81278ffa7b1a.js +0 -1
  81. /package/packages/scrabble-solver/.next/static/{nvGZh1gPuX98L07YmxlYD → 8WnIUTe-yJvPD6stltvYI}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- 2457713397176899519
1
+ 9502572881369034966
@@ -1 +1 @@
1
- 2457713397176899519
1
+ 9502572881369034966
Binary file
@@ -66,7 +66,7 @@
66
66
  "description": "Word definition crawlers and parsers for Scrabble Solver (Wiktionary, CNRTL, DWDS, SJP, dexonline, and more).",
67
67
  "js": {
68
68
  "packageName": "@scrabble-solver/word-definitions",
69
- "packageVersion": "2.18.2",
69
+ "packageVersion": "2.18.3",
70
70
  "packageMain": "build/index.js",
71
71
  "isInPackageManagerWorkspaces": true
72
72
  }
@@ -232,7 +232,7 @@
232
232
  "description": "Scrabble Solver web app: free word finder and board solver for Scrabble, Super Scrabble, Literaki, and more.",
233
233
  "js": {
234
234
  "packageName": "@scrabble-solver/scrabble-solver",
235
- "packageVersion": "2.18.2",
235
+ "packageVersion": "2.18.3",
236
236
  "isInPackageManagerWorkspaces": true
237
237
  }
238
238
  },
@@ -332,7 +332,7 @@
332
332
  "description": "Dictionary manager for Scrabble Solver: downloads per-locale word lists and serves them as GADDAG automata with layered disk/memory caching.",
333
333
  "js": {
334
334
  "packageName": "@scrabble-solver/dictionaries",
335
- "packageVersion": "2.18.2",
335
+ "packageVersion": "2.18.3",
336
336
  "packageMain": "build/index.js",
337
337
  "isInPackageManagerWorkspaces": true
338
338
  }
@@ -395,7 +395,7 @@
395
395
  "description": "Per-locale word list downloaders for Scrabble Solver (SOWPODS, TWL06, SJP, and more).",
396
396
  "js": {
397
397
  "packageName": "@scrabble-solver/word-lists",
398
- "packageVersion": "2.18.2",
398
+ "packageVersion": "2.18.3",
399
399
  "packageMain": "build/index.js",
400
400
  "isInPackageManagerWorkspaces": true
401
401
  }
@@ -454,7 +454,7 @@
454
454
  "description": "Shared constants for Scrabble Solver (blank tile, bonus markers).",
455
455
  "js": {
456
456
  "packageName": "@scrabble-solver/constants",
457
- "packageVersion": "2.18.2",
457
+ "packageVersion": "2.18.3",
458
458
  "packageMain": "build/index.js",
459
459
  "isInPackageManagerWorkspaces": true
460
460
  }
@@ -506,6 +506,7 @@
506
506
  "npm:game-config",
507
507
  "npm:literaki",
508
508
  "npm:kelimelik",
509
+ "npm:wyrazy",
509
510
  "npm:super-scrabble"
510
511
  ],
511
512
  "metadata": {
@@ -515,10 +516,10 @@
515
516
  "clean"
516
517
  ]
517
518
  },
518
- "description": "Game and language configs for Scrabble Solver: board layouts, bonus squares, tile distributions, and points for 7 games and 9 locales.",
519
+ "description": "Game and language configs for Scrabble Solver: board layouts, bonus squares, tile distributions, and points for 8 games and 9 locales.",
519
520
  "js": {
520
521
  "packageName": "@scrabble-solver/configs",
521
- "packageVersion": "2.18.2",
522
+ "packageVersion": "2.18.3",
522
523
  "packageMain": "build/index.js",
523
524
  "isInPackageManagerWorkspaces": true
524
525
  }
@@ -591,7 +592,7 @@
591
592
  "description": "Winston-based JSON file logger for Scrabble Solver.",
592
593
  "js": {
593
594
  "packageName": "@scrabble-solver/logger",
594
- "packageVersion": "2.18.2",
595
+ "packageVersion": "2.18.3",
595
596
  "packageMain": "build/index.js",
596
597
  "isInPackageManagerWorkspaces": true
597
598
  }
@@ -680,7 +681,7 @@
680
681
  "description": "Scrabble move-generation engine: anchor-based GADDAG search that finds and scores every legal move for a given board, rack, and game config.",
681
682
  "js": {
682
683
  "packageName": "@scrabble-solver/solver",
683
- "packageVersion": "2.18.2",
684
+ "packageVersion": "2.18.3",
684
685
  "packageMain": "build/index.js",
685
686
  "isInPackageManagerWorkspaces": true
686
687
  }
@@ -755,7 +756,7 @@
755
756
  "description": "Domain model for Scrabble Solver: Board, Cell, Tile, Result, Config, Locale, and their JSON wire shapes.",
756
757
  "js": {
757
758
  "packageName": "@scrabble-solver/types",
758
- "packageVersion": "2.18.2",
759
+ "packageVersion": "2.18.3",
759
760
  "packageMain": "build/index.js",
760
761
  "isInPackageManagerWorkspaces": true
761
762
  }
@@ -38766,5 +38767,5 @@
38766
38767
  },
38767
38768
  "version": "6.0",
38768
38769
  "errors": [],
38769
- "computedAt": 1787432943296
38770
+ "computedAt": 1787605854313
38770
38771
  }
@@ -64,6 +64,10 @@
64
64
  "packages/configs/package.json",
65
65
  "nx/core/package-json"
66
66
  ],
67
+ "tags.npm:wyrazy": [
68
+ "packages/configs/package.json",
69
+ "nx/core/package-json"
70
+ ],
67
71
  "tags.npm:super-scrabble": [
68
72
  "packages/configs/package.json",
69
73
  "nx/core/package-json"
package/CLAUDE.md CHANGED
@@ -23,7 +23,7 @@ The GADDAG itself lives outside this repo, in [`@kamilmielnik/gaddag`](https://g
23
23
  - `word-lists` — pulls raw word lists from upstream sources (one fetcher per locale in `src/languages/`). Used by `dictionaries` during downloads.
24
24
  - `word-definitions` — per-locale `crawl(word) → string` and a parser for each source (Wiktionary, CNRTL, DWDS, SJP, dexonline, vajehyab, etc.). English uses the Wiktionary REST API (#431): `parse` JSON-parses the payload and uses cheerio only to strip HTML from definition strings, so the English fixtures are `.json`. Add a new locale by adding a `crawl` and a `parse` function in `src/languages/` and wiring them into `crawl.ts` / `parse.ts`. `parse.test.ts` is where you add fixture-based parser tests.
25
25
  - `types` — domain model classes (`Board`, `Cell`, `Tile`, `Result`, `Config`, `Locale`, …) plus `*Json` shapes. Most of these have a `fromJson` / `toJson` round-trip — use them at the wire boundary instead of hand-rolled serialization. Free functions live one-per-file under `src/lib/` (`getBoardWords`, `getCells`, `getCollidingWords`, `getCollisions`, `isSameBoardWord`, …) and type guards under `src/type-guards/` (`isBoardJson`, `isCellJson`, `isGame`, `isLocale`, …); the class methods are thin wrappers over them, so put new board/word logic in `lib/` and expose it as a method rather than growing `Board.ts`. `Board.getWords()` returns `BoardWord[]` (`{ direction, word, x, y }`), not strings — the same word can appear twice on a board, so a word's identity is its start cell plus direction (`isSameBoardWord`), and `Board.getCollidingWords(word)` returns the perpendicular words crossing it.
26
- - `configs` — split into **games** (`scrabble`, `superScrabble`, `scrabbleDuel`, `letterLeague`, `crossplay`, `literaki`, `kelimelik` — each defines board size, bonuses, rack size, blanks count, bingo bonus) and **languages** (`english`, `french`, …, each spreads a base game config and overrides `locale` + `tiles`). A locale config is one game × one language; e.g. `polishScrabble` = `scrabble` ⊕ Polish tiles + digraphs. Adding a language means a new config here **and** the 15-step checklist under "Add a new language" in `README.md`.
26
+ - `configs` — split into **games** (`scrabble`, `superScrabble`, `scrabbleDuel`, `letterLeague`, `crossplay`, `literaki`, `kelimelik`, `wyrazy` — each defines board size, bonuses, rack size, blanks count, bingo bonus) and **languages** (`english`, `french`, …, each spreads a base game config and overrides `locale` + `tiles`). A locale config is one game × one language; e.g. `polishScrabble` = `scrabble` ⊕ Polish tiles + digraphs. Adding a language means a new config here **and** the 15-step checklist under "Add a new language" in `README.md`.
27
27
  - `logger` — Winston logger writing JSON to `$HOME/.scrabble-solver/logs/{all,error}.log`. Only `error` goes to console. Used server-side by the app + dictionaries; do **not** import from browser code.
28
28
  - `constants` — shared primitives (`BLANK`, `BONUS_CHARACTER`, `BONUS_WORD`, …). No runtime dependencies.
29
29
 
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  </p>
7
7
 
8
8
  <p>
9
- Free, open-source, cross-platform, multi-language analysis tool for <a href="https://en.wikipedia.org/wiki/Scrabble">Scrabble</a>, <a href="https://www.scopely.com/en/games/scrabble-go">Scrabble Duel</a>, <a href="https://en.wikipedia.org/wiki/Super_Scrabble">Super Scrabble</a>, <a href="https://support-apps.discord.com/hc/en-us/articles/26502196674583-Letter-League-FAQ">Letter League</a>, <a href="https://www.nytimes.com/games/crossplay">Crossplay</a>, <a href="https://pl.wikipedia.org/wiki/Literaki">Literaki</a> &amp; <a href="https://play.google.com/store/apps/details?id=com.he2apps.kelimelik">Kelimelik</a>
9
+ Free, open-source, cross-platform, multi-language analysis tool for <a href="https://en.wikipedia.org/wiki/Scrabble">Scrabble</a>, <a href="https://www.scopely.com/en/games/scrabble-go">Scrabble Duel</a>, <a href="https://en.wikipedia.org/wiki/Super_Scrabble">Super Scrabble</a>, <a href="https://support-apps.discord.com/hc/en-us/articles/26502196674583-Letter-League-FAQ">Letter League</a>, <a href="https://www.nytimes.com/games/crossplay">Crossplay</a>, <a href="https://pl.wikipedia.org/wiki/Literaki">Literaki</a>, <a href="https://play.google.com/store/apps/details?id=com.he2apps.kelimelik">Kelimelik</a> &amp; <a href="https://play.google.com/store/apps/details?id=com.foltyn.Wyrazy">Wyrazy</a>
10
10
  </p>
11
11
 
12
12
  <p>
package/bun.lock CHANGED
@@ -5,7 +5,7 @@
5
5
  "": {
6
6
  "name": "scrabble-solver",
7
7
  "dependencies": {
8
- "@scrabble-solver/scrabble-solver": "^2.18.2",
8
+ "@scrabble-solver/scrabble-solver": "^2.18.3",
9
9
  "open-cli": "^9.0.0",
10
10
  "wait-on": "^9.1.0",
11
11
  },
@@ -29,51 +29,51 @@
29
29
  },
30
30
  "packages/configs": {
31
31
  "name": "@scrabble-solver/configs",
32
- "version": "2.18.2",
32
+ "version": "2.18.3",
33
33
  "dependencies": {
34
- "@scrabble-solver/constants": "^2.18.2",
35
- "@scrabble-solver/types": "^2.18.2",
34
+ "@scrabble-solver/constants": "^2.18.3",
35
+ "@scrabble-solver/types": "^2.18.3",
36
36
  },
37
37
  },
38
38
  "packages/constants": {
39
39
  "name": "@scrabble-solver/constants",
40
- "version": "2.18.2",
40
+ "version": "2.18.3",
41
41
  },
42
42
  "packages/dictionaries": {
43
43
  "name": "@scrabble-solver/dictionaries",
44
- "version": "2.18.2",
44
+ "version": "2.18.3",
45
45
  "bin": {
46
46
  "remove-dictionaries": "./bin/remove-dictionaries.js",
47
47
  "update-dictionaries": "./bin/update-dictionaries.js",
48
48
  },
49
49
  "dependencies": {
50
50
  "@kamilmielnik/gaddag": "^2.0.0",
51
- "@scrabble-solver/logger": "^2.18.2",
52
- "@scrabble-solver/types": "^2.18.2",
53
- "@scrabble-solver/word-lists": "^2.18.2",
51
+ "@scrabble-solver/logger": "^2.18.3",
52
+ "@scrabble-solver/types": "^2.18.3",
53
+ "@scrabble-solver/word-lists": "^2.18.3",
54
54
  },
55
55
  },
56
56
  "packages/logger": {
57
57
  "name": "@scrabble-solver/logger",
58
- "version": "2.18.2",
58
+ "version": "2.18.3",
59
59
  "dependencies": {
60
60
  "winston": "^3.19.0",
61
61
  },
62
62
  },
63
63
  "packages/scrabble-solver": {
64
64
  "name": "@scrabble-solver/scrabble-solver",
65
- "version": "2.18.2",
65
+ "version": "2.18.3",
66
66
  "dependencies": {
67
67
  "@floating-ui/react": "^0.27.20",
68
68
  "@kamilmielnik/gaddag": "^2.0.0",
69
69
  "@reduxjs/toolkit": "^2.12.0",
70
- "@scrabble-solver/configs": "^2.18.2",
71
- "@scrabble-solver/constants": "^2.18.2",
72
- "@scrabble-solver/dictionaries": "^2.18.2",
73
- "@scrabble-solver/logger": "^2.18.2",
74
- "@scrabble-solver/solver": "^2.18.2",
75
- "@scrabble-solver/types": "^2.18.2",
76
- "@scrabble-solver/word-definitions": "^2.18.2",
70
+ "@scrabble-solver/configs": "^2.18.3",
71
+ "@scrabble-solver/constants": "^2.18.3",
72
+ "@scrabble-solver/dictionaries": "^2.18.3",
73
+ "@scrabble-solver/logger": "^2.18.3",
74
+ "@scrabble-solver/solver": "^2.18.3",
75
+ "@scrabble-solver/types": "^2.18.3",
76
+ "@scrabble-solver/word-definitions": "^2.18.3",
77
77
  "classnames": "^2.5.1",
78
78
  "env-cmd": "^11.0.0",
79
79
  "include-media": "^2.0.0",
@@ -109,29 +109,29 @@
109
109
  },
110
110
  "packages/solver": {
111
111
  "name": "@scrabble-solver/solver",
112
- "version": "2.18.2",
112
+ "version": "2.18.3",
113
113
  "dependencies": {
114
114
  "@kamilmielnik/gaddag": "^2.0.0",
115
- "@scrabble-solver/types": "^2.18.2",
115
+ "@scrabble-solver/types": "^2.18.3",
116
116
  },
117
117
  "devDependencies": {
118
- "@scrabble-solver/configs": "^2.18.2",
119
- "@scrabble-solver/constants": "^2.18.2",
120
- "@scrabble-solver/dictionaries": "^2.18.2",
118
+ "@scrabble-solver/configs": "^2.18.3",
119
+ "@scrabble-solver/constants": "^2.18.3",
120
+ "@scrabble-solver/dictionaries": "^2.18.3",
121
121
  },
122
122
  },
123
123
  "packages/types": {
124
124
  "name": "@scrabble-solver/types",
125
- "version": "2.18.2",
125
+ "version": "2.18.3",
126
126
  "dependencies": {
127
- "@scrabble-solver/constants": "^2.18.2",
127
+ "@scrabble-solver/constants": "^2.18.3",
128
128
  },
129
129
  },
130
130
  "packages/word-definitions": {
131
131
  "name": "@scrabble-solver/word-definitions",
132
- "version": "2.18.2",
132
+ "version": "2.18.3",
133
133
  "dependencies": {
134
- "@scrabble-solver/types": "^2.18.2",
134
+ "@scrabble-solver/types": "^2.18.3",
135
135
  "cheerio": "^1.2.0",
136
136
  "follow-redirects": "^1.16.0",
137
137
  "striptags": "^3.2.0",
@@ -143,9 +143,9 @@
143
143
  },
144
144
  "packages/word-lists": {
145
145
  "name": "@scrabble-solver/word-lists",
146
- "version": "2.18.2",
146
+ "version": "2.18.3",
147
147
  "dependencies": {
148
- "@scrabble-solver/types": "^2.18.2",
148
+ "@scrabble-solver/types": "^2.18.3",
149
149
  "cheerio": "^1.2.0",
150
150
  "follow-redirects": "^1.16.0",
151
151
  "transliteration": "^2.6.1",
package/lerna.json CHANGED
@@ -6,6 +6,6 @@
6
6
  "access": "public"
7
7
  },
8
8
  "tagVersionPrefix": "",
9
- "version": "2.18.2",
9
+ "version": "2.18.3",
10
10
  "$schema": "node_modules/lerna/schemas/lerna-schema.json"
11
11
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "scrabble-solver",
3
- "version": "2.18.2",
4
- "description": "Scrabble Solver 2 - Free, open-source, cross-platform, multi-language analysis tool for Scrabble, Scrabble Duel, Super Scrabble, Letter League, Crossplay, Literaki, and Kelimelik. Quickly find the top-scoring words using the given board and tiles.",
3
+ "version": "2.18.3",
4
+ "description": "Scrabble Solver 2 - Free, open-source, cross-platform, multi-language analysis tool for Scrabble, Scrabble Duel, Super Scrabble, Letter League, Crossplay, Literaki, Kelimelik, and Wyrazy. Quickly find the top-scoring words using the given board and tiles.",
5
5
  "keywords": [
6
6
  "scrabble",
7
7
  "scrabble-solver",
@@ -17,6 +17,7 @@
17
17
  "crossplay",
18
18
  "literaki",
19
19
  "kelimelik",
20
+ "wyrazy",
20
21
  "board game",
21
22
  "gaddag"
22
23
  ],
@@ -79,7 +80,7 @@
79
80
  "packages/scrabble-solver"
80
81
  ],
81
82
  "dependencies": {
82
- "@scrabble-solver/scrabble-solver": "^2.18.2",
83
+ "@scrabble-solver/scrabble-solver": "^2.18.3",
83
84
  "open-cli": "^9.0.0",
84
85
  "wait-on": "^9.1.0"
85
86
  },
@@ -5,3 +5,4 @@ export * from './literaki';
5
5
  export * from './scrabble';
6
6
  export * from './scrabbleDuel';
7
7
  export * from './superScrabble';
8
+ export * from './wyrazy';
@@ -21,3 +21,4 @@ __exportStar(require("./literaki"), exports);
21
21
  __exportStar(require("./scrabble"), exports);
22
22
  __exportStar(require("./scrabbleDuel"), exports);
23
23
  __exportStar(require("./superScrabble"), exports);
24
+ __exportStar(require("./wyrazy"), exports);
@@ -0,0 +1,19 @@
1
+ import { Game } from '@scrabble-solver/types';
2
+ export declare const wyrazy: {
3
+ bingo: {
4
+ score: number;
5
+ };
6
+ blankScore: number;
7
+ blanksCount: number;
8
+ boardHeight: number;
9
+ boardWidth: number;
10
+ game: Game;
11
+ name: string;
12
+ rackSize: number;
13
+ bonuses: {
14
+ multiplier: number;
15
+ type: string;
16
+ x: number;
17
+ y: number;
18
+ }[];
19
+ };
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.wyrazy = void 0;
4
+ const constants_1 = require("@scrabble-solver/constants");
5
+ const types_1 = require("@scrabble-solver/types");
6
+ exports.wyrazy = {
7
+ bingo: { score: 25 },
8
+ blankScore: 0,
9
+ blanksCount: 2,
10
+ boardHeight: 15,
11
+ boardWidth: 15,
12
+ game: types_1.Game.Wyrazy,
13
+ name: 'Wyrazy',
14
+ rackSize: 7,
15
+ bonuses: [
16
+ { multiplier: 3, type: constants_1.BONUS_WORD, x: 2, y: 0 },
17
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 6, y: 0 },
18
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 8, y: 0 },
19
+ { multiplier: 3, type: constants_1.BONUS_WORD, x: 12, y: 0 },
20
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 1, y: 1 },
21
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 5, y: 1 },
22
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 9, y: 1 },
23
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 13, y: 1 },
24
+ { multiplier: 3, type: constants_1.BONUS_WORD, x: 0, y: 2 },
25
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 4, y: 2 },
26
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 10, y: 2 },
27
+ { multiplier: 3, type: constants_1.BONUS_WORD, x: 14, y: 2 },
28
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 3, y: 3 },
29
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 7, y: 3 },
30
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 11, y: 3 },
31
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 2, y: 4 },
32
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 6, y: 4 },
33
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 8, y: 4 },
34
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 12, y: 4 },
35
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 1, y: 5 },
36
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 5, y: 5 },
37
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 9, y: 5 },
38
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 13, y: 5 },
39
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 0, y: 6 },
40
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 4, y: 6 },
41
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 10, y: 6 },
42
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 14, y: 6 },
43
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 3, y: 7 },
44
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 11, y: 7 },
45
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 0, y: 8 },
46
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 4, y: 8 },
47
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 10, y: 8 },
48
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 14, y: 8 },
49
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 1, y: 9 },
50
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 5, y: 9 },
51
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 9, y: 9 },
52
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 13, y: 9 },
53
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 2, y: 10 },
54
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 6, y: 10 },
55
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 8, y: 10 },
56
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 12, y: 10 },
57
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 3, y: 11 },
58
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 7, y: 11 },
59
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 11, y: 11 },
60
+ { multiplier: 3, type: constants_1.BONUS_WORD, x: 0, y: 12 },
61
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 4, y: 12 },
62
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 10, y: 12 },
63
+ { multiplier: 3, type: constants_1.BONUS_WORD, x: 14, y: 12 },
64
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 1, y: 13 },
65
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 5, y: 13 },
66
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 9, y: 13 },
67
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 13, y: 13 },
68
+ { multiplier: 3, type: constants_1.BONUS_WORD, x: 2, y: 14 },
69
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 6, y: 14 },
70
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 8, y: 14 },
71
+ { multiplier: 3, type: constants_1.BONUS_WORD, x: 12, y: 14 },
72
+ ],
73
+ };
@@ -1,3 +1,4 @@
1
1
  import { Config } from '@scrabble-solver/types';
2
2
  export declare const polishScrabble: Config;
3
3
  export declare const polishLiteraki: Config;
4
+ export declare const polishWyrazy: Config;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.polishLiteraki = exports.polishScrabble = void 0;
3
+ exports.polishWyrazy = exports.polishLiteraki = exports.polishScrabble = void 0;
4
4
  const types_1 = require("@scrabble-solver/types");
5
5
  const games_1 = require("../games");
6
6
  exports.polishScrabble = new types_1.Config({
@@ -79,3 +79,41 @@ exports.polishLiteraki = new types_1.Config({
79
79
  { character: 'ż', count: 1, score: 5 },
80
80
  ],
81
81
  });
82
+ exports.polishWyrazy = new types_1.Config({
83
+ ...games_1.wyrazy,
84
+ locale: types_1.Locale.PL_PL,
85
+ tiles: [
86
+ { character: 'a', count: 9, score: 1 },
87
+ { character: 'ą', count: 1, score: 5 },
88
+ { character: 'b', count: 2, score: 3 },
89
+ { character: 'c', count: 3, score: 2 },
90
+ { character: 'ć', count: 1, score: 5 },
91
+ { character: 'd', count: 3, score: 2 },
92
+ { character: 'e', count: 7, score: 1 },
93
+ { character: 'ę', count: 1, score: 5 },
94
+ { character: 'f', count: 1, score: 5 },
95
+ { character: 'g', count: 2, score: 3 },
96
+ { character: 'h', count: 2, score: 3 },
97
+ { character: 'i', count: 8, score: 1 },
98
+ { character: 'j', count: 2, score: 3 },
99
+ { character: 'k', count: 3, score: 2 },
100
+ { character: 'l', count: 3, score: 2 },
101
+ { character: 'ł', count: 2, score: 3 },
102
+ { character: 'm', count: 3, score: 2 },
103
+ { character: 'n', count: 5, score: 1 },
104
+ { character: 'ń', count: 1, score: 5 },
105
+ { character: 'o', count: 6, score: 1 },
106
+ { character: 'ó', count: 1, score: 5 },
107
+ { character: 'p', count: 3, score: 2 },
108
+ { character: 'r', count: 4, score: 1 },
109
+ { character: 's', count: 4, score: 1 },
110
+ { character: 'ś', count: 1, score: 5 },
111
+ { character: 't', count: 3, score: 2 },
112
+ { character: 'u', count: 2, score: 3 },
113
+ { character: 'w', count: 4, score: 1 },
114
+ { character: 'y', count: 4, score: 2 },
115
+ { character: 'z', count: 5, score: 1 },
116
+ { character: 'ź', count: 1, score: 5 },
117
+ { character: 'ż', count: 1, score: 5 },
118
+ ],
119
+ });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@scrabble-solver/configs",
3
- "version": "2.18.2",
4
- "description": "Game and language configs for Scrabble Solver: board layouts, bonus squares, tile distributions, and points for 7 games and 9 locales.",
3
+ "version": "2.18.3",
4
+ "description": "Game and language configs for Scrabble Solver: board layouts, bonus squares, tile distributions, and points for 8 games and 9 locales.",
5
5
  "keywords": [
6
6
  "scrabble",
7
7
  "board-game",
@@ -9,6 +9,7 @@
9
9
  "game-config",
10
10
  "literaki",
11
11
  "kelimelik",
12
+ "wyrazy",
12
13
  "super-scrabble"
13
14
  ],
14
15
  "main": "build/index.js",
@@ -32,8 +33,8 @@
32
33
  "clean": "rimraf build/"
33
34
  },
34
35
  "dependencies": {
35
- "@scrabble-solver/constants": "^2.18.2",
36
- "@scrabble-solver/types": "^2.18.2"
36
+ "@scrabble-solver/constants": "^2.18.3",
37
+ "@scrabble-solver/types": "^2.18.3"
37
38
  },
38
39
  "gitHead": "1e2d1ad49a288d4a44196d8e3336740da132c637"
39
40
  }
@@ -5,3 +5,4 @@ export * from './literaki';
5
5
  export * from './scrabble';
6
6
  export * from './scrabbleDuel';
7
7
  export * from './superScrabble';
8
+ export * from './wyrazy';
@@ -0,0 +1,71 @@
1
+ import { BONUS_CHARACTER, BONUS_WORD } from '@scrabble-solver/constants';
2
+ import { Game } from '@scrabble-solver/types';
3
+
4
+ export const wyrazy = {
5
+ bingo: { score: 25 },
6
+ blankScore: 0,
7
+ blanksCount: 2,
8
+ boardHeight: 15,
9
+ boardWidth: 15,
10
+ game: Game.Wyrazy,
11
+ name: 'Wyrazy',
12
+ rackSize: 7,
13
+ bonuses: [
14
+ { multiplier: 3, type: BONUS_WORD, x: 2, y: 0 },
15
+ { multiplier: 2, type: BONUS_CHARACTER, x: 6, y: 0 },
16
+ { multiplier: 2, type: BONUS_CHARACTER, x: 8, y: 0 },
17
+ { multiplier: 3, type: BONUS_WORD, x: 12, y: 0 },
18
+ { multiplier: 3, type: BONUS_CHARACTER, x: 1, y: 1 },
19
+ { multiplier: 2, type: BONUS_WORD, x: 5, y: 1 },
20
+ { multiplier: 2, type: BONUS_WORD, x: 9, y: 1 },
21
+ { multiplier: 3, type: BONUS_CHARACTER, x: 13, y: 1 },
22
+ { multiplier: 3, type: BONUS_WORD, x: 0, y: 2 },
23
+ { multiplier: 3, type: BONUS_CHARACTER, x: 4, y: 2 },
24
+ { multiplier: 3, type: BONUS_CHARACTER, x: 10, y: 2 },
25
+ { multiplier: 3, type: BONUS_WORD, x: 14, y: 2 },
26
+ { multiplier: 2, type: BONUS_CHARACTER, x: 3, y: 3 },
27
+ { multiplier: 2, type: BONUS_WORD, x: 7, y: 3 },
28
+ { multiplier: 2, type: BONUS_CHARACTER, x: 11, y: 3 },
29
+ { multiplier: 3, type: BONUS_CHARACTER, x: 2, y: 4 },
30
+ { multiplier: 2, type: BONUS_CHARACTER, x: 6, y: 4 },
31
+ { multiplier: 2, type: BONUS_CHARACTER, x: 8, y: 4 },
32
+ { multiplier: 3, type: BONUS_CHARACTER, x: 12, y: 4 },
33
+ { multiplier: 2, type: BONUS_WORD, x: 1, y: 5 },
34
+ { multiplier: 3, type: BONUS_CHARACTER, x: 5, y: 5 },
35
+ { multiplier: 3, type: BONUS_CHARACTER, x: 9, y: 5 },
36
+ { multiplier: 2, type: BONUS_WORD, x: 13, y: 5 },
37
+ { multiplier: 2, type: BONUS_CHARACTER, x: 0, y: 6 },
38
+ { multiplier: 2, type: BONUS_CHARACTER, x: 4, y: 6 },
39
+ { multiplier: 2, type: BONUS_CHARACTER, x: 10, y: 6 },
40
+ { multiplier: 2, type: BONUS_CHARACTER, x: 14, y: 6 },
41
+ { multiplier: 2, type: BONUS_WORD, x: 3, y: 7 },
42
+ { multiplier: 2, type: BONUS_WORD, x: 11, y: 7 },
43
+ { multiplier: 2, type: BONUS_CHARACTER, x: 0, y: 8 },
44
+ { multiplier: 2, type: BONUS_CHARACTER, x: 4, y: 8 },
45
+ { multiplier: 2, type: BONUS_CHARACTER, x: 10, y: 8 },
46
+ { multiplier: 2, type: BONUS_CHARACTER, x: 14, y: 8 },
47
+ { multiplier: 2, type: BONUS_WORD, x: 1, y: 9 },
48
+ { multiplier: 3, type: BONUS_CHARACTER, x: 5, y: 9 },
49
+ { multiplier: 3, type: BONUS_CHARACTER, x: 9, y: 9 },
50
+ { multiplier: 2, type: BONUS_WORD, x: 13, y: 9 },
51
+ { multiplier: 3, type: BONUS_CHARACTER, x: 2, y: 10 },
52
+ { multiplier: 2, type: BONUS_CHARACTER, x: 6, y: 10 },
53
+ { multiplier: 2, type: BONUS_CHARACTER, x: 8, y: 10 },
54
+ { multiplier: 3, type: BONUS_CHARACTER, x: 12, y: 10 },
55
+ { multiplier: 2, type: BONUS_CHARACTER, x: 3, y: 11 },
56
+ { multiplier: 2, type: BONUS_WORD, x: 7, y: 11 },
57
+ { multiplier: 2, type: BONUS_CHARACTER, x: 11, y: 11 },
58
+ { multiplier: 3, type: BONUS_WORD, x: 0, y: 12 },
59
+ { multiplier: 3, type: BONUS_CHARACTER, x: 4, y: 12 },
60
+ { multiplier: 3, type: BONUS_CHARACTER, x: 10, y: 12 },
61
+ { multiplier: 3, type: BONUS_WORD, x: 14, y: 12 },
62
+ { multiplier: 3, type: BONUS_CHARACTER, x: 1, y: 13 },
63
+ { multiplier: 2, type: BONUS_WORD, x: 5, y: 13 },
64
+ { multiplier: 2, type: BONUS_WORD, x: 9, y: 13 },
65
+ { multiplier: 3, type: BONUS_CHARACTER, x: 13, y: 13 },
66
+ { multiplier: 3, type: BONUS_WORD, x: 2, y: 14 },
67
+ { multiplier: 2, type: BONUS_CHARACTER, x: 6, y: 14 },
68
+ { multiplier: 2, type: BONUS_CHARACTER, x: 8, y: 14 },
69
+ { multiplier: 3, type: BONUS_WORD, x: 12, y: 14 },
70
+ ],
71
+ };
@@ -1,6 +1,6 @@
1
1
  import { Config, Locale } from '@scrabble-solver/types';
2
2
 
3
- import { literaki, scrabble } from '../games';
3
+ import { literaki, scrabble, wyrazy } from '../games';
4
4
 
5
5
  export const polishScrabble = new Config({
6
6
  ...scrabble,
@@ -79,3 +79,42 @@ export const polishLiteraki = new Config({
79
79
  { character: 'ż', count: 1, score: 5 },
80
80
  ],
81
81
  });
82
+
83
+ export const polishWyrazy = new Config({
84
+ ...wyrazy,
85
+ locale: Locale.PL_PL,
86
+ tiles: [
87
+ { character: 'a', count: 9, score: 1 },
88
+ { character: 'ą', count: 1, score: 5 },
89
+ { character: 'b', count: 2, score: 3 },
90
+ { character: 'c', count: 3, score: 2 },
91
+ { character: 'ć', count: 1, score: 5 },
92
+ { character: 'd', count: 3, score: 2 },
93
+ { character: 'e', count: 7, score: 1 },
94
+ { character: 'ę', count: 1, score: 5 },
95
+ { character: 'f', count: 1, score: 5 },
96
+ { character: 'g', count: 2, score: 3 },
97
+ { character: 'h', count: 2, score: 3 },
98
+ { character: 'i', count: 8, score: 1 },
99
+ { character: 'j', count: 2, score: 3 },
100
+ { character: 'k', count: 3, score: 2 },
101
+ { character: 'l', count: 3, score: 2 },
102
+ { character: 'ł', count: 2, score: 3 },
103
+ { character: 'm', count: 3, score: 2 },
104
+ { character: 'n', count: 5, score: 1 },
105
+ { character: 'ń', count: 1, score: 5 },
106
+ { character: 'o', count: 6, score: 1 },
107
+ { character: 'ó', count: 1, score: 5 },
108
+ { character: 'p', count: 3, score: 2 },
109
+ { character: 'r', count: 4, score: 1 },
110
+ { character: 's', count: 4, score: 1 },
111
+ { character: 'ś', count: 1, score: 5 },
112
+ { character: 't', count: 3, score: 2 },
113
+ { character: 'u', count: 2, score: 3 },
114
+ { character: 'w', count: 4, score: 1 },
115
+ { character: 'y', count: 4, score: 2 },
116
+ { character: 'z', count: 5, score: 1 },
117
+ { character: 'ź', count: 1, score: 5 },
118
+ { character: 'ż', count: 1, score: 5 },
119
+ ],
120
+ });
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/constants",
3
- "version": "2.18.2",
3
+ "version": "2.18.3",
4
4
  "description": "Shared constants for Scrabble Solver (blank tile, bonus markers).",
5
5
  "keywords": [
6
6
  "scrabble",