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,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/dictionaries",
3
- "version": "2.18.2",
3
+ "version": "2.18.3",
4
4
  "description": "Dictionary manager for Scrabble Solver: downloads per-locale word lists and serves them as GADDAG automata with layered disk/memory caching.",
5
5
  "keywords": [
6
6
  "scrabble",
@@ -38,9 +38,9 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@kamilmielnik/gaddag": "^2.0.0",
41
- "@scrabble-solver/logger": "^2.18.2",
42
- "@scrabble-solver/types": "^2.18.2",
43
- "@scrabble-solver/word-lists": "^2.18.2"
41
+ "@scrabble-solver/logger": "^2.18.3",
42
+ "@scrabble-solver/types": "^2.18.3",
43
+ "@scrabble-solver/word-lists": "^2.18.3"
44
44
  },
45
45
  "gitHead": "1e2d1ad49a288d4a44196d8e3336740da132c637"
46
46
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/logger",
3
- "version": "2.18.2",
3
+ "version": "2.18.3",
4
4
  "description": "Winston-based JSON file logger for Scrabble Solver.",
5
5
  "keywords": [
6
6
  "logger",
@@ -4,49 +4,70 @@ const path = require('path');
4
4
  const { argv } = require('process');
5
5
 
6
6
  const DAY = 24 * 60 * 60 * 1000;
7
+ const EVENTS = [` message: 'visit - request',`, ` message: 'solve - request',`, ` message: 'dictionary - request',`];
8
+ const TIMESTAMP_PREFIX = ` timestamp: '`;
9
+ const DATE_LENGTH = 'YYYY-MM-DD'.length;
7
10
 
8
- const getStats = (event, lines, since) => {
9
- const daysCount = Math.ceil((Date.now() - Number(new Date(since))) / DAY);
10
- const days = {};
11
+ main();
12
+
13
+ async function main() {
14
+ const filepath = path.resolve(os.homedir(), 'desktop', 'all.log');
15
+ const since = argv[2] || '2021-06-01';
16
+ const countsPerDay = await countEventsPerDay(filepath, since);
17
+
18
+ for (const event of EVENTS) {
19
+ printStats(getStats(event, countsPerDay.get(event), since));
20
+ }
21
+ }
11
22
 
12
- let nextIndex = 0;
13
- while (nextIndex !== -1) {
14
- nextIndex = lines.indexOf(event, nextIndex + 1);
23
+ async function countEventsPerDay(filepath, since) {
24
+ const countsPerDay = new Map(EVENTS.map((event) => [event, {}]));
25
+ let pendingEvent;
15
26
 
16
- if (nextIndex) {
17
- const timestampLine = lines[nextIndex + 1];
18
- const day = timestampLine.substr(` timestamp: '`.length, 'YYYY-MM-DD'.length);
19
- days[day] = days[day] || 0;
20
- days[day]++;
27
+ for await (const line of readLines(filepath)) {
28
+ if (pendingEvent) {
29
+ const day = line.slice(TIMESTAMP_PREFIX.length, TIMESTAMP_PREFIX.length + DATE_LENGTH);
30
+
31
+ if (day >= since) {
32
+ const counts = countsPerDay.get(pendingEvent);
33
+ counts[day] = (counts[day] || 0) + 1;
34
+ }
35
+
36
+ pendingEvent = undefined;
37
+ } else if (countsPerDay.has(line)) {
38
+ pendingEvent = line;
21
39
  }
22
40
  }
23
41
 
24
- const filteredDays = Object.fromEntries(
25
- Object.entries(days).filter(([key]) => {
26
- return key.localeCompare(since) >= 0;
27
- }),
28
- );
42
+ return countsPerDay;
43
+ }
44
+
45
+ async function* readLines(filepath) {
46
+ let remainder = '';
47
+
48
+ for await (const chunk of fs.createReadStream(filepath, 'utf-8')) {
49
+ const lines = (remainder + chunk).split('\n');
50
+ remainder = lines.pop();
51
+ yield* lines;
52
+ }
53
+
54
+ if (remainder) {
55
+ yield remainder;
56
+ }
57
+ }
29
58
 
30
- const sum = Object.entries(filteredDays).reduce((result, [, value]) => result + value, 0);
59
+ function getStats(event, countsPerDay, since) {
60
+ const daysCount = Math.ceil((Date.now() - Number(new Date(since))) / DAY);
61
+ const sum = Object.values(countsPerDay).reduce((result, count) => result + count, 0);
31
62
 
32
- return { daysCount, event, filteredDays, sum };
33
- };
63
+ return { daysCount, event, countsPerDay, sum };
64
+ }
34
65
 
35
- const printStats = ({ daysCount, event, filteredDays, sum }) => {
66
+ function printStats({ daysCount, event, countsPerDay, sum }) {
36
67
  console.log('--------------------------------------');
37
68
  console.log(event);
38
69
  console.log('--------------------------------------');
39
70
  console.log(`Sum: ${sum}`);
40
71
  console.log(`Avg: ${sum / daysCount}`);
41
- console.table(filteredDays);
42
- };
43
-
44
- const filepath = path.resolve(os.homedir(), '.scrabble-solver', 'logs', 'all.log');
45
- const file = fs.readFileSync(filepath, 'utf-8');
46
- const lines = file.split('\n');
47
- const since = argv[2] || '2021-06-01';
48
- const events = [` message: 'visit - request',`, ` message: 'solve - request',`, ` message: 'dictionary - request',`];
49
-
50
- for (const event of events) {
51
- printStats(getStats(event, lines, since));
72
+ console.table(countsPerDay);
52
73
  }
@@ -1 +1 @@
1
- nvGZh1gPuX98L07YmxlYD
1
+ 8WnIUTe-yJvPD6stltvYI
@@ -4,35 +4,35 @@
4
4
  ],
5
5
  "devFiles": [],
6
6
  "lowPriorityFiles": [
7
- "static/nvGZh1gPuX98L07YmxlYD/_buildManifest.js",
8
- "static/nvGZh1gPuX98L07YmxlYD/_ssgManifest.js"
7
+ "static/8WnIUTe-yJvPD6stltvYI/_buildManifest.js",
8
+ "static/8WnIUTe-yJvPD6stltvYI/_ssgManifest.js"
9
9
  ],
10
10
  "rootMainFiles": [],
11
11
  "rootMainFilesTree": {},
12
12
  "pages": {
13
13
  "/": [
14
- "static/chunks/webpack-9f5c9d275348829b.js",
14
+ "static/chunks/webpack-d7138f1ef6b8c9d6.js",
15
15
  "static/chunks/framework-626cbd48ac5aca57.js",
16
16
  "static/chunks/main-7e52da35a4beea0b.js",
17
17
  "static/chunks/101-829ab8a8d310e7a0.js",
18
18
  "static/css/a691348b788f8bc0.css",
19
- "static/chunks/pages/index-b5bf018100015277.js"
19
+ "static/chunks/pages/index-b073a1686818dd26.js"
20
20
  ],
21
21
  "/_app": [
22
- "static/chunks/webpack-9f5c9d275348829b.js",
22
+ "static/chunks/webpack-d7138f1ef6b8c9d6.js",
23
23
  "static/chunks/framework-626cbd48ac5aca57.js",
24
24
  "static/chunks/main-7e52da35a4beea0b.js",
25
25
  "static/css/92f85ce358a0a468.css",
26
- "static/chunks/pages/_app-f9ec81278ffa7b1a.js"
26
+ "static/chunks/pages/_app-e3fe880e24c024ab.js"
27
27
  ],
28
28
  "/_error": [
29
- "static/chunks/webpack-9f5c9d275348829b.js",
29
+ "static/chunks/webpack-d7138f1ef6b8c9d6.js",
30
30
  "static/chunks/framework-626cbd48ac5aca57.js",
31
31
  "static/chunks/main-7e52da35a4beea0b.js",
32
32
  "static/chunks/pages/_error-f0290a98eb3ed0ec.js"
33
33
  ],
34
34
  "/not-found": [
35
- "static/chunks/webpack-9f5c9d275348829b.js",
35
+ "static/chunks/webpack-d7138f1ef6b8c9d6.js",
36
36
  "static/chunks/framework-626cbd48ac5aca57.js",
37
37
  "static/chunks/main-7e52da35a4beea0b.js",
38
38
  "static/css/dee878eb64099d92.css",
@@ -1 +1 @@
1
- {"previewModeId":"a0d7e48d2f751f641ae8d4e15ae2a9dc","previewModeSigningKey":"80604c8e4164b32e142703706235bffd675c80348fdfef7f93e5d13ef7760c2a","previewModeEncryptionKey":"356a31690fd9d3054c9de7112f4dee3c0d25d77d322ea00b9f7e8c673ddd0a88","expireAt":1788642382928}
1
+ {"previewModeId":"d56d08e80e1c264fb9d5bd2f046d21e9","previewModeSigningKey":"710dfc296ee593a012938c12ca917fa8a7e3ee8c4ee055414ad75479b6de3c74","previewModeEncryptionKey":"b8cd042dcfa5ffc82dead343e6d398a5c6e43f0914c1fcf246c66c0a019c64ed","expireAt":1788815296531}
@@ -1 +1 @@
1
- {"encryption.key":"uC1/GoeGHlLbV2czZ46EDoCC+XobPQZuP42mkVQI9ws=","encryption.expire_at":1788642382925}
1
+ {"encryption.key":"YarGHnilucy7AOI9ayDZUAGfe4eQGgej5vNDdcCPS2k=","encryption.expire_at":1788815296528}