scrabble-solver 2.9.3 → 2.10.0
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/.prettierignore +2 -0
- package/README.md +3 -1
- package/lerna.json +1 -1
- package/package.json +1 -1
- package/packages/configs/build/literaki/literaki.d.ts +1 -0
- package/packages/configs/build/literaki/literaki.js +1 -0
- package/packages/configs/build/literaki/tiles/index.d.ts +1 -0
- package/packages/configs/build/literaki/tiles/index.js +3 -1
- package/packages/configs/build/literaki/tiles/tilesFa.d.ts +6 -0
- package/packages/configs/build/literaki/tiles/tilesFa.js +37 -0
- package/packages/configs/build/scrabble/scrabble.d.ts +1 -0
- package/packages/configs/build/scrabble/scrabble.js +1 -0
- package/packages/configs/build/scrabble/tiles/index.d.ts +1 -0
- package/packages/configs/build/scrabble/tiles/index.js +3 -1
- package/packages/configs/build/scrabble/tiles/tilesFa.d.ts +6 -0
- package/packages/configs/build/scrabble/tiles/tilesFa.js +37 -0
- package/packages/configs/package.json +3 -3
- package/packages/configs/src/literaki/literaki.ts +2 -1
- package/packages/configs/src/literaki/tiles/index.ts +1 -0
- package/packages/configs/src/literaki/tiles/tilesFa.ts +36 -0
- package/packages/configs/src/scrabble/scrabble.ts +2 -1
- package/packages/configs/src/scrabble/tiles/index.ts +1 -0
- package/packages/configs/src/scrabble/tiles/tilesFa.ts +36 -0
- package/packages/constants/package.json +1 -1
- package/packages/dictionaries/package-lock.json +2 -2
- package/packages/dictionaries/package.json +4 -4
- package/packages/logger/package-lock.json +2 -2
- package/packages/logger/package.json +1 -1
- package/packages/logger/scripts/stats.js +1 -1
- package/packages/scrabble-solver/.next/BUILD_ID +1 -1
- package/packages/scrabble-solver/.next/build-manifest.json +11 -11
- 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/next-server.js.nft.json +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-server.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/prerender-manifest.json +1 -1
- package/packages/scrabble-solver/.next/routes-manifest.json +1 -1
- package/packages/scrabble-solver/.next/server/chunks/{429.js → 131.js} +2 -3652
- package/packages/scrabble-solver/.next/server/chunks/413.js +367 -185
- package/packages/scrabble-solver/.next/server/chunks/44.js +71 -45
- package/packages/scrabble-solver/.next/server/chunks/515.js +1026 -480
- package/packages/scrabble-solver/.next/server/chunks/911.js +96 -2
- package/packages/scrabble-solver/.next/server/middleware-build-manifest.js +1 -1
- package/packages/scrabble-solver/.next/server/pages/404.html +2 -2
- package/packages/scrabble-solver/.next/server/pages/404.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/500.html +2 -2
- package/packages/scrabble-solver/.next/server/pages/_app.js.nft.json +1 -1
- 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 +48 -10
- 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 -8
- 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 +62 -49
- package/packages/scrabble-solver/.next/server/pages/api/solve.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/api/verify.js +2 -9
- package/packages/scrabble-solver/.next/server/pages/api/verify.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/index.html +9 -1
- package/packages/scrabble-solver/.next/server/pages/index.js +43 -36
- 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 +2 -2
- package/packages/scrabble-solver/.next/static/chunks/368-d423e70be6c0c473.js +1 -0
- package/packages/scrabble-solver/.next/static/chunks/pages/{404-8650986dc56dab75.js → 404-932294135c3206dd.js} +1 -1
- package/packages/scrabble-solver/.next/static/chunks/pages/_app-3f5508a5f544d9eb.js +1 -0
- package/packages/scrabble-solver/.next/static/chunks/pages/index-8af7a9d7a2cd98a7.js +1 -0
- package/packages/scrabble-solver/.next/static/css/6b1833fd19d3a74a.css +1 -0
- package/packages/scrabble-solver/.next/static/css/a6154e4ca046ca13.css +1 -0
- package/packages/scrabble-solver/.next/static/css/bad53af6f8616677.css +1 -0
- package/packages/scrabble-solver/.next/static/vscqn7BEtAxJteWSwNnas/_buildManifest.js +1 -0
- package/packages/scrabble-solver/.next/static/{s5pE_3C3ebZuSfaqE7xat → vscqn7BEtAxJteWSwNnas}/_ssgManifest.js +0 -0
- package/packages/scrabble-solver/.next/trace +52 -52
- package/packages/scrabble-solver/package-lock.json +2 -2
- package/packages/scrabble-solver/package.json +8 -8
- package/packages/scrabble-solver/src/components/Board/components/Cell/Cell.module.scss +45 -9
- package/packages/scrabble-solver/src/components/Board/hooks/useGrid.ts +4 -2
- package/packages/scrabble-solver/src/components/Dictionary/Dictionary.module.scss +8 -1
- package/packages/scrabble-solver/src/components/EmptyState/EmptyState.tsx +6 -2
- package/packages/scrabble-solver/src/components/Loading/Loading.tsx +13 -2
- package/packages/scrabble-solver/src/components/NavButtons/NavButtons.module.scss +8 -7
- package/packages/scrabble-solver/src/components/NavButtons/NavButtons.tsx +35 -28
- package/packages/scrabble-solver/src/components/PlainTiles/PlainTiles.tsx +7 -1
- package/packages/scrabble-solver/src/components/PlainTiles/Tile.tsx +4 -3
- package/packages/scrabble-solver/src/components/Rack/Rack.tsx +4 -2
- package/packages/scrabble-solver/src/components/Radio/Radio.module.scss +1 -1
- package/packages/scrabble-solver/src/components/RemainingTiles/Character.tsx +7 -2
- package/packages/scrabble-solver/src/components/RemainingTiles/RemainingTiles.tsx +28 -20
- package/packages/scrabble-solver/src/components/Results/Cell.tsx +5 -3
- package/packages/scrabble-solver/src/components/Results/Result.tsx +8 -3
- package/packages/scrabble-solver/src/components/Results/Results.module.scss +31 -9
- package/packages/scrabble-solver/src/components/Results/Results.tsx +6 -2
- package/packages/scrabble-solver/src/components/Results/getColumns.ts +58 -0
- package/packages/scrabble-solver/src/components/Settings/components/ConfigSetting/ConfigSetting.module.scss +1 -0
- package/packages/scrabble-solver/src/components/Settings/components/LocaleSetting/LocaleSetting.module.scss +12 -1
- package/packages/scrabble-solver/src/components/Settings/components/LocaleSetting/LocaleSetting.tsx +1 -1
- package/packages/scrabble-solver/src/components/Settings/components/LocaleSetting/options.ts +7 -1
- package/packages/scrabble-solver/src/components/Sidebar/Sidebar.module.scss +42 -8
- package/packages/scrabble-solver/src/components/SvgFontCss/SvgFontCss.tsx +8 -7
- package/packages/scrabble-solver/src/components/SvgFontCss/createCss.ts +11 -0
- package/packages/scrabble-solver/src/components/SvgFontCss/createStyle.ts +9 -0
- package/packages/scrabble-solver/src/components/SvgFontCss/createSvg.ts +10 -0
- package/packages/scrabble-solver/src/components/SvgFontFix/SvgFontFix.module.scss +5 -0
- package/packages/scrabble-solver/src/components/SvgFontFix/SvgFontFix.tsx +21 -0
- package/packages/scrabble-solver/src/components/SvgFontFix/index.ts +1 -0
- package/packages/scrabble-solver/src/components/Tile/Tile.module.scss +10 -2
- package/packages/scrabble-solver/src/components/Tile/Tile.tsx +4 -0
- package/packages/scrabble-solver/src/components/Tile/TilePure.tsx +3 -1
- package/packages/scrabble-solver/src/components/Words/Words.tsx +4 -3
- package/packages/scrabble-solver/src/components/index.ts +1 -0
- package/packages/scrabble-solver/src/hooks/index.ts +2 -0
- package/packages/scrabble-solver/src/hooks/useDirection.ts +22 -0
- package/packages/scrabble-solver/src/hooks/useLanguage.ts +22 -0
- package/packages/scrabble-solver/src/i18n/constants.ts +53 -0
- package/packages/scrabble-solver/src/i18n/fa.json +56 -0
- package/packages/scrabble-solver/src/i18n/i18n.ts +22 -0
- package/packages/scrabble-solver/src/i18n/index.ts +2 -20
- package/packages/scrabble-solver/src/icons/FlagFa.svg +95 -0
- package/packages/scrabble-solver/src/icons/index.ts +1 -0
- package/packages/scrabble-solver/src/lib/createComparator.ts +22 -0
- package/packages/scrabble-solver/src/lib/createKeyComparator.ts +4 -2
- package/packages/scrabble-solver/src/lib/createStringComparator.ts +5 -0
- package/packages/scrabble-solver/src/lib/detectLocale.ts +4 -0
- package/packages/scrabble-solver/src/lib/getRemainingTiles.ts +4 -2
- package/packages/scrabble-solver/src/lib/getRemainingTilesGroups.ts +48 -23
- package/packages/scrabble-solver/src/lib/index.ts +2 -2
- package/packages/scrabble-solver/src/lib/sortResults.ts +11 -9
- package/packages/scrabble-solver/src/lib/unorderedArraysEqual.ts +3 -2
- package/packages/scrabble-solver/src/pages/api/verify.ts +1 -1
- package/packages/scrabble-solver/src/pages/index.module.scss +7 -18
- package/packages/scrabble-solver/src/pages/index.tsx +10 -2
- package/packages/scrabble-solver/src/service-worker/routeVerifyRequests.ts +1 -1
- package/packages/scrabble-solver/src/state/selectors.ts +5 -5
- package/packages/scrabble-solver/src/styles/global.scss +6 -1
- package/packages/solver/package-lock.json +2 -2
- package/packages/solver/package.json +5 -5
- package/packages/types/build/Locale.d.ts +1 -0
- package/packages/types/build/Locale.js +1 -0
- package/packages/types/build/Result.d.ts +0 -1
- package/packages/types/build/Result.js +0 -5
- package/packages/types/package.json +2 -2
- package/packages/types/src/Locale.ts +1 -0
- package/packages/types/src/Result.ts +0 -11
- package/packages/word-definitions/build/crawl/crawl.js +2 -0
- package/packages/word-definitions/build/crawl/crawlFarsi.d.ts +2 -0
- package/packages/word-definitions/build/crawl/crawlFarsi.js +11 -0
- package/packages/word-definitions/build/lib/normalizeDefinition.js +2 -1
- package/packages/word-definitions/build/parse/index.d.ts +1 -0
- package/packages/word-definitions/build/parse/index.js +3 -1
- package/packages/word-definitions/build/parse/parse.js +2 -0
- package/packages/word-definitions/build/parse/parseFarsi.d.ts +3 -0
- package/packages/word-definitions/build/parse/parseFarsi.js +13 -0
- package/packages/word-definitions/package-lock.json +2 -2
- package/packages/word-definitions/package.json +2 -2
- package/packages/word-definitions/src/crawl/crawl.ts +2 -0
- package/packages/word-definitions/src/crawl/crawlFarsi.ts +11 -0
- package/packages/word-definitions/src/lib/normalizeDefinition.ts +2 -1
- package/packages/word-definitions/src/parse/index.ts +1 -0
- package/packages/word-definitions/src/parse/parse.ts +2 -0
- package/packages/word-definitions/src/parse/parseFarsi.ts +17 -0
- package/packages/word-lists/build/getDeDeWordList.js +2 -1
- package/packages/word-lists/build/getEnGbWordList.js +2 -1
- package/packages/word-lists/build/getEnUsWordList.js +2 -1
- package/packages/word-lists/build/getEsEsWordList.js +2 -1
- package/packages/word-lists/build/getFaIrWordList.d.ts +2 -0
- package/packages/word-lists/build/getFaIrWordList.js +9 -0
- package/packages/word-lists/build/getFrFrWordList.js +2 -1
- package/packages/word-lists/build/getPlPlWordList.js +9 -9
- package/packages/word-lists/build/getWordList.js +2 -0
- package/packages/word-lists/build/lib/downloadFile.js +5 -5
- package/packages/word-lists/build/lib/extractWords.d.ts +1 -1
- package/packages/word-lists/build/lib/extractWords.js +10 -7
- package/packages/word-lists/build/lib/findFirstWordIndex.d.ts +1 -1
- package/packages/word-lists/build/lib/findFirstWordIndex.js +2 -2
- package/packages/word-lists/build/lib/getTempFilepath.d.ts +2 -0
- package/packages/word-lists/build/lib/getTempFilepath.js +14 -0
- package/packages/word-lists/build/lib/getTxtWordList.d.ts +1 -1
- package/packages/word-lists/build/lib/getTxtWordList.js +5 -5
- package/packages/word-lists/build/lib/index.d.ts +1 -1
- package/packages/word-lists/build/lib/index.js +3 -3
- package/packages/word-lists/package-lock.json +2 -32
- package/packages/word-lists/package.json +2 -3
- package/packages/word-lists/src/getDeDeWordList.ts +3 -1
- package/packages/word-lists/src/getEnGbWordList.ts +3 -1
- package/packages/word-lists/src/getEnUsWordList.ts +3 -1
- package/packages/word-lists/src/getEsEsWordList.ts +3 -1
- package/packages/word-lists/src/getFaIrWordList.ts +11 -0
- package/packages/word-lists/src/getFrFrWordList.ts +3 -1
- package/packages/word-lists/src/getPlPlWordList.ts +7 -7
- package/packages/word-lists/src/getWordList.ts +2 -0
- package/packages/word-lists/src/lib/downloadFile.ts +5 -5
- package/packages/word-lists/src/lib/extractWords.ts +13 -7
- package/packages/word-lists/src/lib/findFirstWordIndex.ts +2 -2
- package/packages/word-lists/src/lib/getTempFilepath.ts +13 -0
- package/packages/word-lists/src/lib/getTxtWordList.ts +3 -3
- package/packages/word-lists/src/lib/index.ts +1 -1
- package/packages/scrabble-solver/.next/static/chunks/880-18e3aea6915aebe7.js +0 -1
- package/packages/scrabble-solver/.next/static/chunks/pages/_app-183f598b1d4d480b.js +0 -1
- package/packages/scrabble-solver/.next/static/chunks/pages/index-f1cef1e67e14d022.js +0 -1
- package/packages/scrabble-solver/.next/static/css/751e8a14776d05d8.css +0 -1
- package/packages/scrabble-solver/.next/static/css/ad2a08918868cad8.css +0 -1
- package/packages/scrabble-solver/.next/static/css/e8de67ad5ea35427.css +0 -1
- package/packages/scrabble-solver/.next/static/s5pE_3C3ebZuSfaqE7xat/_buildManifest.js +0 -1
- package/packages/scrabble-solver/src/components/Results/constants.ts +0 -42
- package/packages/scrabble-solver/src/lib/comparator.ts +0 -16
- package/packages/scrabble-solver/src/lib/stringComparator.ts +0 -5
- package/packages/word-lists/build/lib/getTempFilename.d.ts +0 -2
- package/packages/word-lists/build/lib/getTempFilename.js +0 -10
- package/packages/word-lists/src/lib/getTempFilename.ts +0 -7
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scrabble-solver/solver",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.10.0",
|
|
4
4
|
"description": "Scrabble Solver 2 - Solver",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -25,12 +25,12 @@
|
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"@kamilmielnik/trie": "^2.0.1",
|
|
28
|
-
"@scrabble-solver/types": "^2.
|
|
28
|
+
"@scrabble-solver/types": "^2.10.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@scrabble-solver/configs": "^2.
|
|
32
|
-
"@scrabble-solver/constants": "^2.
|
|
33
|
-
"@scrabble-solver/dictionaries": "^2.
|
|
31
|
+
"@scrabble-solver/configs": "^2.10.0",
|
|
32
|
+
"@scrabble-solver/constants": "^2.10.0",
|
|
33
|
+
"@scrabble-solver/dictionaries": "^2.10.0"
|
|
34
34
|
},
|
|
35
35
|
"gitHead": "1e2d1ad49a288d4a44196d8e3336740da132c637"
|
|
36
36
|
}
|
|
@@ -17,7 +17,6 @@ class Result {
|
|
|
17
17
|
this.points = points;
|
|
18
18
|
this.pointsRatio = getPointsRatio(tiles, points);
|
|
19
19
|
this.tiles = tiles;
|
|
20
|
-
this.tilesCharacters = getTilesCharacters(tiles);
|
|
21
20
|
this.tilesCount = tiles.length;
|
|
22
21
|
this.vowelsCount = getVowels(tiles).length;
|
|
23
22
|
this.word = getWord(cells);
|
|
@@ -41,15 +40,11 @@ class Result {
|
|
|
41
40
|
};
|
|
42
41
|
}
|
|
43
42
|
}
|
|
44
|
-
const charactersComparator = (a, b) => a.localeCompare(b);
|
|
45
43
|
const getBlanks = (tiles) => tiles.filter(({ isBlank }) => isBlank);
|
|
46
44
|
const getConsonants = (tiles) => tiles.filter(isConsonant);
|
|
47
45
|
const getVowels = (tiles) => tiles.filter(isVowel);
|
|
48
|
-
const getNonBlankCharacters = (tiles) => getNonBlanks(tiles).map(({ character }) => character);
|
|
49
|
-
const getNonBlanks = (tiles) => tiles.filter(({ isBlank }) => !isBlank);
|
|
50
46
|
const getPointsRatio = (tiles, points) => points / tiles.length;
|
|
51
47
|
const getTiles = (cells) => cells.filter(({ isEmpty }) => isEmpty).map(({ tile }) => tile);
|
|
52
|
-
const getTilesCharacters = (tiles) => getNonBlankCharacters(tiles).sort(charactersComparator).join('');
|
|
53
48
|
// eslint-disable-next-line prefer-template
|
|
54
49
|
const getWord = (cells) => cells.reduce((word, cell) => word + cell.toString(), '');
|
|
55
50
|
const getWords = (cells, collisions) => [cells, ...collisions].map(getWord);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scrabble-solver/types",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.10.0",
|
|
4
4
|
"description": "Scrabble Solver 2 - Types",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"clean:force": "npm run clean && rimraf package-lock.json"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@scrabble-solver/constants": "^2.
|
|
27
|
+
"@scrabble-solver/constants": "^2.10.0"
|
|
28
28
|
},
|
|
29
29
|
"gitHead": "1e2d1ad49a288d4a44196d8e3336740da132c637"
|
|
30
30
|
}
|
|
@@ -34,8 +34,6 @@ class Result {
|
|
|
34
34
|
|
|
35
35
|
public readonly tiles: Tile[];
|
|
36
36
|
|
|
37
|
-
public readonly tilesCharacters: string;
|
|
38
|
-
|
|
39
37
|
public readonly tilesCount: number;
|
|
40
38
|
|
|
41
39
|
public readonly vowelsCount: number;
|
|
@@ -67,7 +65,6 @@ class Result {
|
|
|
67
65
|
this.points = points;
|
|
68
66
|
this.pointsRatio = getPointsRatio(tiles, points);
|
|
69
67
|
this.tiles = tiles;
|
|
70
|
-
this.tilesCharacters = getTilesCharacters(tiles);
|
|
71
68
|
this.tilesCount = tiles.length;
|
|
72
69
|
this.vowelsCount = getVowels(tiles).length;
|
|
73
70
|
this.word = getWord(cells);
|
|
@@ -85,24 +82,16 @@ class Result {
|
|
|
85
82
|
}
|
|
86
83
|
}
|
|
87
84
|
|
|
88
|
-
const charactersComparator = (a: string, b: string): number => a.localeCompare(b);
|
|
89
|
-
|
|
90
85
|
const getBlanks = (tiles: Tile[]): Tile[] => tiles.filter(({ isBlank }) => isBlank);
|
|
91
86
|
|
|
92
87
|
const getConsonants = (tiles: Tile[]): Tile[] => tiles.filter(isConsonant);
|
|
93
88
|
|
|
94
89
|
const getVowels = (tiles: Tile[]): Tile[] => tiles.filter(isVowel);
|
|
95
90
|
|
|
96
|
-
const getNonBlankCharacters = (tiles: Tile[]): string[] => getNonBlanks(tiles).map(({ character }) => character);
|
|
97
|
-
|
|
98
|
-
const getNonBlanks = (tiles: Tile[]): Tile[] => tiles.filter(({ isBlank }) => !isBlank);
|
|
99
|
-
|
|
100
91
|
const getPointsRatio = (tiles: Tile[], points: number): number => points / tiles.length;
|
|
101
92
|
|
|
102
93
|
const getTiles = (cells: Cell[]): Tile[] => cells.filter(({ isEmpty }) => isEmpty).map(({ tile }) => tile);
|
|
103
94
|
|
|
104
|
-
const getTilesCharacters = (tiles: Tile[]): string => getNonBlankCharacters(tiles).sort(charactersComparator).join('');
|
|
105
|
-
|
|
106
95
|
// eslint-disable-next-line prefer-template
|
|
107
96
|
const getWord = (cells: Cell[]): string => cells.reduce((word, cell) => word + cell.toString(), '');
|
|
108
97
|
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const types_1 = require("@scrabble-solver/types");
|
|
7
7
|
const crawlEnglish_1 = __importDefault(require("./crawlEnglish"));
|
|
8
|
+
const crawlFarsi_1 = __importDefault(require("./crawlFarsi"));
|
|
8
9
|
const crawlFrench_1 = __importDefault(require("./crawlFrench"));
|
|
9
10
|
const crawlGerman_1 = __importDefault(require("./crawlGerman"));
|
|
10
11
|
const crawlPolish_1 = __importDefault(require("./crawlPolish"));
|
|
@@ -14,6 +15,7 @@ const crawlPerLocale = {
|
|
|
14
15
|
[types_1.Locale.EN_GB]: crawlEnglish_1.default,
|
|
15
16
|
[types_1.Locale.EN_US]: crawlEnglish_1.default,
|
|
16
17
|
[types_1.Locale.ES_ES]: crawlSpanish_1.default,
|
|
18
|
+
[types_1.Locale.FA_IR]: crawlFarsi_1.default,
|
|
17
19
|
[types_1.Locale.FR_FR]: crawlFrench_1.default,
|
|
18
20
|
[types_1.Locale.PL_PL]: crawlPolish_1.default,
|
|
19
21
|
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../lib");
|
|
4
|
+
const crawlFarsi = (word) => {
|
|
5
|
+
return (0, lib_1.request)({
|
|
6
|
+
protocol: 'https',
|
|
7
|
+
hostname: 'www.vajehyab.com',
|
|
8
|
+
path: `/moein/${encodeURIComponent(word)}`,
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
exports.default = crawlFarsi;
|
|
@@ -15,7 +15,8 @@ const normalizeQuotes = (definition) => definition.replace(/\."/g, '".');
|
|
|
15
15
|
const normalizeMarkers = (definition) => definition.replace(/^\(\d+\.\d+\)\s+/g, '');
|
|
16
16
|
const normalizeTrailingSymbols = (definition) => definition.trim().replace(/:$/, '');
|
|
17
17
|
const normalizeLeadingSymbols = (definition) => definition.trim().replace(/^:/, '');
|
|
18
|
-
|
|
18
|
+
// https://stackoverflow.com/a/40732368
|
|
19
|
+
const normalizeNonWords = (definition) => (/[\w\u0621-\u064A]+/.test(definition) ? definition : '');
|
|
19
20
|
const normalizeCommas = (definition) => {
|
|
20
21
|
return definition
|
|
21
22
|
.replace(/\s+,\s+/g, ', ')
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { default as parse } from './parse';
|
|
2
2
|
export { default as parseEnglish } from './parseEnglish';
|
|
3
|
+
export { default as parseFarsi } from './parseFarsi';
|
|
3
4
|
export { default as parseFrench } from './parseFrench';
|
|
4
5
|
export { default as parseGerman } from './parseGerman';
|
|
5
6
|
export { default as parsePolish } from './parsePolish';
|
|
@@ -3,11 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.parseSpanish = exports.parsePolish = exports.parseGerman = exports.parseFrench = exports.parseEnglish = exports.parse = void 0;
|
|
6
|
+
exports.parseSpanish = exports.parsePolish = exports.parseGerman = exports.parseFrench = exports.parseFarsi = exports.parseEnglish = exports.parse = void 0;
|
|
7
7
|
var parse_1 = require("./parse");
|
|
8
8
|
Object.defineProperty(exports, "parse", { enumerable: true, get: function () { return __importDefault(parse_1).default; } });
|
|
9
9
|
var parseEnglish_1 = require("./parseEnglish");
|
|
10
10
|
Object.defineProperty(exports, "parseEnglish", { enumerable: true, get: function () { return __importDefault(parseEnglish_1).default; } });
|
|
11
|
+
var parseFarsi_1 = require("./parseFarsi");
|
|
12
|
+
Object.defineProperty(exports, "parseFarsi", { enumerable: true, get: function () { return __importDefault(parseFarsi_1).default; } });
|
|
11
13
|
var parseFrench_1 = require("./parseFrench");
|
|
12
14
|
Object.defineProperty(exports, "parseFrench", { enumerable: true, get: function () { return __importDefault(parseFrench_1).default; } });
|
|
13
15
|
var parseGerman_1 = require("./parseGerman");
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const types_1 = require("@scrabble-solver/types");
|
|
7
7
|
const lib_1 = require("../lib");
|
|
8
8
|
const parseEnglish_1 = __importDefault(require("./parseEnglish"));
|
|
9
|
+
const parseFarsi_1 = __importDefault(require("./parseFarsi"));
|
|
9
10
|
const parseFrench_1 = __importDefault(require("./parseFrench"));
|
|
10
11
|
const parseGerman_1 = __importDefault(require("./parseGerman"));
|
|
11
12
|
const parsePolish_1 = __importDefault(require("./parsePolish"));
|
|
@@ -15,6 +16,7 @@ const parsePerLocale = {
|
|
|
15
16
|
[types_1.Locale.EN_GB]: parseEnglish_1.default,
|
|
16
17
|
[types_1.Locale.EN_US]: parseEnglish_1.default,
|
|
17
18
|
[types_1.Locale.ES_ES]: parseSpanish_1.default,
|
|
19
|
+
[types_1.Locale.FA_IR]: parseFarsi_1.default,
|
|
18
20
|
[types_1.Locale.FR_FR]: parseFrench_1.default,
|
|
19
21
|
[types_1.Locale.PL_PL]: parsePolish_1.default,
|
|
20
22
|
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const cheerio_1 = require("cheerio");
|
|
4
|
+
const DOES_NOT_EXIST_MESSAGE = '404 Page Not Found';
|
|
5
|
+
const parseFarsi = (html) => {
|
|
6
|
+
const $ = (0, cheerio_1.load)(html);
|
|
7
|
+
const $definitions = $('[itemprop=articleBody]');
|
|
8
|
+
return {
|
|
9
|
+
definitions: Array.from($definitions).map((definition) => $(definition).text()),
|
|
10
|
+
exists: $('#container h1').text() !== DOES_NOT_EXIST_MESSAGE,
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
exports.default = parseFarsi;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scrabble-solver/word-definitions",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.10.0",
|
|
4
4
|
"lockfileVersion": 2,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@scrabble-solver/word-definitions",
|
|
9
|
-
"version": "2.
|
|
9
|
+
"version": "2.10.0",
|
|
10
10
|
"license": "CC-BY-NC-ND-4.0",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"cheerio": "^1.0.0-rc.12",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scrabble-solver/word-definitions",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.10.0",
|
|
4
4
|
"description": "Scrabble Solver 2 - Word definitions",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"clean": "rimraf build/ node_modules/ package-lock.json"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@scrabble-solver/types": "^2.
|
|
26
|
+
"@scrabble-solver/types": "^2.10.0",
|
|
27
27
|
"cheerio": "^1.0.0-rc.12",
|
|
28
28
|
"follow-redirects": "^1.15.2",
|
|
29
29
|
"striptags": "^3.2.0"
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Locale } from '@scrabble-solver/types';
|
|
2
2
|
|
|
3
3
|
import crawlEnglish from './crawlEnglish';
|
|
4
|
+
import crawlFarsi from './crawlFarsi';
|
|
4
5
|
import crawlFrench from './crawlFrench';
|
|
5
6
|
import crawlGerman from './crawlGerman';
|
|
6
7
|
import crawlPolish from './crawlPolish';
|
|
@@ -11,6 +12,7 @@ const crawlPerLocale: Record<Locale, (word: string) => Promise<string>> = {
|
|
|
11
12
|
[Locale.EN_GB]: crawlEnglish,
|
|
12
13
|
[Locale.EN_US]: crawlEnglish,
|
|
13
14
|
[Locale.ES_ES]: crawlSpanish,
|
|
15
|
+
[Locale.FA_IR]: crawlFarsi,
|
|
14
16
|
[Locale.FR_FR]: crawlFrench,
|
|
15
17
|
[Locale.PL_PL]: crawlPolish,
|
|
16
18
|
};
|
|
@@ -21,7 +21,8 @@ const normalizeTrailingSymbols: Normalize = (definition) => definition.trim().re
|
|
|
21
21
|
|
|
22
22
|
const normalizeLeadingSymbols: Normalize = (definition) => definition.trim().replace(/^:/, '');
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
// https://stackoverflow.com/a/40732368
|
|
25
|
+
const normalizeNonWords: Normalize = (definition) => (/[\w\u0621-\u064A]+/.test(definition) ? definition : '');
|
|
25
26
|
|
|
26
27
|
const normalizeCommas: Normalize = (definition) => {
|
|
27
28
|
return definition
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { default as parse } from './parse';
|
|
2
2
|
export { default as parseEnglish } from './parseEnglish';
|
|
3
|
+
export { default as parseFarsi } from './parseFarsi';
|
|
3
4
|
export { default as parseFrench } from './parseFrench';
|
|
4
5
|
export { default as parseGerman } from './parseGerman';
|
|
5
6
|
export { default as parsePolish } from './parsePolish';
|
|
@@ -4,6 +4,7 @@ import { normalizeDefinition, unique } from '../lib';
|
|
|
4
4
|
import { ParseResult } from '../types';
|
|
5
5
|
|
|
6
6
|
import parseEnglish from './parseEnglish';
|
|
7
|
+
import parseFarsi from './parseFarsi';
|
|
7
8
|
import parseFrench from './parseFrench';
|
|
8
9
|
import parseGerman from './parseGerman';
|
|
9
10
|
import parsePolish from './parsePolish';
|
|
@@ -14,6 +15,7 @@ const parsePerLocale: Record<Locale, (html: string) => ParseResult> = {
|
|
|
14
15
|
[Locale.EN_GB]: parseEnglish,
|
|
15
16
|
[Locale.EN_US]: parseEnglish,
|
|
16
17
|
[Locale.ES_ES]: parseSpanish,
|
|
18
|
+
[Locale.FA_IR]: parseFarsi,
|
|
17
19
|
[Locale.FR_FR]: parseFrench,
|
|
18
20
|
[Locale.PL_PL]: parsePolish,
|
|
19
21
|
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { load } from 'cheerio';
|
|
2
|
+
|
|
3
|
+
import { ParseResult } from '../types';
|
|
4
|
+
|
|
5
|
+
const DOES_NOT_EXIST_MESSAGE = '404 Page Not Found';
|
|
6
|
+
|
|
7
|
+
const parseFarsi = (html: string): ParseResult => {
|
|
8
|
+
const $ = load(html);
|
|
9
|
+
const $definitions = $('[itemprop=articleBody]');
|
|
10
|
+
|
|
11
|
+
return {
|
|
12
|
+
definitions: Array.from($definitions).map((definition) => $(definition).text()),
|
|
13
|
+
exists: $('#container h1').text() !== DOES_NOT_EXIST_MESSAGE,
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export default parseFarsi;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const types_1 = require("@scrabble-solver/types");
|
|
3
4
|
const lib_1 = require("./lib");
|
|
4
5
|
const FILE_URL = 'https://raw.githubusercontent.com/hippler/german-wordlist/master/words.txt';
|
|
5
6
|
const getDeDeWordList = async () => {
|
|
6
|
-
return (0, lib_1.getTxtWordList)(FILE_URL);
|
|
7
|
+
return (0, lib_1.getTxtWordList)(FILE_URL, types_1.Locale.DE_DE);
|
|
7
8
|
};
|
|
8
9
|
exports.default = getDeDeWordList;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const types_1 = require("@scrabble-solver/types");
|
|
3
4
|
const lib_1 = require("./lib");
|
|
4
5
|
const FILE_URL = 'https://www.wordgamedictionary.com/sowpods/download/sowpods.txt';
|
|
5
6
|
const getEnGbWordList = async () => {
|
|
6
|
-
return (0, lib_1.getTxtWordList)(FILE_URL);
|
|
7
|
+
return (0, lib_1.getTxtWordList)(FILE_URL, types_1.Locale.EN_GB);
|
|
7
8
|
};
|
|
8
9
|
exports.default = getEnGbWordList;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const types_1 = require("@scrabble-solver/types");
|
|
3
4
|
const lib_1 = require("./lib");
|
|
4
5
|
const FILE_URL = 'https://www.wordgamedictionary.com/twl06/download/twl06.txt';
|
|
5
6
|
const getEnUsWordList = async () => {
|
|
6
|
-
return (0, lib_1.getTxtWordList)(FILE_URL);
|
|
7
|
+
return (0, lib_1.getTxtWordList)(FILE_URL, types_1.Locale.EN_US);
|
|
7
8
|
};
|
|
8
9
|
exports.default = getEnUsWordList;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const types_1 = require("@scrabble-solver/types");
|
|
3
4
|
const lib_1 = require("./lib");
|
|
4
5
|
const FILE_URL = 'https://raw.githubusercontent.com/kamilmielnik/fise-2/master/fise-2.txt';
|
|
5
6
|
const getEsEsWordList = async () => {
|
|
6
|
-
const words = await (0, lib_1.getTxtWordList)(FILE_URL);
|
|
7
|
+
const words = await (0, lib_1.getTxtWordList)(FILE_URL, types_1.Locale.ES_ES);
|
|
7
8
|
return words.map(normalizeWord);
|
|
8
9
|
};
|
|
9
10
|
const normalizeWord = (word) => {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const types_1 = require("@scrabble-solver/types");
|
|
4
|
+
const lib_1 = require("./lib");
|
|
5
|
+
const FILE_URL = 'https://raw.githubusercontent.com/MansourM/persian-to-persian-dictionary/main/moein/words.txt';
|
|
6
|
+
const getFaIrWordList = async () => {
|
|
7
|
+
return (0, lib_1.getTxtWordList)(FILE_URL, types_1.Locale.FA_IR);
|
|
8
|
+
};
|
|
9
|
+
exports.default = getFaIrWordList;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const types_1 = require("@scrabble-solver/types");
|
|
3
4
|
const lib_1 = require("./lib");
|
|
4
5
|
const FILE_URL =
|
|
5
6
|
// eslint-disable-next-line max-len
|
|
6
7
|
'https://raw.githubusercontent.com/hbenbel/French-Dictionary/a573eab10cc798d7d5da7daab4d2ac0259bb46a3/dictionary/dictionary.txt';
|
|
7
8
|
const getFrFrWordList = async () => {
|
|
8
|
-
const words = await (0, lib_1.getTxtWordList)(FILE_URL);
|
|
9
|
+
const words = await (0, lib_1.getTxtWordList)(FILE_URL, types_1.Locale.FR_FR);
|
|
9
10
|
return words.map(normalizeWord);
|
|
10
11
|
};
|
|
11
12
|
const normalizeWord = (word) => {
|
|
@@ -4,21 +4,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const cheerio_1 = require("cheerio");
|
|
7
|
-
const
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
8
|
const unzipper_1 = __importDefault(require("unzipper"));
|
|
9
9
|
const url_1 = require("url");
|
|
10
10
|
const lib_1 = require("./lib");
|
|
11
11
|
const PAGE_URL = 'https://sjp.pl/sl/growy/';
|
|
12
12
|
const FILE_TO_EXTRACT_FROM_ZIP = 'slowa.txt';
|
|
13
13
|
const getPlPlWordList = async () => {
|
|
14
|
-
const
|
|
14
|
+
const tempFilepath = (0, lib_1.getTempFilepath)();
|
|
15
15
|
const zipUrl = await fetchZipUrl(PAGE_URL);
|
|
16
16
|
const zipTempFilename = await (0, lib_1.downloadFile)(zipUrl);
|
|
17
|
-
await unzip(zipTempFilename,
|
|
18
|
-
|
|
19
|
-
const file =
|
|
20
|
-
|
|
21
|
-
const words = (0, lib_1.extractWords)(file.toLocaleString());
|
|
17
|
+
await unzip(zipTempFilename, tempFilepath);
|
|
18
|
+
fs_1.default.unlinkSync(zipTempFilename);
|
|
19
|
+
const file = fs_1.default.readFileSync(tempFilepath, 'utf-8');
|
|
20
|
+
fs_1.default.unlinkSync(tempFilepath);
|
|
21
|
+
const words = (0, lib_1.extractWords)(file.toLocaleString(), 'pl-PL');
|
|
22
22
|
return words;
|
|
23
23
|
};
|
|
24
24
|
const fetchZipUrl = async (url) => {
|
|
@@ -40,13 +40,13 @@ const parseZipContainingPage = (html) => {
|
|
|
40
40
|
return zipFilename;
|
|
41
41
|
};
|
|
42
42
|
const unzip = (zipFilename, outputFilename) => {
|
|
43
|
-
return
|
|
43
|
+
return fs_1.default
|
|
44
44
|
.createReadStream(zipFilename)
|
|
45
45
|
.pipe(unzipper_1.default.Parse())
|
|
46
46
|
.on('entry', (entry) => {
|
|
47
47
|
const fileName = entry.path;
|
|
48
48
|
if (fileName === FILE_TO_EXTRACT_FROM_ZIP) {
|
|
49
|
-
entry.pipe(
|
|
49
|
+
entry.pipe(fs_1.default.createWriteStream(outputFilename));
|
|
50
50
|
}
|
|
51
51
|
else {
|
|
52
52
|
entry.autodrain();
|
|
@@ -8,6 +8,7 @@ const getDeDeWordList_1 = __importDefault(require("./getDeDeWordList"));
|
|
|
8
8
|
const getEnGbWordList_1 = __importDefault(require("./getEnGbWordList"));
|
|
9
9
|
const getEnUsWordList_1 = __importDefault(require("./getEnUsWordList"));
|
|
10
10
|
const getEsEsWordList_1 = __importDefault(require("./getEsEsWordList"));
|
|
11
|
+
const getFaIrWordList_1 = __importDefault(require("./getFaIrWordList"));
|
|
11
12
|
const getFrFrWordList_1 = __importDefault(require("./getFrFrWordList"));
|
|
12
13
|
const getPlPlWordList_1 = __importDefault(require("./getPlPlWordList"));
|
|
13
14
|
const localeMap = {
|
|
@@ -15,6 +16,7 @@ const localeMap = {
|
|
|
15
16
|
[types_1.Locale.EN_GB]: getEnGbWordList_1.default,
|
|
16
17
|
[types_1.Locale.EN_US]: getEnUsWordList_1.default,
|
|
17
18
|
[types_1.Locale.ES_ES]: getEsEsWordList_1.default,
|
|
19
|
+
[types_1.Locale.FA_IR]: getFaIrWordList_1.default,
|
|
18
20
|
[types_1.Locale.FR_FR]: getFrFrWordList_1.default,
|
|
19
21
|
[types_1.Locale.PL_PL]: getPlPlWordList_1.default,
|
|
20
22
|
};
|
|
@@ -4,13 +4,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const follow_redirects_1 = require("follow-redirects");
|
|
7
|
-
const
|
|
8
|
-
const
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const getTempFilepath_1 = __importDefault(require("./getTempFilepath"));
|
|
9
9
|
const downloadFile = (url) => {
|
|
10
10
|
return new Promise((resolve, reject) => {
|
|
11
|
-
const
|
|
11
|
+
const tempFilepath = (0, getTempFilepath_1.default)();
|
|
12
12
|
const protocol = url.startsWith('https') ? follow_redirects_1.https : follow_redirects_1.http;
|
|
13
|
-
const writeStream =
|
|
13
|
+
const writeStream = fs_1.default.createWriteStream(tempFilepath);
|
|
14
14
|
const request = protocol.get(url, (response) => {
|
|
15
15
|
if (typeof response.statusCode === 'undefined' || response.statusCode >= 400) {
|
|
16
16
|
reject(new Error(`Cannot download file: ${url}`));
|
|
@@ -23,7 +23,7 @@ const downloadFile = (url) => {
|
|
|
23
23
|
response.on('end', () => {
|
|
24
24
|
writeStream.on('finish', () => {
|
|
25
25
|
writeStream.close();
|
|
26
|
-
resolve(
|
|
26
|
+
resolve(tempFilepath);
|
|
27
27
|
});
|
|
28
28
|
});
|
|
29
29
|
response.pipe(writeStream);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const extractWords: (file: string) => string[];
|
|
1
|
+
declare const extractWords: (file: string, locale: string) => string[];
|
|
2
2
|
export default extractWords;
|
|
@@ -4,13 +4,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const findFirstWordIndex_1 = __importDefault(require("./findFirstWordIndex"));
|
|
7
|
-
const extractWords = (file) => {
|
|
8
|
-
const lines = file.
|
|
9
|
-
const firstWordIndex = (0, findFirstWordIndex_1.default)(lines);
|
|
10
|
-
const words =
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
.
|
|
7
|
+
const extractWords = (file, locale) => {
|
|
8
|
+
const lines = file.split(/\r?\n/g);
|
|
9
|
+
const firstWordIndex = (0, findFirstWordIndex_1.default)(lines, locale);
|
|
10
|
+
const words = [];
|
|
11
|
+
for (let i = firstWordIndex; i < lines.length; ++i) {
|
|
12
|
+
const trimmed = lines[i].trim();
|
|
13
|
+
if (trimmed.length > 0) {
|
|
14
|
+
words.push(trimmed.toLocaleLowerCase());
|
|
15
|
+
}
|
|
16
|
+
}
|
|
14
17
|
return words;
|
|
15
18
|
};
|
|
16
19
|
exports.default = extractWords;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const findFirstWordIndex: (lines: string[]) => number;
|
|
1
|
+
declare const findFirstWordIndex: (lines: string[], locale: string) => number;
|
|
2
2
|
export default findFirstWordIndex;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const findFirstWordIndex = (lines) => {
|
|
3
|
+
const findFirstWordIndex = (lines, locale) => {
|
|
4
4
|
const firstWordIndex = lines.findIndex((line, index) => {
|
|
5
5
|
const nextLine = line[index + 1] || '';
|
|
6
|
-
const isNextLineInOrder = line.localeCompare(nextLine)
|
|
6
|
+
const isNextLineInOrder = line.localeCompare(nextLine, locale) > 0;
|
|
7
7
|
const hasWhitespace = Boolean(line.match(/\s/));
|
|
8
8
|
const isEmpty = line.trim().length === 0;
|
|
9
9
|
return !isEmpty && !hasWhitespace && isNextLineInOrder;
|
|
@@ -0,0 +1,14 @@
|
|
|
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 os_1 = __importDefault(require("os"));
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const getHash_1 = __importDefault(require("./getHash"));
|
|
9
|
+
const OUTPUT_DIRECTORY = path_1.default.resolve(os_1.default.homedir(), '.scrabble-solver');
|
|
10
|
+
const getTempFilepath = () => {
|
|
11
|
+
const filename = `${(0, getHash_1.default)()}.txt`;
|
|
12
|
+
return path_1.default.join(OUTPUT_DIRECTORY, filename);
|
|
13
|
+
};
|
|
14
|
+
exports.default = getTempFilepath;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const getTxtWordList: (url: string) => Promise<string[]>;
|
|
1
|
+
declare const getTxtWordList: (url: string, locale: string) => Promise<string[]>;
|
|
2
2
|
export default getTxtWordList;
|