@scrabble-solver/word-lists 2.8.2 → 2.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/getDeDeWordList.js +5 -43
- package/build/getEnGbWordList.js +5 -43
- package/build/getEnUsWordList.js +5 -43
- package/build/getEsEsWordList.js +7 -50
- package/build/getFrFrWordList.js +9 -50
- package/build/getPlPlWordList.js +34 -91
- package/build/getWordList.js +16 -17
- package/build/lib/downloadFile.js +5 -5
- package/build/lib/downloadHtml.js +8 -8
- package/build/lib/extractWords.js +5 -5
- package/build/lib/findFirstWordIndex.js +6 -6
- package/build/lib/getHash.js +2 -5
- package/build/lib/getTempFilename.js +3 -3
- package/build/lib/getTxtWordList.js +12 -56
- package/package.json +3 -3
- package/src/getFrFrWordList.ts +1 -0
package/build/getDeDeWordList.js
CHANGED
|
@@ -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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
return
|
|
43
|
-
|
|
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;
|
package/build/getEnGbWordList.js
CHANGED
|
@@ -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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
return
|
|
43
|
-
|
|
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;
|
package/build/getEnUsWordList.js
CHANGED
|
@@ -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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
return
|
|
43
|
-
|
|
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;
|
package/build/getEsEsWordList.js
CHANGED
|
@@ -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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return
|
|
44
|
-
|
|
45
|
-
|
|
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
|
};
|
package/build/getFrFrWordList.js
CHANGED
|
@@ -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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
};
|
package/build/getPlPlWordList.js
CHANGED
|
@@ -1,108 +1,51 @@
|
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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 zipTempFilename = (0, lib_1.getTempFilename)();
|
|
15
|
+
const tempFilename = (0, lib_1.getTempFilename)();
|
|
16
|
+
const zipUrl = await fetchZipUrl(PAGE_URL);
|
|
17
|
+
await (0, lib_1.downloadFile)(zipUrl, memfs_1.fs.createWriteStream(zipTempFilename));
|
|
18
|
+
await unzip(zipTempFilename, tempFilename);
|
|
19
|
+
memfs_1.fs.unlinkSync(zipTempFilename);
|
|
20
|
+
const file = memfs_1.fs.readFileSync(tempFilename, 'utf-8');
|
|
21
|
+
memfs_1.fs.unlinkSync(tempFilename);
|
|
22
|
+
const words = (0, lib_1.extractWords)(file.toString());
|
|
23
|
+
return words;
|
|
24
|
+
};
|
|
25
|
+
const fetchZipUrl = async (url) => {
|
|
26
|
+
const html = await (0, lib_1.downloadHtml)(url);
|
|
27
|
+
const filename = await parseZipContainingPage(html);
|
|
28
|
+
const { href } = new url_1.URL(filename, url);
|
|
29
|
+
return href;
|
|
30
|
+
};
|
|
31
|
+
const parseZipContainingPage = (html) => {
|
|
32
|
+
const $ = cheerio_1.default.load(html);
|
|
33
|
+
const $links = $('a');
|
|
34
|
+
const links = Array.from($links)
|
|
35
|
+
.map((link) => $(link).attr('href'))
|
|
93
36
|
.filter(Boolean);
|
|
94
|
-
|
|
37
|
+
const zipFilename = links.find((link) => link.endsWith('.zip'));
|
|
95
38
|
if (typeof zipFilename === 'undefined') {
|
|
96
39
|
throw new Error('Cannot find link to zip file on the page');
|
|
97
40
|
}
|
|
98
41
|
return zipFilename;
|
|
99
42
|
};
|
|
100
|
-
|
|
43
|
+
const unzip = (zipFilename, outputFilename) => {
|
|
101
44
|
return memfs_1.fs
|
|
102
45
|
.createReadStream(zipFilename)
|
|
103
46
|
.pipe(unzipper_1.default.Parse())
|
|
104
|
-
.on('entry',
|
|
105
|
-
|
|
47
|
+
.on('entry', (entry) => {
|
|
48
|
+
const fileName = entry.path;
|
|
106
49
|
if (fileName === FILE_TO_EXTRACT_FROM_ZIP) {
|
|
107
50
|
entry.pipe(memfs_1.fs.createWriteStream(outputFilename));
|
|
108
51
|
}
|
package/build/getWordList.js
CHANGED
|
@@ -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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
return new Promise(
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
const follow_redirects_1 = require("follow-redirects");
|
|
4
|
+
const downloadFile = (url, outputStream) => {
|
|
5
|
+
return new Promise((resolve, reject) => {
|
|
6
|
+
const protocol = url.startsWith('https') ? follow_redirects_1.https : follow_redirects_1.http;
|
|
7
|
+
const request = protocol.get(url, (response) => {
|
|
8
8
|
if (typeof response.statusCode === 'undefined' || response.statusCode >= 400) {
|
|
9
9
|
reject();
|
|
10
10
|
return;
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
return new Promise(
|
|
6
|
-
|
|
7
|
-
protocol.get(url,
|
|
8
|
-
|
|
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',
|
|
10
|
+
response.on('data', (chunk) => {
|
|
11
11
|
data += chunk;
|
|
12
12
|
});
|
|
13
|
-
response.on('end',
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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') {
|
package/build/lib/getHash.js
CHANGED
|
@@ -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
|
-
|
|
7
|
-
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
return
|
|
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,18 @@
|
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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 getTempFilename_1 = __importDefault(require("./getTempFilename"));
|
|
10
|
+
const getTxtWordList = async (url) => {
|
|
11
|
+
const tempFilename = (0, getTempFilename_1.default)();
|
|
12
|
+
await (0, downloadFile_1.default)(url, memfs_1.fs.createWriteStream(tempFilename));
|
|
13
|
+
const file = memfs_1.fs.readFileSync(tempFilename, 'utf-8');
|
|
14
|
+
const words = (0, extractWords_1.default)(file.toString());
|
|
15
|
+
memfs_1.fs.unlinkSync(tempFilename);
|
|
16
|
+
return words;
|
|
17
|
+
};
|
|
62
18
|
exports.default = getTxtWordList;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scrabble-solver/word-lists",
|
|
3
|
-
"version": "2.8.
|
|
3
|
+
"version": "2.8.3",
|
|
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.
|
|
27
|
+
"@scrabble-solver/types": "^2.8.3",
|
|
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": "
|
|
37
|
+
"gitHead": "116f214733e7ad071044f556bcf67e867da3d9ca"
|
|
38
38
|
}
|
package/src/getFrFrWordList.ts
CHANGED
|
@@ -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[]> => {
|