alfred-spell 0.2.0 → 0.3.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/README.md CHANGED
@@ -1 +1,3 @@
1
1
  # alfred-spell
2
+
3
+ Alfred workflow for spell checking and finding synonyms using the Datamuse API.
package/fetchers.js CHANGED
@@ -1,20 +1,29 @@
1
1
  // @ts-check
2
2
 
3
3
  /**
4
- * Source of truth: https://www.datamuse.com/api/
4
+ * References: https://onelook.com/thesaurus/ and https://www.datamuse.com/api/
5
5
  *
6
6
  * @param {{ s: string; max?: number }} input
7
- * @returns {Promise<Array<{ word: string; score: number }>>}
7
+ * @returns {Promise<Array<{ word: string; score: number, defs: Array<string> }>>}
8
8
  */
9
9
  export async function sug(input) {
10
10
  const { s, max = 10 } = input;
11
11
 
12
12
  const query = new URLSearchParams({
13
- s,
14
- max: String(max),
13
+ k: "olthes_ac3", // unclear
14
+ max: String(max), // page size
15
+ md: "d", // metadata flags
16
+ s, // keyword
17
+ v: "ol_gte2_suggest", // custom vocabulary set
15
18
  });
16
19
 
17
- const res = await fetch(`https://api.datamuse.com/sug?${query}`);
20
+ const res = await fetch(`https://onelook.com/api/sug?${query}`, {
21
+ headers: new Headers({
22
+ "User-Agent":
23
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36",
24
+ Referer: "https://onelook.com/thesaurus/",
25
+ }),
26
+ });
18
27
 
19
28
  return await res.json();
20
29
  }
package/index.js CHANGED
@@ -3,6 +3,8 @@
3
3
  import alfy from "alfy";
4
4
  import { sug } from "./fetchers.js";
5
5
 
