scrabble-solver 2.13.2 → 2.13.4
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.
- package/.github/workflows/build.yml +3 -4
- package/.github/workflows/eslint.yml +1 -1
- package/.github/workflows/test.yml +1 -2
- package/.nx/cache/file-map.json +2610 -0
- package/.nx/cache/lockfile.hash +1 -0
- package/.nx/cache/nx_files.nxt +0 -0
- package/.nx/cache/parsed-lock-file.json +32593 -0
- package/.nx/cache/project-graph.json +32416 -0
- package/README.md +7 -7
- package/lerna.json +1 -1
- package/package.json +36 -29
- package/packages/configs/package.json +4 -5
- package/packages/constants/package.json +2 -3
- package/packages/dictionaries/package-lock.json +2 -2
- package/packages/dictionaries/package.json +5 -6
- package/packages/logger/package-lock.json +15 -7
- package/packages/logger/package.json +3 -4
- package/packages/scrabble-solver/.next/BUILD_ID +1 -1
- package/packages/scrabble-solver/.next/build-manifest.json +16 -16
- package/packages/scrabble-solver/.next/cache/.tsbuildinfo +1 -1
- package/packages/scrabble-solver/.next/cache/eslint/.cache_8dgz12 +1 -1
- package/packages/scrabble-solver/.next/cache/webpack/client-production/0.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/0.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/index.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/server-production/0.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack +0 -0
- package/packages/scrabble-solver/.next/next-minimal-server.js.nft.json +1 -0
- package/packages/scrabble-solver/.next/next-server.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/prerender-manifest.js +1 -0
- package/packages/scrabble-solver/.next/prerender-manifest.json +1 -1
- package/packages/scrabble-solver/.next/required-server-files.json +1 -1
- package/packages/scrabble-solver/.next/routes-manifest.json +1 -1
- package/packages/scrabble-solver/.next/server/InjectManifest.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/chunks/28.js +1 -0
- package/packages/scrabble-solver/.next/server/chunks/331.js +6 -0
- package/packages/scrabble-solver/.next/server/chunks/577.js +1 -0
- package/packages/scrabble-solver/.next/server/chunks/911.js +1 -1083
- package/packages/scrabble-solver/.next/server/chunks/977.js +1 -0
- package/packages/scrabble-solver/.next/server/functions-config-manifest.json +1 -0
- package/packages/scrabble-solver/.next/server/middleware-build-manifest.js +1 -1
- package/packages/scrabble-solver/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/packages/scrabble-solver/.next/server/next-font-manifest.js +1 -1
- package/packages/scrabble-solver/.next/server/next-font-manifest.json +1 -6
- package/packages/scrabble-solver/.next/server/pages/404.html +1 -1
- package/packages/scrabble-solver/.next/server/pages/404.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/500.html +1 -1
- package/packages/scrabble-solver/.next/server/pages/_app.js +1 -380
- package/packages/scrabble-solver/.next/server/pages/_app.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/_document.js +1 -212
- package/packages/scrabble-solver/.next/server/pages/_document.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/_error.js +1 -166
- package/packages/scrabble-solver/.next/server/pages/_error.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale]/[word].js +2 -836
- package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale]/[word].js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale].js +1 -192
- package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale].js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/api/solve.js +1 -1121
- package/packages/scrabble-solver/.next/server/pages/api/solve.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/api/verify.js +1 -213
- package/packages/scrabble-solver/.next/server/pages/api/verify.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/api/visit.js +1 -131
- package/packages/scrabble-solver/.next/server/pages/api/visit.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/index.html +1 -1
- package/packages/scrabble-solver/.next/server/pages/index.js +1 -2088
- package/packages/scrabble-solver/.next/server/pages/index.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/index.json +1 -1
- package/packages/scrabble-solver/.next/server/pages-manifest.json +1 -12
- package/packages/scrabble-solver/.next/server/webpack-api-runtime.js +1 -172
- package/packages/scrabble-solver/.next/server/webpack-runtime.js +1 -229
- package/packages/scrabble-solver/.next/static/chunks/framework-1728d40275bc359a.js +49 -0
- package/packages/scrabble-solver/.next/static/chunks/main-5fb7abbfc135de15.js +1 -0
- package/packages/scrabble-solver/.next/static/chunks/pages/404-b6e238bb4117d451.js +1 -0
- package/packages/scrabble-solver/.next/static/chunks/pages/_app-b95404c40a0092e6.js +17 -0
- package/packages/scrabble-solver/.next/static/chunks/pages/_error-db043fa3544f8809.js +1 -0
- package/packages/scrabble-solver/.next/static/chunks/pages/index-59d569ef79bc2580.js +1 -0
- package/packages/scrabble-solver/.next/static/css/8fa2fb99b90e109e.css +1 -0
- package/packages/scrabble-solver/.next/static/css/c80ebc6fd13311f1.css +2 -0
- package/packages/scrabble-solver/.next/static/jyVoCYlAT5PMzOeavr5AX/_buildManifest.js +1 -0
- package/packages/scrabble-solver/.next/trace +44 -51
- package/packages/scrabble-solver/package-lock.json +754 -524
- package/packages/scrabble-solver/package.json +30 -31
- package/packages/scrabble-solver/public/service-worker.js +2 -0
- package/packages/scrabble-solver/public/service-worker.js.map +1 -0
- package/packages/scrabble-solver/src/state/slices/boardSlice.ts +4 -4
- package/packages/scrabble-solver/src/state/store.ts +1 -1
- package/packages/solver/package-lock.json +2 -2
- package/packages/solver/package.json +6 -7
- package/packages/types/package.json +3 -4
- package/packages/word-definitions/package-lock.json +10 -10
- package/packages/word-definitions/package.json +5 -5
- package/packages/word-lists/package-lock.json +22 -22
- package/packages/word-lists/package.json +8 -9
- package/tsconfig.json +1 -1
- package/packages/configs/dictionaries/build/Dictionaries.d.ts +0 -13
- package/packages/configs/dictionaries/build/Dictionaries.js +0 -46
- package/packages/configs/dictionaries/build/constants/index.d.ts +0 -3
- package/packages/configs/dictionaries/build/constants/index.js +0 -11
- package/packages/configs/dictionaries/build/index.d.ts +0 -3
- package/packages/configs/dictionaries/build/index.js +0 -23
- package/packages/configs/dictionaries/build/lib/DiskCache.d.ts +0 -11
- package/packages/configs/dictionaries/build/lib/DiskCache.js +0 -48
- package/packages/configs/dictionaries/build/lib/LayeredCache.d.ts +0 -13
- package/packages/configs/dictionaries/build/lib/LayeredCache.js +0 -55
- package/packages/configs/dictionaries/build/lib/MemoryCache.d.ts +0 -13
- package/packages/configs/dictionaries/build/lib/MemoryCache.js +0 -32
- package/packages/configs/dictionaries/build/lib/createAsyncProxy.d.ts +0 -3
- package/packages/configs/dictionaries/build/lib/createAsyncProxy.js +0 -18
- package/packages/configs/dictionaries/build/lib/createCacheTimestampComparator.d.ts +0 -5
- package/packages/configs/dictionaries/build/lib/createCacheTimestampComparator.js +0 -19
- package/packages/configs/dictionaries/build/lib/downloadDictionary.d.ts +0 -4
- package/packages/configs/dictionaries/build/lib/downloadDictionary.js +0 -16
- package/packages/configs/dictionaries/build/lib/getDictionaryFilepath.d.ts +0 -3
- package/packages/configs/dictionaries/build/lib/getDictionaryFilepath.js +0 -11
- package/packages/configs/dictionaries/build/lib/index.d.ts +0 -7
- package/packages/configs/dictionaries/build/lib/index.js +0 -20
- package/packages/configs/dictionaries/build/types/Cache.d.ts +0 -8
- package/packages/configs/dictionaries/build/types/Cache.js +0 -2
- package/packages/configs/dictionaries/build/types/index.d.ts +0 -1
- package/packages/configs/dictionaries/build/types/index.js +0 -2
- package/packages/scrabble-solver/.next/cache/next-server.js.nft.json +0 -1
- package/packages/scrabble-solver/.next/server/chunks/210.js +0 -109
- package/packages/scrabble-solver/.next/server/chunks/277.js +0 -11942
- package/packages/scrabble-solver/.next/server/chunks/44.js +0 -1838
- package/packages/scrabble-solver/.next/server/chunks/50.js +0 -12119
- package/packages/scrabble-solver/.next/server/chunks/636.js +0 -286
- package/packages/scrabble-solver/.next/server/chunks/675.js +0 -572
- package/packages/scrabble-solver/.next/server/chunks/859.js +0 -835
- package/packages/scrabble-solver/.next/server/chunks/865.js +0 -20424
- package/packages/scrabble-solver/.next/server/chunks/907.js +0 -42530
- package/packages/scrabble-solver/.next/server/chunks/987.js +0 -91
- package/packages/scrabble-solver/.next/static/16S6EJJ0_LRmtRPwnUIw5/_buildManifest.js +0 -1
- package/packages/scrabble-solver/.next/static/chunks/framework-2c29dc3cd933590b.js +0 -49
- package/packages/scrabble-solver/.next/static/chunks/main-4dcb7f9b52833aba.js +0 -1
- package/packages/scrabble-solver/.next/static/chunks/pages/404-b4b5ce15153d4825.js +0 -1
- package/packages/scrabble-solver/.next/static/chunks/pages/_app-122dc8ecfa0220d5.js +0 -32
- package/packages/scrabble-solver/.next/static/chunks/pages/_error-54de1933a164a1ff.js +0 -1
- package/packages/scrabble-solver/.next/static/chunks/pages/index-f56eaa969a831c70.js +0 -1
- package/packages/scrabble-solver/.next/static/css/4e8b47fe382a8a8f.css +0 -2
- package/packages/scrabble-solver/.next/static/css/cfae5256f1689f57.css +0 -1
- /package/packages/scrabble-solver/.next/static/{16S6EJJ0_LRmtRPwnUIw5 → jyVoCYlAT5PMzOeavr5AX}/_ssgManifest.js +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
|
|
2
2
|
import { games } from '@scrabble-solver/configs';
|
|
3
3
|
import { EMPTY_CELL } from '@scrabble-solver/constants';
|
|
4
|
-
import { Board, Cell,
|
|
4
|
+
import { Board, Cell, Result, Tile } from '@scrabble-solver/types';
|
|
5
5
|
|
|
6
6
|
import boardInitialState from './boardInitialState';
|
|
7
7
|
import settingsSlice from './settingsSlice';
|
|
@@ -56,8 +56,8 @@ const boardSlice = createSlice({
|
|
|
56
56
|
return newBoard;
|
|
57
57
|
},
|
|
58
58
|
},
|
|
59
|
-
extraReducers: {
|
|
60
|
-
|
|
59
|
+
extraReducers: (builder) => {
|
|
60
|
+
builder.addCase(settingsSlice.actions.changeGame, (state, action) => {
|
|
61
61
|
const game = action.payload;
|
|
62
62
|
const config = Object.values(games).find((gameConfig) => gameConfig.game === game);
|
|
63
63
|
|
|
@@ -70,7 +70,7 @@ const boardSlice = createSlice({
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
return state;
|
|
73
|
-
}
|
|
73
|
+
});
|
|
74
74
|
},
|
|
75
75
|
});
|
|
76
76
|
|
|
@@ -26,7 +26,7 @@ const store = configureStore({
|
|
|
26
26
|
solve: solveSlice.reducer,
|
|
27
27
|
verify: verifySlice.reducer,
|
|
28
28
|
},
|
|
29
|
-
middleware: [sagaMiddleware],
|
|
29
|
+
middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat([sagaMiddleware]),
|
|
30
30
|
});
|
|
31
31
|
|
|
32
32
|
sagaMiddleware.run(rootSaga);
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scrabble-solver/solver",
|
|
3
|
-
"version": "2.13.
|
|
3
|
+
"version": "2.13.4",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@scrabble-solver/solver",
|
|
9
|
-
"version": "2.13.
|
|
9
|
+
"version": "2.13.4",
|
|
10
10
|
"license": "CC-BY-NC-ND-4.0",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@kamilmielnik/trie": "^2.0.1"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scrabble-solver/solver",
|
|
3
|
-
"version": "2.13.
|
|
3
|
+
"version": "2.13.4",
|
|
4
4
|
"description": "Scrabble Solver 2 - Solver",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -20,17 +20,16 @@
|
|
|
20
20
|
"homepage": "https://scrabble-solver.org",
|
|
21
21
|
"scripts": {
|
|
22
22
|
"build": "tsc --project .",
|
|
23
|
-
"clean": "rimraf build/
|
|
24
|
-
"clean:force": "npm run clean && rimraf package-lock.json"
|
|
23
|
+
"clean": "rimraf build/"
|
|
25
24
|
},
|
|
26
25
|
"dependencies": {
|
|
27
26
|
"@kamilmielnik/trie": "^2.0.1",
|
|
28
|
-
"@scrabble-solver/types": "^2.13.
|
|
27
|
+
"@scrabble-solver/types": "^2.13.4"
|
|
29
28
|
},
|
|
30
29
|
"devDependencies": {
|
|
31
|
-
"@scrabble-solver/configs": "^2.13.
|
|
32
|
-
"@scrabble-solver/constants": "^2.13.
|
|
33
|
-
"@scrabble-solver/dictionaries": "^2.13.
|
|
30
|
+
"@scrabble-solver/configs": "^2.13.4",
|
|
31
|
+
"@scrabble-solver/constants": "^2.13.4",
|
|
32
|
+
"@scrabble-solver/dictionaries": "^2.13.4"
|
|
34
33
|
},
|
|
35
34
|
"gitHead": "1e2d1ad49a288d4a44196d8e3336740da132c637"
|
|
36
35
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scrabble-solver/types",
|
|
3
|
-
"version": "2.13.
|
|
3
|
+
"version": "2.13.4",
|
|
4
4
|
"description": "Scrabble Solver 2 - Types",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -20,11 +20,10 @@
|
|
|
20
20
|
"homepage": "https://scrabble-solver.org",
|
|
21
21
|
"scripts": {
|
|
22
22
|
"build": "tsc --project .",
|
|
23
|
-
"clean": "rimraf build/
|
|
24
|
-
"clean:force": "npm run clean && rimraf package-lock.json"
|
|
23
|
+
"clean": "rimraf build/"
|
|
25
24
|
},
|
|
26
25
|
"dependencies": {
|
|
27
|
-
"@scrabble-solver/constants": "^2.13.
|
|
26
|
+
"@scrabble-solver/constants": "^2.13.4"
|
|
28
27
|
},
|
|
29
28
|
"gitHead": "1e2d1ad49a288d4a44196d8e3336740da132c637"
|
|
30
29
|
}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scrabble-solver/word-definitions",
|
|
3
|
-
"version": "2.13.
|
|
3
|
+
"version": "2.13.4",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@scrabble-solver/word-definitions",
|
|
9
|
-
"version": "2.13.
|
|
9
|
+
"version": "2.13.4",
|
|
10
10
|
"license": "CC-BY-NC-ND-4.0",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"cheerio": "^1.0.0-rc.12",
|
|
13
|
-
"follow-redirects": "^1.15.
|
|
13
|
+
"follow-redirects": "^1.15.5",
|
|
14
14
|
"striptags": "^3.2.0"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
|
-
"@types/follow-redirects": "^1.14.
|
|
17
|
+
"@types/follow-redirects": "^1.14.4"
|
|
18
18
|
}
|
|
19
19
|
},
|
|
20
20
|
"node_modules/@types/follow-redirects": {
|
|
21
|
-
"version": "1.14.
|
|
22
|
-
"resolved": "https://registry.npmjs.org/@types/follow-redirects/-/follow-redirects-1.14.
|
|
23
|
-
"integrity": "sha512-
|
|
21
|
+
"version": "1.14.4",
|
|
22
|
+
"resolved": "https://registry.npmjs.org/@types/follow-redirects/-/follow-redirects-1.14.4.tgz",
|
|
23
|
+
"integrity": "sha512-GWXfsD0Jc1RWiFmMuMFCpXMzi9L7oPDVwxUnZdg89kDNnqsRfUKXEtUYtA98A6lig1WXH/CYY/fvPW9HuN5fTA==",
|
|
24
24
|
"dev": true,
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@types/node": "*"
|
|
@@ -165,9 +165,9 @@
|
|
|
165
165
|
}
|
|
166
166
|
},
|
|
167
167
|
"node_modules/follow-redirects": {
|
|
168
|
-
"version": "1.15.
|
|
169
|
-
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.
|
|
170
|
-
"integrity": "sha512-
|
|
168
|
+
"version": "1.15.5",
|
|
169
|
+
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
|
|
170
|
+
"integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
|
|
171
171
|
"funding": [
|
|
172
172
|
{
|
|
173
173
|
"type": "individual",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scrabble-solver/word-definitions",
|
|
3
|
-
"version": "2.13.
|
|
3
|
+
"version": "2.13.4",
|
|
4
4
|
"description": "Scrabble Solver 2 - Word definitions",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -20,15 +20,15 @@
|
|
|
20
20
|
"homepage": "https://scrabble-solver.org",
|
|
21
21
|
"scripts": {
|
|
22
22
|
"build": "tsc --project .",
|
|
23
|
-
"clean": "rimraf build/
|
|
23
|
+
"clean": "rimraf build/"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@scrabble-solver/types": "^2.13.
|
|
26
|
+
"@scrabble-solver/types": "^2.13.4",
|
|
27
27
|
"cheerio": "^1.0.0-rc.12",
|
|
28
|
-
"follow-redirects": "^1.15.
|
|
28
|
+
"follow-redirects": "^1.15.5",
|
|
29
29
|
"striptags": "^3.2.0"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@types/follow-redirects": "^1.14.
|
|
32
|
+
"@types/follow-redirects": "^1.14.4"
|
|
33
33
|
}
|
|
34
34
|
}
|
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scrabble-solver/word-lists",
|
|
3
|
-
"version": "2.13.
|
|
3
|
+
"version": "2.13.4",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@scrabble-solver/word-lists",
|
|
9
|
-
"version": "2.13.
|
|
9
|
+
"version": "2.13.4",
|
|
10
10
|
"license": "CC-BY-NC-ND-4.0",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"cheerio": "^1.0.0-rc.12",
|
|
13
|
-
"follow-redirects": "^1.15.
|
|
13
|
+
"follow-redirects": "^1.15.5",
|
|
14
14
|
"latinize": "^1.0.0",
|
|
15
|
-
"unzipper": "^0.10.
|
|
15
|
+
"unzipper": "^0.10.14"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
|
-
"@types/follow-redirects": "^1.14.
|
|
19
|
-
"@types/latinize": "^0.2.
|
|
20
|
-
"@types/unzipper": "^0.10.
|
|
18
|
+
"@types/follow-redirects": "^1.14.4",
|
|
19
|
+
"@types/latinize": "^0.2.18",
|
|
20
|
+
"@types/unzipper": "^0.10.9"
|
|
21
21
|
}
|
|
22
22
|
},
|
|
23
23
|
"node_modules/@types/follow-redirects": {
|
|
24
|
-
"version": "1.14.
|
|
25
|
-
"resolved": "https://registry.npmjs.org/@types/follow-redirects/-/follow-redirects-1.14.
|
|
26
|
-
"integrity": "sha512-
|
|
24
|
+
"version": "1.14.4",
|
|
25
|
+
"resolved": "https://registry.npmjs.org/@types/follow-redirects/-/follow-redirects-1.14.4.tgz",
|
|
26
|
+
"integrity": "sha512-GWXfsD0Jc1RWiFmMuMFCpXMzi9L7oPDVwxUnZdg89kDNnqsRfUKXEtUYtA98A6lig1WXH/CYY/fvPW9HuN5fTA==",
|
|
27
27
|
"dev": true,
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@types/node": "*"
|
|
30
30
|
}
|
|
31
31
|
},
|
|
32
32
|
"node_modules/@types/latinize": {
|
|
33
|
-
"version": "0.2.
|
|
34
|
-
"resolved": "https://registry.npmjs.org/@types/latinize/-/latinize-0.2.
|
|
35
|
-
"integrity": "sha512-
|
|
33
|
+
"version": "0.2.18",
|
|
34
|
+
"resolved": "https://registry.npmjs.org/@types/latinize/-/latinize-0.2.18.tgz",
|
|
35
|
+
"integrity": "sha512-QjX4tcVEOcqDakv96sLMA2ESMcxSJel5KHxmcBgeTlZI7v6gFx9Tjqmt5+Pp8ijfGGr6CxuXzDNYk8A/iZ/GiA==",
|
|
36
36
|
"dev": true
|
|
37
37
|
},
|
|
38
38
|
"node_modules/@types/node": {
|
|
@@ -42,9 +42,9 @@
|
|
|
42
42
|
"dev": true
|
|
43
43
|
},
|
|
44
44
|
"node_modules/@types/unzipper": {
|
|
45
|
-
"version": "0.10.
|
|
46
|
-
"resolved": "https://registry.npmjs.org/@types/unzipper/-/unzipper-0.10.
|
|
47
|
-
"integrity": "sha512-
|
|
45
|
+
"version": "0.10.9",
|
|
46
|
+
"resolved": "https://registry.npmjs.org/@types/unzipper/-/unzipper-0.10.9.tgz",
|
|
47
|
+
"integrity": "sha512-vHbmFZAw8emNAOVkHVbS3qBnbr0x/qHQZ+ei1HE7Oy6Tyrptl+jpqnOX+BF5owcu/HZLOV0nJK+K9sjs1Ox2JA==",
|
|
48
48
|
"dev": true,
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@types/node": "*"
|
|
@@ -264,9 +264,9 @@
|
|
|
264
264
|
}
|
|
265
265
|
},
|
|
266
266
|
"node_modules/follow-redirects": {
|
|
267
|
-
"version": "1.15.
|
|
268
|
-
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.
|
|
269
|
-
"integrity": "sha512-
|
|
267
|
+
"version": "1.15.5",
|
|
268
|
+
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
|
|
269
|
+
"integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
|
|
270
270
|
"funding": [
|
|
271
271
|
{
|
|
272
272
|
"type": "individual",
|
|
@@ -509,9 +509,9 @@
|
|
|
509
509
|
}
|
|
510
510
|
},
|
|
511
511
|
"node_modules/unzipper": {
|
|
512
|
-
"version": "0.10.
|
|
513
|
-
"resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.
|
|
514
|
-
"integrity": "sha512
|
|
512
|
+
"version": "0.10.14",
|
|
513
|
+
"resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz",
|
|
514
|
+
"integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==",
|
|
515
515
|
"dependencies": {
|
|
516
516
|
"big-integer": "^1.6.17",
|
|
517
517
|
"binary": "~0.3.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scrabble-solver/word-lists",
|
|
3
|
-
"version": "2.13.
|
|
3
|
+
"version": "2.13.4",
|
|
4
4
|
"description": "Scrabble Solver 2 - Word lists",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -20,20 +20,19 @@
|
|
|
20
20
|
"homepage": "https://scrabble-solver.org",
|
|
21
21
|
"scripts": {
|
|
22
22
|
"build": "tsc --project .",
|
|
23
|
-
"clean": "rimraf build/
|
|
24
|
-
"clean:force": "npm run clean && rimraf package-lock.json"
|
|
23
|
+
"clean": "rimraf build/"
|
|
25
24
|
},
|
|
26
25
|
"dependencies": {
|
|
27
|
-
"@scrabble-solver/types": "^2.13.
|
|
26
|
+
"@scrabble-solver/types": "^2.13.4",
|
|
28
27
|
"cheerio": "^1.0.0-rc.12",
|
|
29
|
-
"follow-redirects": "^1.15.
|
|
28
|
+
"follow-redirects": "^1.15.5",
|
|
30
29
|
"latinize": "^1.0.0",
|
|
31
|
-
"unzipper": "^0.10.
|
|
30
|
+
"unzipper": "^0.10.14"
|
|
32
31
|
},
|
|
33
32
|
"devDependencies": {
|
|
34
|
-
"@types/follow-redirects": "^1.14.
|
|
35
|
-
"@types/latinize": "^0.2.
|
|
36
|
-
"@types/unzipper": "^0.10.
|
|
33
|
+
"@types/follow-redirects": "^1.14.4",
|
|
34
|
+
"@types/latinize": "^0.2.18",
|
|
35
|
+
"@types/unzipper": "^0.10.9"
|
|
37
36
|
},
|
|
38
37
|
"gitHead": "1e2d1ad49a288d4a44196d8e3336740da132c637"
|
|
39
38
|
}
|
package/tsconfig.json
CHANGED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Trie } from '@kamilmielnik/trie';
|
|
2
|
-
import { Locale } from '@scrabble-solver/types';
|
|
3
|
-
declare class Dictionaries {
|
|
4
|
-
private readonly cache;
|
|
5
|
-
private readonly downloadDictionaryProxies;
|
|
6
|
-
constructor();
|
|
7
|
-
get(locale: Locale): Promise<Trie>;
|
|
8
|
-
remove(): void;
|
|
9
|
-
update(force?: boolean): Promise<void>;
|
|
10
|
-
private getLocalesToUpdate;
|
|
11
|
-
private updateDictionary;
|
|
12
|
-
}
|
|
13
|
-
export default Dictionaries;
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const logger_1 = __importDefault(require("@scrabble-solver/logger"));
|
|
7
|
-
const types_1 = require("@scrabble-solver/types");
|
|
8
|
-
const fs_1 = __importDefault(require("fs"));
|
|
9
|
-
const constants_1 = require("./constants");
|
|
10
|
-
const lib_1 = require("./lib");
|
|
11
|
-
class Dictionaries {
|
|
12
|
-
constructor() {
|
|
13
|
-
this.cache = new lib_1.LayeredCache();
|
|
14
|
-
this.downloadDictionaryProxies = Object.fromEntries(Object.values(types_1.Locale).map((locale) => [locale, (0, lib_1.createAsyncProxy)(() => (0, lib_1.downloadDictionary)(locale))]));
|
|
15
|
-
}
|
|
16
|
-
async get(locale) {
|
|
17
|
-
if (this.cache.has(locale)) {
|
|
18
|
-
const trie = await this.cache.get(locale);
|
|
19
|
-
if (trie) {
|
|
20
|
-
return trie;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
logger_1.default.info('Dictionaries - cache miss', { locale });
|
|
24
|
-
return this.updateDictionary(locale);
|
|
25
|
-
}
|
|
26
|
-
remove() {
|
|
27
|
-
fs_1.default.rmdirSync(constants_1.OUTPUT_DIRECTORY, { recursive: true });
|
|
28
|
-
}
|
|
29
|
-
async update(force) {
|
|
30
|
-
const locales = force ? Object.values(types_1.Locale) : this.getLocalesToUpdate();
|
|
31
|
-
logger_1.default.info('Dictionaries - update', { force, locales });
|
|
32
|
-
await Promise.all(locales.map((locale) => this.updateDictionary(locale)));
|
|
33
|
-
}
|
|
34
|
-
getLocalesToUpdate() {
|
|
35
|
-
return Object.values(types_1.Locale).filter((locale) => this.cache.isStale(locale) !== false);
|
|
36
|
-
}
|
|
37
|
-
async updateDictionary(locale) {
|
|
38
|
-
logger_1.default.info('Dictionaries - updateDictionary', { locale });
|
|
39
|
-
fs_1.default.mkdirSync(constants_1.OUTPUT_DIRECTORY, { recursive: true });
|
|
40
|
-
const downloadDictionaryProxy = this.downloadDictionaryProxies[locale];
|
|
41
|
-
const trie = await downloadDictionaryProxy();
|
|
42
|
-
await this.cache.set(locale, trie);
|
|
43
|
-
return trie;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
exports.default = Dictionaries;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.OUTPUT_DIRECTORY = exports.CACHE_STALE_THRESHOLD = exports.DAY = void 0;
|
|
7
|
-
const os_1 = __importDefault(require("os"));
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
exports.DAY = 24 * 60 * 60 * 1000;
|
|
10
|
-
exports.CACHE_STALE_THRESHOLD = 1 * exports.DAY; // eslint-disable-line no-implicit-coercion
|
|
11
|
-
exports.OUTPUT_DIRECTORY = path_1.default.resolve(os_1.default.homedir(), '.scrabble-solver', 'dictionaries');
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
-
};
|
|
19
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.dictionaries = void 0;
|
|
21
|
-
const Dictionaries_1 = __importDefault(require("./Dictionaries"));
|
|
22
|
-
__exportStar(require("./lib"), exports);
|
|
23
|
-
exports.dictionaries = new Dictionaries_1.default();
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Trie } from '@kamilmielnik/trie';
|
|
2
|
-
import { Locale } from '@scrabble-solver/types';
|
|
3
|
-
import { Cache } from '../types';
|
|
4
|
-
declare class DiskCache implements Cache<Locale, Trie> {
|
|
5
|
-
get(locale: Locale): Promise<Trie | undefined>;
|
|
6
|
-
getLastModifiedTimestamp(locale: Locale): number | undefined;
|
|
7
|
-
has(locale: Locale): boolean;
|
|
8
|
-
isStale(locale: Locale): boolean | undefined;
|
|
9
|
-
set(locale: Locale, trie: Trie): Promise<void>;
|
|
10
|
-
}
|
|
11
|
-
export default DiskCache;
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const trie_1 = require("@kamilmielnik/trie");
|
|
7
|
-
const fs_1 = __importDefault(require("fs"));
|
|
8
|
-
const constants_1 = require("../constants");
|
|
9
|
-
const getDictionaryFilepath_1 = __importDefault(require("./getDictionaryFilepath"));
|
|
10
|
-
class DiskCache {
|
|
11
|
-
async get(locale) {
|
|
12
|
-
if (!this.has(locale)) {
|
|
13
|
-
return undefined;
|
|
14
|
-
}
|
|
15
|
-
const filepath = (0, getDictionaryFilepath_1.default)(locale);
|
|
16
|
-
const serialized = await fs_1.default.promises.readFile(filepath, 'utf-8');
|
|
17
|
-
const trie = trie_1.Trie.deserialize(serialized);
|
|
18
|
-
return trie;
|
|
19
|
-
}
|
|
20
|
-
getLastModifiedTimestamp(locale) {
|
|
21
|
-
const filepath = (0, getDictionaryFilepath_1.default)(locale);
|
|
22
|
-
if (!fs_1.default.existsSync(filepath)) {
|
|
23
|
-
return undefined;
|
|
24
|
-
}
|
|
25
|
-
const stats = fs_1.default.statSync(filepath);
|
|
26
|
-
return stats.mtimeMs;
|
|
27
|
-
}
|
|
28
|
-
has(locale) {
|
|
29
|
-
const filepath = (0, getDictionaryFilepath_1.default)(locale);
|
|
30
|
-
return fs_1.default.existsSync(filepath);
|
|
31
|
-
}
|
|
32
|
-
isStale(locale) {
|
|
33
|
-
if (!this.has(locale)) {
|
|
34
|
-
return undefined;
|
|
35
|
-
}
|
|
36
|
-
const lastModifiedTimestamp = this.getLastModifiedTimestamp(locale);
|
|
37
|
-
if (typeof lastModifiedTimestamp === 'undefined') {
|
|
38
|
-
return undefined;
|
|
39
|
-
}
|
|
40
|
-
const timeSinceModification = Math.abs(lastModifiedTimestamp - Date.now());
|
|
41
|
-
return timeSinceModification > constants_1.CACHE_STALE_THRESHOLD;
|
|
42
|
-
}
|
|
43
|
-
async set(locale, trie) {
|
|
44
|
-
const filepath = (0, getDictionaryFilepath_1.default)(locale);
|
|
45
|
-
await fs_1.default.promises.writeFile(filepath, trie.serialize());
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
exports.default = DiskCache;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Trie } from '@kamilmielnik/trie';
|
|
2
|
-
import { Locale } from '@scrabble-solver/types';
|
|
3
|
-
import { Cache } from '../types';
|
|
4
|
-
declare class LayeredCache implements Cache<Locale, Trie> {
|
|
5
|
-
private readonly layers;
|
|
6
|
-
get(locale: Locale): Promise<Trie | undefined>;
|
|
7
|
-
getLastModifiedTimestamp(locale: Locale): number | undefined;
|
|
8
|
-
has(locale: Locale): boolean;
|
|
9
|
-
isStale(locale: Locale): boolean | undefined;
|
|
10
|
-
set(locale: Locale, trie: Trie): Promise<void>;
|
|
11
|
-
private getLastModifiedLayer;
|
|
12
|
-
}
|
|
13
|
-
export default LayeredCache;
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const createCacheTimestampComparator_1 = __importDefault(require("./createCacheTimestampComparator"));
|
|
7
|
-
const DiskCache_1 = __importDefault(require("./DiskCache"));
|
|
8
|
-
const MemoryCache_1 = __importDefault(require("./MemoryCache"));
|
|
9
|
-
class LayeredCache {
|
|
10
|
-
constructor() {
|
|
11
|
-
this.layers = [new MemoryCache_1.default(), new DiskCache_1.default()];
|
|
12
|
-
}
|
|
13
|
-
async get(locale) {
|
|
14
|
-
const cache = this.getLastModifiedLayer(locale);
|
|
15
|
-
if (!cache) {
|
|
16
|
-
return Promise.resolve(undefined);
|
|
17
|
-
}
|
|
18
|
-
const [memoryCache, diskCache] = this.layers;
|
|
19
|
-
const value = await cache.get(locale);
|
|
20
|
-
if (cache === diskCache && typeof value !== 'undefined') {
|
|
21
|
-
await memoryCache.set(locale, value);
|
|
22
|
-
}
|
|
23
|
-
return value;
|
|
24
|
-
}
|
|
25
|
-
getLastModifiedTimestamp(locale) {
|
|
26
|
-
const cache = this.getLastModifiedLayer(locale);
|
|
27
|
-
if (!cache) {
|
|
28
|
-
return undefined;
|
|
29
|
-
}
|
|
30
|
-
return cache.getLastModifiedTimestamp(locale);
|
|
31
|
-
}
|
|
32
|
-
has(locale) {
|
|
33
|
-
return this.layers.some((cache) => cache.has(locale));
|
|
34
|
-
}
|
|
35
|
-
isStale(locale) {
|
|
36
|
-
if (this.layers.some((cache) => cache.isStale(locale))) {
|
|
37
|
-
return true;
|
|
38
|
-
}
|
|
39
|
-
if (this.layers.every((cache) => typeof cache.isStale(locale) === 'undefined')) {
|
|
40
|
-
return undefined;
|
|
41
|
-
}
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
async set(locale, trie) {
|
|
45
|
-
const [memoryCache, diskCache] = this.layers;
|
|
46
|
-
await diskCache.set(locale, trie);
|
|
47
|
-
await memoryCache.set(locale, trie);
|
|
48
|
-
}
|
|
49
|
-
getLastModifiedLayer(locale) {
|
|
50
|
-
const layers = this.layers.filter((cache) => cache.has(locale));
|
|
51
|
-
const [cached] = [...layers].sort((0, createCacheTimestampComparator_1.default)(locale));
|
|
52
|
-
return cached;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
exports.default = LayeredCache;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Trie } from '@kamilmielnik/trie';
|
|
2
|
-
import { Locale } from '@scrabble-solver/types';
|
|
3
|
-
import { Cache } from '../types';
|
|
4
|
-
declare class MemoryCache implements Cache<Locale, Trie> {
|
|
5
|
-
private readonly cache;
|
|
6
|
-
private readonly cacheTimestamps;
|
|
7
|
-
get(locale: Locale): Promise<Trie | undefined>;
|
|
8
|
-
getLastModifiedTimestamp(locale: Locale): number | undefined;
|
|
9
|
-
has(locale: Locale): boolean;
|
|
10
|
-
isStale(locale: Locale): boolean | undefined;
|
|
11
|
-
set(locale: Locale, trie: Trie): Promise<void>;
|
|
12
|
-
}
|
|
13
|
-
export default MemoryCache;
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const constants_1 = require("../constants");
|
|
4
|
-
class MemoryCache {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.cache = {};
|
|
7
|
-
this.cacheTimestamps = {};
|
|
8
|
-
}
|
|
9
|
-
get(locale) {
|
|
10
|
-
return Promise.resolve(this.cache[locale]);
|
|
11
|
-
}
|
|
12
|
-
getLastModifiedTimestamp(locale) {
|
|
13
|
-
return this.cacheTimestamps[locale];
|
|
14
|
-
}
|
|
15
|
-
has(locale) {
|
|
16
|
-
return typeof this.cache[locale] !== 'undefined';
|
|
17
|
-
}
|
|
18
|
-
isStale(locale) {
|
|
19
|
-
const timestamp = this.getLastModifiedTimestamp(locale);
|
|
20
|
-
if (!this.has(locale) || typeof timestamp === 'undefined') {
|
|
21
|
-
return undefined;
|
|
22
|
-
}
|
|
23
|
-
const timeSinceModification = Math.abs(timestamp - Date.now());
|
|
24
|
-
return timeSinceModification > constants_1.CACHE_STALE_THRESHOLD;
|
|
25
|
-
}
|
|
26
|
-
set(locale, trie) {
|
|
27
|
-
this.cacheTimestamps[locale] = Date.now();
|
|
28
|
-
this.cache[locale] = trie;
|
|
29
|
-
return Promise.resolve();
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
exports.default = MemoryCache;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const createAsyncProxy = (asyncCallback) => {
|
|
4
|
-
let promise = null;
|
|
5
|
-
return async () => {
|
|
6
|
-
if (promise) {
|
|
7
|
-
return promise;
|
|
8
|
-
}
|
|
9
|
-
try {
|
|
10
|
-
promise = asyncCallback();
|
|
11
|
-
return await promise;
|
|
12
|
-
}
|
|
13
|
-
finally {
|
|
14
|
-
promise = null;
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
};
|
|
18
|
-
exports.default = createAsyncProxy;
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { Trie } from '@kamilmielnik/trie';
|
|
2
|
-
import { Locale } from '@scrabble-solver/types';
|
|
3
|
-
import { Cache } from '../types';
|
|
4
|
-
declare const createCacheTimestampComparator: (locale: Locale) => (a: Cache<Locale, Trie>, b: Cache<Locale, Trie>) => number;
|
|
5
|
-
export default createCacheTimestampComparator;
|