scrabble-solver 2.15.25 → 2.16.0-alpha.1

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 (125) hide show
  1. package/.github/workflows/build.yml +3 -5
  2. package/.github/workflows/{npx.yml → bunx.yml} +7 -11
  3. package/.github/workflows/deploy.yml +2 -2
  4. package/.github/workflows/{cypress.yml → e2e-tests.yml} +7 -7
  5. package/.github/workflows/oxfmt.yml +3 -5
  6. package/.github/workflows/oxlint.yml +4 -6
  7. package/.github/workflows/{jest.yml → unit-tests.yml} +6 -8
  8. package/.nx/workspace-data/d/server-process.json +5 -0
  9. package/.nx/workspace-data/file-map.json +467 -455
  10. package/.nx/workspace-data/lockfile-dependencies.hash +1 -1
  11. package/.nx/workspace-data/lockfile-nodes.hash +1 -1
  12. package/.nx/workspace-data/nx_files.nxt +0 -0
  13. package/.nx/workspace-data/parsed-lock-file.dependencies.json +5301 -11011
  14. package/.nx/workspace-data/parsed-lock-file.nodes.json +16259 -7681
  15. package/.nx/workspace-data/project-graph.json +25619 -19944
  16. package/.nx/workspace-data/source-maps.json +96 -0
  17. package/.oxlintrc.json +0 -2
  18. package/CLAUDE.md +120 -0
  19. package/README.md +26 -20
  20. package/bin/scrabble-solver.js +1 -1
  21. package/bump-version.js +4 -4
  22. package/bun-test-globals.d.ts +1 -0
  23. package/bun.lock +3984 -0
  24. package/bun.test.preload.ts +21 -0
  25. package/bunfig.toml +2 -0
  26. package/lerna.json +1 -1
  27. package/package.json +19 -21
  28. package/packages/configs/package.json +3 -3
  29. package/packages/constants/package.json +1 -1
  30. package/packages/dictionaries/package.json +4 -4
  31. package/packages/logger/package.json +1 -1
  32. package/packages/scrabble-solver/.next/BUILD_ID +1 -1
  33. package/packages/scrabble-solver/.next/build-manifest.json +5 -5
  34. package/packages/scrabble-solver/.next/cache/.previewinfo +1 -1
  35. package/packages/scrabble-solver/.next/cache/.rscinfo +1 -1
  36. package/packages/scrabble-solver/.next/cache/.tsbuildinfo +1 -1
  37. package/packages/scrabble-solver/.next/cache/webpack/client-production/0.pack +0 -0
  38. package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack +0 -0
  39. package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack.old +0 -0
  40. package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/index.pack +0 -0
  41. package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/index.pack.old +0 -0
  42. package/packages/scrabble-solver/.next/cache/webpack/server-production/0.pack +0 -0
  43. package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack +0 -0
  44. package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack.old +0 -0
  45. package/packages/scrabble-solver/.next/prerender-manifest.json +4 -4
  46. package/packages/scrabble-solver/.next/required-server-files.js +2 -1
  47. package/packages/scrabble-solver/.next/required-server-files.json +2 -1
  48. package/packages/scrabble-solver/.next/routes-manifest.json +1 -1
  49. package/packages/scrabble-solver/.next/server/chunks/712.js +1 -1
  50. package/packages/scrabble-solver/.next/server/middleware-build-manifest.js +1 -1
  51. package/packages/scrabble-solver/.next/server/pages/404.html +1 -1
  52. package/packages/scrabble-solver/.next/server/pages/500.html +1 -1
  53. package/packages/scrabble-solver/.next/server/pages/_app.js.nft.json +1 -1
  54. package/packages/scrabble-solver/.next/server/pages/_error.js.nft.json +1 -1
  55. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale]/[word].js.nft.json +1 -1
  56. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale].js.nft.json +1 -1
  57. package/packages/scrabble-solver/.next/server/pages/api/solve.js +1 -1
  58. package/packages/scrabble-solver/.next/server/pages/api/solve.js.nft.json +1 -1
  59. package/packages/scrabble-solver/.next/server/pages/api/verify.js.nft.json +1 -1
  60. package/packages/scrabble-solver/.next/server/pages/api/visit.js.nft.json +1 -1
  61. package/packages/scrabble-solver/.next/server/pages/index.html +1 -1
  62. package/packages/scrabble-solver/.next/server/pages/index.js.nft.json +1 -1
  63. package/packages/scrabble-solver/.next/server/pages/index.json +1 -1
  64. package/packages/scrabble-solver/.next/server/pages/not-found.html +1 -1
  65. package/packages/scrabble-solver/.next/server/webpack-api-runtime.js +1 -1
  66. package/packages/scrabble-solver/.next/static/{FDUqldlsD7FXe6iWhIJmu → YS42EFHDGPCCe3JyeXaNi}/_buildManifest.js +1 -1
  67. package/packages/scrabble-solver/.next/static/chunks/pages/{_app-c0932b8ca24945cb.js → _app-9c9aaea7b6881765.js} +4 -4
  68. package/packages/scrabble-solver/.next/static/chunks/pages/{index-08b3b0a754095919.js → index-e9ea63e97865edcf.js} +1 -1
  69. package/packages/scrabble-solver/.next/static/css/{500cdc9a24075d91.css → 78726ae7cf7a5497.css} +1 -1
  70. package/packages/scrabble-solver/.next/trace +21 -21
  71. package/packages/scrabble-solver/.next/trace-build +1 -1
  72. package/packages/scrabble-solver/README.md +3 -3
  73. package/packages/scrabble-solver/next.config.js +1 -0
  74. package/packages/scrabble-solver/package.json +9 -8
  75. package/packages/scrabble-solver/public/service-worker.js +1 -1
  76. package/packages/scrabble-solver/src/@types/scss.d.ts +5 -0
  77. package/packages/scrabble-solver/src/components/Board/Board.module.scss +2 -2
  78. package/packages/scrabble-solver/src/components/Board/components/Actions/Actions.module.scss +1 -1
  79. package/packages/scrabble-solver/src/components/Board/components/Cell/Cell.module.scss +26 -6
  80. package/packages/scrabble-solver/src/components/Board/components/InputPrompt/InputPrompt.module.scss +1 -1
  81. package/packages/scrabble-solver/src/components/Button/Button.module.scss +1 -1
  82. package/packages/scrabble-solver/src/components/Dictionary/Dictionary.module.scss +1 -1
  83. package/packages/scrabble-solver/src/components/DictionaryInput/DictionaryInput.module.scss +1 -1
  84. package/packages/scrabble-solver/src/components/IconButton/IconButton.module.scss +1 -1
  85. package/packages/scrabble-solver/src/components/Loading/Loading.module.scss +1 -1
  86. package/packages/scrabble-solver/src/components/Modal/Modal.module.scss +1 -1
  87. package/packages/scrabble-solver/src/components/NotFound/NotFound.module.scss +1 -1
  88. package/packages/scrabble-solver/src/components/PlainTiles/PlainTiles.module.scss +1 -1
  89. package/packages/scrabble-solver/src/components/Rack/Rack.module.scss +11 -6
  90. package/packages/scrabble-solver/src/components/Rack/components/InputPrompt/InputPrompt.module.scss +1 -1
  91. package/packages/scrabble-solver/src/components/Rack/components/RackTile/RackTile.module.scss +1 -1
  92. package/packages/scrabble-solver/src/components/Radio/Radio.module.scss +1 -1
  93. package/packages/scrabble-solver/src/components/Results/Results.module.scss +1 -1
  94. package/packages/scrabble-solver/src/components/ResultsInput/ResultsInput.module.scss +1 -1
  95. package/packages/scrabble-solver/src/components/Solver/Solver.module.scss +1 -1
  96. package/packages/scrabble-solver/src/components/Solver/components/InsertButton/InsertButton.module.scss +1 -1
  97. package/packages/scrabble-solver/src/components/Solver/components/ResultCandidatePicker/ResultCandidatePicker.module.scss +1 -1
  98. package/packages/scrabble-solver/src/components/Spinner/Spinner.module.scss +1 -1
  99. package/packages/scrabble-solver/src/components/Tile/Tile.module.scss +1 -1
  100. package/packages/scrabble-solver/src/hooks/useLocalStorage.ts +4 -52
  101. package/packages/scrabble-solver/src/lib/isMac.ts +1 -1
  102. package/packages/scrabble-solver/src/modals/MenuModal/MenuModal.module.scss +1 -1
  103. package/packages/scrabble-solver/src/modals/RemainingTilesModal/components/Character/Character.module.scss +1 -1
  104. package/packages/scrabble-solver/src/modals/ResultsModal/ResultsModal.module.scss +1 -1
  105. package/packages/scrabble-solver/src/modals/SettingsModal/components/LocaleSetting/LocaleSetting.module.scss +1 -1
  106. package/packages/scrabble-solver/src/parameters/index.ts +45 -44
  107. package/packages/scrabble-solver/src/state/localStorage.ts +42 -52
  108. package/packages/scrabble-solver/src/state/settings/initialState.ts +7 -7
  109. package/packages/scrabble-solver/src/styles/_tokens.scss +59 -0
  110. package/packages/scrabble-solver/src/styles/global.scss +3 -3
  111. package/packages/scrabble-solver/src/styles/mixins.scss +13 -12
  112. package/packages/scrabble-solver/src/styles/variables.module.scss +53 -0
  113. package/packages/scrabble-solver/src/styles/variables.scss +44 -41
  114. package/packages/scrabble-solver/tsconfig.tsbuildinfo +1 -1
  115. package/packages/solver/package.json +7 -6
  116. package/packages/types/package.json +2 -2
  117. package/packages/word-definitions/package.json +4 -3
  118. package/packages/word-definitions/src/parse.test.ts +7 -2
  119. package/packages/word-lists/package.json +2 -2
  120. package/todo.txt +3 -0
  121. package/tsconfig.json +1 -1
  122. package/jest.config.js +0 -15
  123. package/jest.setup.js +0 -6
  124. package/tsconfig.jest.json +0 -10
  125. /package/packages/scrabble-solver/.next/static/{FDUqldlsD7FXe6iWhIJmu → YS42EFHDGPCCe3JyeXaNi}/_ssgManifest.js +0 -0
