@scrabble-solver/word-lists 2.8.2 → 2.8.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.
@@ -1,46 +1,8 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
2
  Object.defineProperty(exports, "__esModule", { value: true });
39
- var lib_1 = require("./lib");
40
- var FILE_URL = 'https://raw.githubusercontent.com/HanSolo80/German-Dictionary/master/dictionary.txt';
41
- var getDeDeWordList = function () { return __awaiter(void 0, void 0, void 0, function () {
42
- return __generator(this, function (_a) {
43
- return [2 /*return*/, (0, lib_1.getTxtWordList)(FILE_URL)];
44
- });
45
- }); };
3
+ const lib_1 = require("./lib");
4
+ const FILE_URL = 'https://raw.githubusercontent.com/HanSolo80/German-Dictionary/master/dictionary.txt';
5
+ const getDeDeWordList = async () => {
6
+ return (0, lib_1.getTxtWordList)(FILE_URL);
7
+ };
46
8
  exports.default = getDeDeWordList;
@@ -1,46 +1,8 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
2
  Object.defineProperty(exports, "__esModule", { value: true });
39
- var lib_1 = require("./lib");
40
- var FILE_URL = 'https://www.wordgamedictionary.com/sowpods/download/sowpods.txt';
41
- var getEnGbWordList = function () { return __awaiter(void 0, void 0, void 0, function () {
42
- return __generator(this, function (_a) {
43
- return [2 /*return*/, (0, lib_1.getTxtWordList)(FILE_URL)];
44
- });
45
- }); };
3
+ const lib_1 = require("./lib");
4
+ const FILE_URL = 'https://www.wordgamedictionary.com/sowpods/download/sowpods.txt';
5
+ const getEnGbWordList = async () => {
6
+ return (0, lib_1.getTxtWordList)(FILE_URL);
7
+ };
46
8
  exports.default = getEnGbWordList;
@@ -1,46 +1,8 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
2
  Object.defineProperty(exports, "__esModule", { value: true });
39
- var lib_1 = require("./lib");
40
- var FILE_URL = 'https://www.wordgamedictionary.com/twl06/download/twl06.txt';
41
- var getEnUsWordList = function () { return __awaiter(void 0, void 0, void 0, function () {
42
- return __generator(this, function (_a) {
43
- return [2 /*return*/, (0, lib_1.getTxtWordList)(FILE_URL)];
44
- });
45
- }); };
3
+ const lib_1 = require("./lib");
4
+ const FILE_URL = 'https://www.wordgamedictionary.com/twl06/download/twl06.txt';
5
+ const getEnUsWordList = async () => {
6
+ return (0, lib_1.getTxtWordList)(FILE_URL);
7
+ };
46
8
  exports.default = getEnUsWordList;
@@ -1,55 +1,12 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
2
  Object.defineProperty(exports, "__esModule", { value: true });