6
+ const DEF_PATTERN = /^(?<def>.*?)\s+\[(?<syns>[^\]]+)\]$/;
7
+
6
8
  async function main() {
7
9
  const input = alfy.input?.trim();
8
10
 
@@ -31,33 +33,48 @@ async function main() {
31
33
  sortedData.unshift({
32
34
  word: input,
33
35
  score: -1,
36
+ defs: [],
34
37
  });
35
38
  }
36
39
 
37
40
  alfy.output(
38
41
  sortedData.map((x) => {
39
42
  const isShowingTopScoreCandidate = x.score === topScore;
40
- const isShowingExactMatch = x.word === input;
41
43
  const isShowingRawInputAsIs = x.score < 0;
42
44
 
45
+ let definition = "";
46
+ let synonyms = "";
47
+
48
+ if ((x.defs ?? []).length === 1) {
49
+ const rawDef = x.defs[0].trim().replace(/^u\t/, "");
50
+
51
+ const match = rawDef.match(DEF_PATTERN);
52
+
53
+ definition = match?.groups?.def ?? "";
54
+ synonyms = match?.groups?.syns ?? "";
55
+ }
56
+
43
57
  let prefix = "";
44
58
  if (isShowingTopScoreCandidate) {
45
- prefix = isShowingExactMatch ? "✅ " : "✍️ ";
59
+ prefix = x.word === input ? "✅ " : "✍️ ";
46
60
  }
47
61
 
48
- const displayScore = (x.score / topScore).toFixed(3);
49
-
50
62
  return {
51
63
  title: x.word,
52
64
  subtitle: isShowingRawInputAsIs
53
65
  ? "💬 Raw input"
54
- : `${prefix}Match score: ${displayScore}`,
66
+ : `${prefix}${synonyms}`,
55
67
  text: {
56
68
  copy: x.word,
57
69
  largetype: x.word,
58
70
  },
59
71
  arg: x.word,
60
72
  autocomplete: x.word,
73
+ mods: {
74
+ cmd: {
75
+ arg: `### Definition\n\n${definition}\n\n### Synonyms\n\n${synonyms}`,
76
+ },
77
+ },
61
78
  };
62
79
  }),
63
80
  );
package/info.plist CHANGED
@@ -20,6 +20,16 @@
20
20
  <key>vitoclose</key>
21
21
  <false/>
22
22
  </dict>
23
+ <dict>
24
+ <key>destinationuid</key>
25
+ <string>9CF7FDC9-F6B5-4D65-89D1-69681D74B9DD</string>
26
+ <key>modifiers</key>
27
+ <integer>1048576</integer>
28
+ <key>modifiersubtext</key>
29
+ <string>↗ View full definition…</string>
30
+ <key>vitoclose</key>
31
+ <false/>
32
+ </dict>
23
33
  </array>
24
34
  </dict>
25
35
  <key>createdby</key>
@@ -67,11 +77,11 @@
67
77
  <key>escaping</key>
68
78
  <integer>102</integer>
69
79
  <key>keyword</key>
70
- <string>s</string>
80
+ <string>{var:trigger_keyword}</string>
71
81
  <key>queuedelaycustom</key>
72
82
  <integer>3</integer>
73
83
  <key>queuedelayimmediatelyinitially</key>
74
- <true/>
84
+ <false/>
75
85
  <key>queuedelaymode</key>
76
86
  <integer>1</integer>
77
87
  <key>queuemode</key>
@@ -100,30 +110,90 @@
100
110
  <key>version</key>
101
111
  <integer>3</integer>
102
112
  </dict>
113
+ <dict>
114
+ <key>config</key>
115
+ <dict>
116
+ <key>behaviour</key>
117
+ <integer>2</integer>
118
+ <key>fontmode</key>
119
+ <integer>0</integer>
120
+ <key>fontsizing</key>
121
+ <integer>3</integer>
122
+ <key>footertext</key>
123
+ <string></string>
124
+ <key>inputfile</key>
125
+ <string></string>
126
+ <key>inputtype</key>
127
+ <integer>0</integer>
128
+ <key>loadingtext</key>
129
+ <string></string>
130
+ <key>outputmode</key>
131
+ <integer>0</integer>
132
+ <key>scriptinput</key>
133
+ <integer>0</integer>
134
+ <key>spellchecking</key>
135
+ <integer>0</integer>
136
+ <key>stackview</key>
137
+ <true/>
138
+ </dict>
139
+ <key>type</key>
140
+ <string>alfred.workflow.userinterface.text</string>
141
+ <key>uid</key>
142
+ <string>9CF7FDC9-F6B5-4D65-89D1-69681D74B9DD</string>
143
+ <key>version</key>
144
+ <integer>1</integer>
145
+ </dict>
103
146
  </array>
104
147
  <key>readme</key>
105
148
  <string></string>
106
149
  <key>uidata</key>
107
150
  <dict>
151
+ <key>9CF7FDC9-F6B5-4D65-89D1-69681D74B9DD</key>
152
+ <dict>
153
+ <key>xpos</key>
154
+ <real>310</real>
155
+ <key>ypos</key>
156
+ <real>250</real>
157
+ </dict>
108
158
  <key>BAF05B57-A8EF-45EC-82D6-8C624C22E515</key>
109
159
  <dict>
110
160
  <key>xpos</key>
111
- <real>155</real>
161
+ <real>95</real>
112
162
  <key>ypos</key>
113
- <real>265</real>
163
+ <real>130</real>
114
164
  </dict>
115
165
  <key>D22FAA64-890B-42FC-99EE-60BF083CEFE8</key>
116
166
  <dict>
117
167
  <key>xpos</key>
118
- <real>315</real>
168
+ <real>310</real>
119
169
  <key>ypos</key>
120
- <real>265</real>
170
+ <real>130</real>
121
171
  </dict>
122
172
  </dict>
123
173
  <key>userconfigurationconfig</key>
124
- <array/>
125
- <key>variablesdontexport</key>
126
- <array/>
174
+ <array>
175
+ <dict>
176
+ <key>config</key>
177
+ <dict>
178
+ <key>default</key>
179
+ <string>s</string>
180
+ <key>placeholder</key>
181
+ <string></string>
182
+ <key>required</key>
183
+ <true/>
184
+ <key>trim</key>
185
+ <true/>
186
+ </dict>
187
+ <key>description</key>
188
+ <string></string>
189
+ <key>label</key>
190
+ <string>Keyword</string>
191
+ <key>type</key>
192
+ <string>textfield</string>
193
+ <key>variable</key>
194
+ <string>trigger_keyword</string>
195
+ </dict>
196
+ </array>
127
197
  <key>version</key>
128
198
  <string></string>
129
199
  <key>webaddress</key>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alfred-spell",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "postinstall": "alfy-init",
package/prefs.plist ADDED
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict/>
5
+ </plist>