@@ -0,0 +1,21 @@
1
+ import { plugin } from 'bun';
2
+
3
+ plugin({
4
+ name: 'scss-mock',
5
+ setup(build) {
6
+ build.onLoad({ filter: /\.scss$/ }, () => ({
7
+ contents: `
8
+ const proxy = new Proxy({}, {
9
+ get(_, key) {
10
+ if (typeof key === 'symbol') return undefined;
11
+ if (key === 'default') return proxy;
12
+ if (key === '__esModule') return true;
13
+ return key;
14
+ },
15
+ });
16
+ export default proxy;
17
+ `,
18
+ loader: 'js',
19
+ }));
20
+ },
21
+ });
package/bunfig.toml ADDED
@@ -0,0 +1,2 @@
1
+ [test]
2
+ preload = ["./bun.test.preload.ts"]
package/lerna.json CHANGED
@@ -6,6 +6,6 @@
6
6
  "access": "public"
7
7
  },
8
8
  "tagVersionPrefix": "",
9
- "version": "2.15.25",
9
+ "version": "2.16.0-alpha.1",
10
10
  "$schema": "node_modules/lerna/schemas/lerna-schema.json"
11
11
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scrabble-solver",
3
- "version": "2.15.25",
3
+ "version": "2.16.0-alpha.1",
4
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.",
5
5
  "keywords": [
6
6
  "Scrabble",
@@ -40,35 +40,34 @@
40
40
  "App"
41
41
  ],