39
- var lib_1 = require("./lib");
40
- var FILE_URL = 'https://raw.githubusercontent.com/kamilmielnik/fise-2/master/fise-2.txt';
41
- var getEsEsWordList = function () { return __awaiter(void 0, void 0, void 0, function () {
42
- var words;
43
- return __generator(this, function (_a) {
44
- switch (_a.label) {
45
- case 0: return [4 /*yield*/, (0, lib_1.getTxtWordList)(FILE_URL)];
46
- case 1:
47
- words = _a.sent();
48
- return [2 /*return*/, words.map(normalizeWord)];
49
- }
50
- });
51
- }); };
52
- var normalizeWord = function (word) {
3
+ const lib_1 = require("./lib");
4
+ const FILE_URL = 'https://raw.githubusercontent.com/kamilmielnik/fise-2/master/fise-2.txt';
5
+ const getEsEsWordList = async () => {
6
+ const words = await (0, lib_1.getTxtWordList)(FILE_URL);
7
+ return words.map(normalizeWord);
8
+ };
9
+ const normalizeWord = (word) => {
53
10
  // normalization from https://stackoverflow.com/a/37511463
54
11
  return word.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
55
12
  };
@@ -1,55 +1,14 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
2
  Object.defineProperty(exports, "__esModule", { value: true });
39
- var lib_1 = require("./lib");
40
- var FILE_URL = 'https://raw.githubusercontent.com/hbenbel/French-Dictionary/a573eab10cc798d7d5da7daab4d2ac0259bb46a3/dictionary/dictionary.txt';
41
- var getFrFrWordList = function () { return __awaiter(void 0, void 0, void 0, function () {
42
- var words;
43
- return __generator(this, function (_a) {
44
- switch (_a.label) {
45
- case 0: return [4 /*yield*/, (0, lib_1.getTxtWordList)(FILE_URL)];
46
- case 1:
47
- words = _a.sent();
48
- return [2 /*return*/, words.map(normalizeWord)];
49
- }
50
- });
51
- }); };
52
- var normalizeWord = function (word) {
3
+ const lib_1 = require("./lib");
4
+ const FILE_URL =
5
+ // eslint-disable-next-line max-len
6
+ 'https://raw.githubusercontent.com/hbenbel/French-Dictionary/a573eab10cc798d7d5da7daab4d2ac0259bb46a3/dictionary/dictionary.txt';
7
+ const getFrFrWordList = async () => {
8
+ const words = await (0, lib_1.getTxtWordList)(FILE_URL);
9
+ return words.map(normalizeWord);
10
+ };
11
+ const normalizeWord = (word) => {
53
12
  // normalization from https://stackoverflow.com/a/37511463
54
13
  return word.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
55
14
  };
@@ -1,108 +1,50 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
39
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
40
4
  };
41
5
  Object.defineProperty(exports, "__esModule", { value: true });
42
- var cheerio_1 = __importDefault(require("cheerio"));
43
- var memfs_1 = require("memfs");
44
- var unzipper_1 = __importDefault(require("unzipper"));
45
- var url_1 = require("url");
46
- var lib_1 = require("./lib");
47
- var PAGE_URL = 'https://sjp.pl/sl/growy/';
48
- var FILE_TO_EXTRACT_FROM_ZIP = 'slowa.txt';
49
- var getPlPlWordList = function () { return __awaiter(void 0, void 0, void 0, function () {
50
- var zipTempFilename, tempFilename, zipUrl, file, words;
51
- return __generator(this, function (_a) {
52
- switch (_a.label) {
53
- case 0:
54
- zipTempFilename = (0, lib_1.getTempFilename)();
55
- tempFilename = (0, lib_1.getTempFilename)();
56
- return [4 /*yield*/, fetchZipUrl(PAGE_URL)];
57
- case 1:
58
- zipUrl = _a.sent();
59
- return [4 /*yield*/, (0, lib_1.downloadFile)(zipUrl, memfs_1.fs.createWriteStream(zipTempFilename))];
60
- case 2:
61
- _a.sent();
62
- return [4 /*yield*/, unzip(zipTempFilename, tempFilename)];
63
- case 3:
64
- _a.sent();
65
- memfs_1.fs.unlinkSync(zipTempFilename);
66
- file = memfs_1.fs.readFileSync(tempFilename, 'utf-8');
67
- memfs_1.fs.unlinkSync(tempFilename);
68
- words = (0, lib_1.extractWords)(file.toString());
69
- return [2 /*return*/, words];
70
- }
71
- });
72
- }); };
73
- var fetchZipUrl = function (url) { return __awaiter(void 0, void 0, void 0, function () {
74
- var html, filename, href;
75
- return __generator(this, function (_a) {
76
- switch (_a.label) {
77
- case 0: return [4 /*yield*/, (0, lib_1.downloadHtml)(url)];
78
- case 1:
79
- html = _a.sent();
80
- return [4 /*yield*/, parseZipContainingPage(html)];
81
- case 2:
82
- filename = _a.sent();
83
- href = new url_1.URL(filename, url).href;
84
- return [2 /*return*/, href];
85
- }
86
- });
87
- }); };
88
- var parseZipContainingPage = function (html) {
89
- var $ = cheerio_1.default.load(html);
90
- var $links = $('a');
91
- var links = Array.from($links)
92
- .map(function (link) { return $(link).attr('href'); })
6
+ const cheerio_1 = __importDefault(require("cheerio"));
7
+ const memfs_1 = require("memfs");
8
+ const unzipper_1 = __importDefault(require("unzipper"));
9
+ const url_1 = require("url");
10
+ const lib_1 = require("./lib");
11
+ const PAGE_URL = 'https://sjp.pl/sl/growy/';
12
+ const FILE_TO_EXTRACT_FROM_ZIP = 'slowa.txt';
13
+ const getPlPlWordList = async () => {
14
+ const tempFilename = (0, lib_1.getTempFilename)();
15
+ const zipUrl = await fetchZipUrl(PAGE_URL);
16
+ const zipTempFilename = await (0, lib_1.downloadFile)(zipUrl);
17
+ await unzip(zipTempFilename, tempFilename);
18
+ memfs_1.fs.unlinkSync(zipTempFilename);
19
+ const file = memfs_1.fs.readFileSync(tempFilename, 'utf-8');
20
+ memfs_1.fs.unlinkSync(tempFilename);
21
+ const words = (0, lib_1.extractWords)(file.toLocaleString());
22
+ return words;
23
+ };
24
+ const fetchZipUrl = async (url) => {
25
+ const html = await (0, lib_1.downloadHtml)(url);
26
+ const filename = await parseZipContainingPage(html);
27
+ const { href } = new url_1.URL(filename, url);
28
+ return href;
29
+ };
30
+ const parseZipContainingPage = (html) => {
31
+ const $ = cheerio_1.default.load(html);
32
+ const $links = $('a');
33
+ const links = Array.from($links)
34
+ .map((link) => $(link).attr('href'))
93
35
  .filter(Boolean);
94
- var zipFilename = links.find(function (link) { return link.endsWith('.zip'); });
36
+ const zipFilename = links.find((link) => link.endsWith('.zip'));
95
37
  if (typeof zipFilename === 'undefined') {
96
38
  throw new Error('Cannot find link to zip file on the page');
97
39
  }
98
40
  return zipFilename;
99
41
  };
100
- var unzip = function (zipFilename, outputFilename) {
42
+ const unzip = (zipFilename, outputFilename) => {
101
43
  return memfs_1.fs
102
44
  .createReadStream(zipFilename)
103
45
  .pipe(unzipper_1.default.Parse())
104
- .on('entry', function (entry) {
105
- var fileName = entry.path;
46
+ .on('entry', (entry) => {
47
+ const fileName = entry.path;
106
48
  if (fileName === FILE_TO_EXTRACT_FROM_ZIP) {
107
49
  entry.pipe(memfs_1.fs.createWriteStream(outputFilename));
108
50
  }
@@ -2,22 +2,21 @@
2
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
- var _a;
6
5
  Object.defineProperty(exports, "__esModule", { value: true });
7
- var types_1 = require("@scrabble-solver/types");
8
- var getDeDeWordList_1 = __importDefault(require("./getDeDeWordList"));
9
- var getEnGbWordList_1 = __importDefault(require("./getEnGbWordList"));
10
- var getEnUsWordList_1 = __importDefault(require("./getEnUsWordList"));
11
- var getEsEsWordList_1 = __importDefault(require("./getEsEsWordList"));
12
- var getFrFrWordList_1 = __importDefault(require("./getFrFrWordList"));
13
- var getPlPlWordList_1 = __importDefault(require("./getPlPlWordList"));
14
- var localeMap = (_a = {},
15
- _a[types_1.Locale.DE_DE] = getDeDeWordList_1.default,
16
- _a[types_1.Locale.EN_GB] = getEnGbWordList_1.default,
17
- _a[types_1.Locale.EN_US] = getEnUsWordList_1.default,
18
- _a[types_1.Locale.ES_ES] = getEsEsWordList_1.default,
19
- _a[types_1.Locale.FR_FR] = getFrFrWordList_1.default,
20
- _a[types_1.Locale.PL_PL] = getPlPlWordList_1.default,
21
- _a);
22
- var getWordList = function (locale) { return localeMap[locale](); };
6
+ const types_1 = require("@scrabble-solver/types");
7
+ const getDeDeWordList_1 = __importDefault(require("./getDeDeWordList"));
8
+ const getEnGbWordList_1 = __importDefault(require("./getEnGbWordList"));
9
+ const getEnUsWordList_1 = __importDefault(require("./getEnUsWordList"));
10
+ const getEsEsWordList_1 = __importDefault(require("./getEsEsWordList"));
11
+ const getFrFrWordList_1 = __importDefault(require("./getFrFrWordList"));
12
+ const getPlPlWordList_1 = __importDefault(require("./getPlPlWordList"));
13
+ const localeMap = {
14
+ [types_1.Locale.DE_DE]: getDeDeWordList_1.default,
15
+ [types_1.Locale.EN_GB]: getEnGbWordList_1.default,
16
+ [types_1.Locale.EN_US]: getEnUsWordList_1.default,
17
+ [types_1.Locale.ES_ES]: getEsEsWordList_1.default,
18
+ [types_1.Locale.FR_FR]: getFrFrWordList_1.default,
19
+ [types_1.Locale.PL_PL]: getPlPlWordList_1.default,
20
+ };
21
+ const getWordList = (locale) => localeMap[locale]();
23
22
  exports.default = getWordList;
@@ -1,3 +1,2 @@
1
- import { Writable } from 'stream';
2
- declare const downloadFile: (url: string, outputStream: Writable) => Promise<void>;
1
+ declare const downloadFile: (url: string) => Promise<string>;
3
2
  export default downloadFile;
@@ -1,19 +1,37 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- var follow_redirects_1 = require("follow-redirects");
4
- var downloadFile = function (url, outputStream) {
5
- return new Promise(function (resolve, reject) {
6
- var protocol = url.startsWith('https') ? follow_redirects_1.https : follow_redirects_1.http;
7
- var request = protocol.get(url, function (response) {
6
+ const follow_redirects_1 = require("follow-redirects");
7
+ const memfs_1 = require("memfs");
8
+ const getTempFilename_1 = __importDefault(require("./getTempFilename"));
9
+ const downloadFile = (url) => {
10
+ return new Promise((resolve, reject) => {
11
+ const tempFilename = (0, getTempFilename_1.default)();
12
+ const protocol = url.startsWith('https') ? follow_redirects_1.https : follow_redirects_1.http;
13
+ const writeStream = memfs_1.fs.createWriteStream(tempFilename);
14
+ const request = protocol.get(url, (response) => {
8
15
  if (typeof response.statusCode === 'undefined' || response.statusCode >= 400) {
9
- reject();
16
+ reject(new Error(`Cannot download file: ${url}`));
10
17
  return;
11
18
  }
12
- response.pipe(outputStream);
13
- response.on('error', reject);
14
- response.on('end', resolve);
19
+ response.on('error', (error) => {
20
+ writeStream.close();
21
+ reject(error);
22
+ });
23
+ response.on('end', () => {
24
+ writeStream.on('finish', () => {
25
+ writeStream.close();
26
+ resolve(tempFilename);
27
+ });
28
+ });
29
+ response.pipe(writeStream);
30
+ });
31
+ request.on('error', (error) => {
32
+ writeStream.close();
33
+ reject(error);
15
34
  });
16
- request.on('error', reject);
17
35
  });
18
36
  };
19
37
  exports.default = downloadFile;
@@ -1,16 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- var follow_redirects_1 = require("follow-redirects");
4
- var downloadHtml = function (url) {
5
- return new Promise(function (resolve, reject) {
6
- var protocol = url.startsWith('https') ? follow_redirects_1.https : follow_redirects_1.http;
7
- protocol.get(url, function (response) {
8
- var data = '';
3
+ const follow_redirects_1 = require("follow-redirects");
4
+ const downloadHtml = (url) => {
5
+ return new Promise((resolve, reject) => {
6
+ const protocol = url.startsWith('https') ? follow_redirects_1.https : follow_redirects_1.http;
7
+ protocol.get(url, (response) => {
8
+ let data = '';
9
9
  response.setEncoding('utf8');
10
- response.on('data', function (chunk) {
10
+ response.on('data', (chunk) => {
11
11
  data += chunk;
12
12
  });
13
- response.on('end', function () {
13
+ response.on('end', () => {
14
14
  resolve(data);
15
15
  });
16
16
  response.on('error', reject);
@@ -3,11 +3,11 @@ 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
- var findFirstWordIndex_1 = __importDefault(require("./findFirstWordIndex"));
7
- var extractWords = function (file) {
8
- var lines = file.replace(/\r/g, '').split('\n');
9
- var firstWordIndex = (0, findFirstWordIndex_1.default)(lines);
10
- var words = lines.slice(firstWordIndex).filter(Boolean);
6
+ const findFirstWordIndex_1 = __importDefault(require("./findFirstWordIndex"));
7
+ const extractWords = (file) => {
8
+ const lines = file.replace(/\r/g, '').split('\n');
9
+ const firstWordIndex = (0, findFirstWordIndex_1.default)(lines);
10
+ const words = lines.slice(firstWordIndex).filter(Boolean);
11
11
  return words;
12
12
  };
13
13
  exports.default = extractWords;
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- var findFirstWordIndex = function (lines) {
4
- var firstWordIndex = lines.findIndex(function (line, index) {
5
- var nextLine = line[index + 1] || '';
6
- var isNextLineInOrder = line.localeCompare(nextLine) === 1;
7
- var hasWhitespace = Boolean(line.match(/\s/));
8
- var isEmpty = line.trim().length === 0;
3
+ const findFirstWordIndex = (lines) => {
4
+ const firstWordIndex = lines.findIndex((line, index) => {
5
+ const nextLine = line[index + 1] || '';
6
+ const isNextLineInOrder = line.localeCompare(nextLine) === 1;
7
+ const hasWhitespace = Boolean(line.match(/\s/));
8
+ const isEmpty = line.trim().length === 0;
9
9
  return !isEmpty && !hasWhitespace && isNextLineInOrder;
10
10
  });
11
11
  if (typeof firstWordIndex === 'undefined') {
@@ -3,9 +3,6 @@ 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
- var crypto_1 = __importDefault(require("crypto"));
7
- var getHash = function (bytes) {
8
- if (bytes === void 0) { bytes = 8; }
9
- return crypto_1.default.randomBytes(bytes).toString('hex');
10
- };
6
+ const crypto_1 = __importDefault(require("crypto"));
7
+ const getHash = (bytes = 8) => crypto_1.default.randomBytes(bytes).toString('hex');
11
8
  exports.default = getHash;
@@ -3,8 +3,8 @@ 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
- var getHash_1 = __importDefault(require("./getHash"));
7
- var getTempFilename = function () {
8
- return "/".concat((0, getHash_1.default)(), ".txt");
6
+ const getHash_1 = __importDefault(require("./getHash"));
7
+ const getTempFilename = () => {
8
+ return `/${(0, getHash_1.default)()}.txt`;
9
9
  };
10
10
  exports.default = getTempFilename;
@@ -1,62 +1,16 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
39
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
40
4
  };
41
5
  Object.defineProperty(exports, "__esModule", { value: true });
42
- var memfs_1 = require("memfs");
43
- var downloadFile_1 = __importDefault(require("./downloadFile"));
44
- var extractWords_1 = __importDefault(require("./extractWords"));
45
- var getTempFilename_1 = __importDefault(require("./getTempFilename"));
46
- var getTxtWordList = function (url) { return __awaiter(void 0, void 0, void 0, function () {
47
- var tempFilename, file, words;
48
- return __generator(this, function (_a) {
49
- switch (_a.label) {
50
- case 0:
51
- tempFilename = (0, getTempFilename_1.default)();
52
- return [4 /*yield*/, (0, downloadFile_1.default)(url, memfs_1.fs.createWriteStream(tempFilename))];
53
- case 1:
54
- _a.sent();
55
- file = memfs_1.fs.readFileSync(tempFilename, 'utf-8');
56
- words = (0, extractWords_1.default)(file.toString());
57
- memfs_1.fs.unlinkSync(tempFilename);
58
- return [2 /*return*/, words];
59
- }
60
- });
61
- }); };
6
+ const memfs_1 = require("memfs");
7
+ const downloadFile_1 = __importDefault(require("./downloadFile"));
8
+ const extractWords_1 = __importDefault(require("./extractWords"));
9
+ const getTxtWordList = async (url) => {
10
+ const tempFilename = await (0, downloadFile_1.default)(url);
11
+ const file = memfs_1.fs.readFileSync(tempFilename, 'utf-8');
12
+ const words = (0, extractWords_1.default)(file.toLocaleString());
13
+ memfs_1.fs.unlinkSync(tempFilename);
14
+ return words;
15
+ };
62
16
  exports.default = getTxtWordList;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/word-lists",
3
- "version": "2.8.2",
3
+ "version": "2.8.4",
4
4
  "description": "Scrabble Solver 2 - Word lists",
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/types": "^2.8.2",
27
+ "@scrabble-solver/types": "^2.8.4",
28
28
  "cheerio": "^1.0.0-rc.12",
29
29
  "follow-redirects": "^1.15.2",
30
30
  "memfs": "^3.4.7",
@@ -34,5 +34,5 @@
34
34
  "@types/follow-redirects": "^1.14.1",
35
35
  "@types/unzipper": "^0.10.5"
36
36
  },
37
- "gitHead": "bf360562a79572dd4640ac7cd7f26199f1ba6899"
37
+ "gitHead": "3b0c4c9d7987e456f34f7e2918931b0024b8a393"
38
38
  }
@@ -1,6 +1,7 @@
1
1
  import { getTxtWordList } from './lib';
2
2
 
3
3
  const FILE_URL =
4
+ // eslint-disable-next-line max-len
4
5
  'https://raw.githubusercontent.com/hbenbel/French-Dictionary/a573eab10cc798d7d5da7daab4d2ac0259bb46a3/dictionary/dictionary.txt';
5
6
 
6
7
  const getFrFrWordList = async (): Promise<string[]> => {
@@ -9,15 +9,14 @@ const PAGE_URL = 'https://sjp.pl/sl/growy/';
9
9
  const FILE_TO_EXTRACT_FROM_ZIP = 'slowa.txt';
10
10
 
11
11
  const getPlPlWordList = async (): Promise<string[]> => {
12
- const zipTempFilename = getTempFilename();
13
12
  const tempFilename = getTempFilename();
14
13
  const zipUrl = await fetchZipUrl(PAGE_URL);
15
- await downloadFile(zipUrl, fs.createWriteStream(zipTempFilename));
14
+ const zipTempFilename = await downloadFile(zipUrl);
16
15
  await unzip(zipTempFilename, tempFilename);
17
16
  fs.unlinkSync(zipTempFilename);
18
17
  const file = fs.readFileSync(tempFilename, 'utf-8');
19
18
  fs.unlinkSync(tempFilename);
20
- const words = extractWords(file.toString());
19
+ const words = extractWords(file.toLocaleString());
21
20
  return words;
22
21
  };
23
22
 
@@ -1,20 +1,38 @@
1
1
  import { http, https } from 'follow-redirects';
2
- import { Writable } from 'stream';
2
+ import { fs } from 'memfs';
3
3
 
4
- const downloadFile = (url: string, outputStream: Writable): Promise<void> => {
4
+ import getTempFilename from './getTempFilename';
5
+
6
+ const downloadFile = (url: string): Promise<string> => {
5
7
  return new Promise((resolve, reject) => {
8
+ const tempFilename = getTempFilename();
6
9
  const protocol = url.startsWith('https') ? https : http;
10
+ const writeStream = fs.createWriteStream(tempFilename);
7
11
  const request = protocol.get(url, (response) => {
8
12
  if (typeof response.statusCode === 'undefined' || response.statusCode >= 400) {
9
- reject();
13
+ reject(new Error(`Cannot download file: ${url}`));
10
14
  return;
11
15
  }
12
16
 
13
- response.pipe(outputStream);
14
- response.on('error', reject);
15
- response.on('end', resolve);
17
+ response.on('error', (error) => {
18
+ writeStream.close();
19
+ reject(error);
20
+ });
21
+
22
+ response.on('end', () => {
23
+ writeStream.on('finish', () => {
24
+ writeStream.close();
25
+ resolve(tempFilename);
26
+ });
27
+ });
28
+
29
+ response.pipe(writeStream);
30
+ });
31
+
32
+ request.on('error', (error) => {
33
+ writeStream.close();
34
+ reject(error);
16
35
  });
17
- request.on('error', reject);
18
36
  });
19
37
  };
20
38
 
@@ -2,13 +2,11 @@ import { fs } from 'memfs';
2
2
 
3
3
  import downloadFile from './downloadFile';
4
4
  import extractWords from './extractWords';
5
- import getTempFilename from './getTempFilename';
6
5
 
7
6
  const getTxtWordList = async (url: string): Promise<string[]> => {
8
- const tempFilename = getTempFilename();
9
- await downloadFile(url, fs.createWriteStream(tempFilename));
7
+ const tempFilename = await downloadFile(url);
10
8
  const file = fs.readFileSync(tempFilename, 'utf-8');
11
- const words = extractWords(file.toString());
9
+ const words = extractWords(file.toLocaleString());
12
10
  fs.unlinkSync(tempFilename);
13
11
  return words;
14
12
  };