-
Notifications
You must be signed in to change notification settings - Fork 1
/
worker.js
75 lines (60 loc) · 1.93 KB
/
worker.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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
74
var Typo = require('./data/typo/typo');
var words = {}
var definitions = {}
var dictionarys = {}
self.addEventListener("message", async function(event) {
var data = JSON.parse(event.data);
var dataUrl = data.dataUrl
if (dataUrl[dataUrl.length - 1] !== '/') {
dataUrl = dataUrl + '/'
}
var dictionaryPathCandidate = dataUrl + 'data/typo/typo/dictionaries'
if (!dictionarys[dictionaryPathCandidate]) {
dictionarys[dictionaryPathCandidate] = new Typo("en_US", false, false, { dictionaryPath: dictionaryPathCandidate });
}
var dictionary = dictionarys[dictionaryPathCandidate]
if (data.type === 'spell') {
return postMessage(JSON.stringify({
job: 'spell',
value: data.value,
result: dictionary.check(data.value)
}));
}
if (data.type === 'suggest') {
return postMessage(JSON.stringify({
job: 'suggest',
value: data.value,
result: dictionary.suggest(data.value)
}));
}
if (data.type === 'define') {
if (!definitions[data.value[0]]) {
definitions[data.value[0]] = fetch(data.dataUrl + 'data/wordset/data/' + data.value[0] + '.json')
.then(response => response.json())
}
var result = await definitions[data.value[0]]
return postMessage(JSON.stringify({
job: 'define',
value: data.value,
result: result[data.value]
}));
}
if (data.type === 'alternative') {
if (!words[data.value[0]]) {
words[data.value[0]] = fetch(data.dataUrl + 'data/words/' + data.value[0] + '.txt')
.then(response => response.text())
}
var wordList = await words[data.value[0]]
var regex = new RegExp('^' + data.value + '\\,(.*?)\$', 'gm')
var result = wordList.match(regex)
return postMessage(JSON.stringify({
job: 'alternative',
value: data.value,
result: result && result[0] && result[0].split(',')
}));
}
postMessage(JSON.stringify({
type: 'error',
result: 'job not found'
}))
});