42
42
  "engines": {
43
+ "bun": ">=1.3",
43
44
  "node": ">=24"
44
45
  },
45
46
  "bin": {
46
47
  "scrabble-solver": "./bin/scrabble-solver.js"
47
48
  },
48
49
  "scripts": {
49
- "build": "npm run build -w packages",
50
- "clean": "npm run clean -w packages && rimraf node_modules/",
51
- "dev": "npm run dev -w @scrabble-solver/scrabble-solver",
50
+ "build": "bun run --filter './packages/*' build",
51
+ "clean": "bun run --filter './packages/*' clean && rimraf node_modules/",
52
+ "dev": "bun run --filter @scrabble-solver/scrabble-solver dev",
52
53
  "format": "oxfmt --check './**/*.{js,ts,tsx,scss}'",
53
54
  "format:fix": "oxfmt './**/*.{js,ts,tsx,scss}'",
54
55
  "lint": "oxlint cypress packages",
55
- "lint:fix": "npm run lint -- --fix",
56
- "reinstall": "npm run clean && npm install && npm run build",
57
- "release": "npm run release:prepare && npm run release:publish",
58
- "release:prepare": "npm run reinstall",
59
- "release:publish": "npm run version:bump && np && lerna publish from-package --yes",
60
- "start": "concurrently -n w: npm:start:*",
61
- "start:app": "npm run start -w @scrabble-solver/scrabble-solver",
56
+ "lint:fix": "bun run lint --fix",
57
+ "reinstall": "bun run clean && bun install && bun run build",
58
+ "release": "bun run release:prepare && bun run release:publish",
59
+ "release:prepare": "bun run reinstall",
60
+ "release:publish": "bun run version:bump && np --no-cleanup --package-manager bun && lerna publish from-package --yes",
61
+ "start": "concurrently -n w: bun:start:*",
62
+ "start:app": "bun run --filter @scrabble-solver/scrabble-solver start",
62
63
  "start:browser": "wait-on http://localhost:3333 && open-cli http://localhost:3333",
63
- "test": "npm run build && npm run test-jest && concurrently \"npm run start:app\" \"npm run test-cypress:run\" -k -s first",
64
+ "test": "bun run build && bun run test-unit && start-server-and-test start:app http://localhost:3333 test-cypress:run",
64
65
  "test-cypress": "cypress open",
65
66
  "test-cypress:run": "CYPRESS_BASE_URL=http://localhost:3333 cypress run",
66
- "test-jest": "jest --no-cache --coverage",
67
- "test-jest:debug": "node --inspect-brk node_modules/.bin/jest --runInBand --no-cache --watch",
68
- "test-jest:watch": "jest --no-cache --watch",
69
- "version:bump": "npm run version:bump-lerna && npm run version:commit",
67
+ "test-unit": "bun run --filter '*' test",
68
+ "version:bump": "bun run version:bump-lerna && bun run version:commit",
70
69
  "version:bump-lerna": "lerna version --force-publish --no-git-tag-version --no-push",
71
- "version:commit": "node bump-version.js && git add . && git commit -m \"Bump version\""
70
+ "version:commit": "bun bump-version.js && git add . && git commit -m \"Bump version\""
72
71
  },
73
72
  "repository": {
74
73
  "type": "git",
@@ -96,7 +95,7 @@
96
95
  "packages/scrabble-solver"
97
96
  ],
98
97
  "dependencies": {
99
- "@scrabble-solver/scrabble-solver": "^2.15.25",
98
+ "@scrabble-solver/scrabble-solver": "^2.16.0-alpha.1",
100
99
  "concurrently": "^9.2.1",
101
100
  "open-cli": "^9.0.0",
102
101
  "wait-on": "^9.0.5"
@@ -106,7 +105,7 @@
106
105
  "@babel/plugin-proposal-class-properties": "^7.18.6",
107
106
  "@babel/preset-env": "^7.29.2",
108
107
  "@testing-library/cypress": "^10.1.0",
109
- "@types/jest": "^30.0.0",
108
+ "@types/bun": "^1.3.13",
110
109
  "@types/node": "^25.6.0",
111
110
  "@typescript/native-preview": "^7.0.0-dev.20260426.1",
112
111
  "cypress": "^15.14.1",
@@ -115,14 +114,13 @@
115
114
  "eslint-plugin-import": "^2.32.0",
116
115
  "eslint-plugin-mocha": "^11.2.0",
117
116
  "eslint-plugin-react": "^7.37.5",
118
- "jest": "30.3.0",
119
117
  "lerna": "^9.0.7",
120
118
  "np": "^11.2.0",
121
119
  "oxfmt": "^0.46.0",
122
120
  "oxlint": "^1.61.0",
123
121
  "oxlint-tsgolint": "^0.22.0",
124
122
  "rimraf": "^6.1.3",
125
- "ts-jest": "^29.4.9",
123
+ "start-server-and-test": "^3.0.2",
126
124
  "typescript": "^6.0.3"
127
125
  }
128
126
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/configs",
3
- "version": "2.15.25",
3
+ "version": "2.16.0-alpha.1",
4
4
  "description": "Scrabble Solver 2 - Configs",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -23,8 +23,8 @@
23
23
  "clean": "rimraf build/"
24
24
  },
25
25
  "dependencies": {
26
- "@scrabble-solver/constants": "^2.15.25",
27
- "@scrabble-solver/types": "^2.15.25"
26
+ "@scrabble-solver/constants": "^2.16.0-alpha.1",
27
+ "@scrabble-solver/types": "^2.16.0-alpha.1"
28
28
  },
29
29
  "gitHead": "1e2d1ad49a288d4a44196d8e3336740da132c637"
30
30
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/constants",
3
- "version": "2.15.25",
3
+ "version": "2.16.0-alpha.1",
4
4
  "description": "Scrabble Solver 2 - Constants",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/dictionaries",
3
- "version": "2.15.25",
3
+ "version": "2.16.0-alpha.1",
4
4
  "description": "Scrabble Solver 2 - Dictionaries",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -30,9 +30,9 @@
30
30
  },
31
31
  "dependencies": {
32
32
  "@kamilmielnik/trie": "^4.0.0",
33
- "@scrabble-solver/logger": "^2.15.25",
34
- "@scrabble-solver/types": "^2.15.25",
35
- "@scrabble-solver/word-lists": "^2.15.25"
33
+ "@scrabble-solver/logger": "^2.16.0-alpha.1",
34
+ "@scrabble-solver/types": "^2.16.0-alpha.1",
35
+ "@scrabble-solver/word-lists": "^2.16.0-alpha.1"
36
36
  },
37
37
  "gitHead": "1e2d1ad49a288d4a44196d8e3336740da132c637"
38
38
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/logger",
3
- "version": "2.15.25",
3
+ "version": "2.16.0-alpha.1",
4
4
  "description": "Scrabble Solver 2 - Logger",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -1 +1 @@
1
- FDUqldlsD7FXe6iWhIJmu
1
+ YS42EFHDGPCCe3JyeXaNi
@@ -4,8 +4,8 @@
4
4
  ],
5
5
  "devFiles": [],
6
6
  "lowPriorityFiles": [
7
- "static/FDUqldlsD7FXe6iWhIJmu/_buildManifest.js",
8
- "static/FDUqldlsD7FXe6iWhIJmu/_ssgManifest.js"
7
+ "static/YS42EFHDGPCCe3JyeXaNi/_buildManifest.js",
8
+ "static/YS42EFHDGPCCe3JyeXaNi/_ssgManifest.js"
9
9
  ],
10
10
  "rootMainFiles": [],
11
11
  "rootMainFilesTree": {},
@@ -15,14 +15,14 @@
15
15
  "static/chunks/framework-f7982db529c0590c.js",
16
16
  "static/chunks/main-65a5015b46ca9827.js",
17
17
  "static/css/addf6fd4f75742d0.css",
18
- "static/chunks/pages/index-08b3b0a754095919.js"
18
+ "static/chunks/pages/index-e9ea63e97865edcf.js"
19
19
  ],
20
20
  "/_app": [
21
21
  "static/chunks/webpack-1a7a166b34ed8d24.js",
22
22
  "static/chunks/framework-f7982db529c0590c.js",
23
23
  "static/chunks/main-65a5015b46ca9827.js",
24
- "static/css/500cdc9a24075d91.css",
25
- "static/chunks/pages/_app-c0932b8ca24945cb.js"
24
+ "static/css/78726ae7cf7a5497.css",
25
+ "static/chunks/pages/_app-9c9aaea7b6881765.js"
26
26
  ],
27
27
  "/_error": [
28
28
  "static/chunks/webpack-1a7a166b34ed8d24.js",
@@ -1 +1 @@
1
- {"previewModeId":"b17f41473ca9e1cf7c85e741e0ef40e9","previewModeSigningKey":"5039dadaa5d95534c7eecaa3cae1cffd254a713e58409133ef0f99d6ac0355be","previewModeEncryptionKey":"45152de3e8698f088d966bf94eeccc20a47022b4805099b7abe59575cf556e2d","expireAt":1778447810478}
1
+ {"previewModeId":"91ef6d34db5cf4a6dbd9deae85f7f116","previewModeSigningKey":"b8252f35e10dbdcbe3bb8fbecdbdf82270548aa92dcc9c6a740c8695bef90359","previewModeEncryptionKey":"844d9d6b067cab8faf6fd544c34f3026a7d632e51a2e7dbd60c6b50533c59c41","expireAt":1778604423874}
@@ -1 +1 @@
1
- {"encryption.key":"lURIHm4P239A+iXwpniIJkxpDLeFn61n/Dx8Md4JexQ=","encryption.expire_at":1778447810470}
1
+ {"encryption.key":"fex92z0sfwrLruZ0ZJpSpdNFF9+1ewp2Litxz57mU4A=","encryption.expire_at":1778604423872}