@cyanheads/zenodo-mcp-server 0.1.1 → 0.1.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/AGENTS.md +30 -22
- package/CLAUDE.md +30 -22
- package/Dockerfile +86 -40
- package/README.md +31 -4
- package/changelog/0.1.x/0.1.2.md +33 -0
- package/changelog/0.1.x/0.1.3.md +35 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-record.tool.d.ts +106 -2
- package/dist/mcp-server/tools/definitions/get-record.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-record.tool.js +453 -107
- package/dist/mcp-server/tools/definitions/get-record.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/index.d.ts +283 -180
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/list-files.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/list-files.tool.js +28 -22
- package/dist/mcp-server/tools/definitions/list-files.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/list-versions.tool.d.ts +1 -1
- package/dist/mcp-server/tools/definitions/list-versions.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/list-versions.tool.js +30 -21
- package/dist/mcp-server/tools/definitions/list-versions.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-vocabulary.tool.d.ts +2 -1
- package/dist/mcp-server/tools/definitions/lookup-vocabulary.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-vocabulary.tool.js +41 -24
- package/dist/mcp-server/tools/definitions/lookup-vocabulary.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/read-file.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/read-file.tool.js +29 -27
- package/dist/mcp-server/tools/definitions/read-file.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-records.tool.d.ts +3 -3
- package/dist/mcp-server/tools/definitions/search-records.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-records.tool.js +145 -35
- package/dist/mcp-server/tools/definitions/search-records.tool.js.map +1 -1
- package/dist/mcp-server/tools/paging.d.ts +42 -0
- package/dist/mcp-server/tools/paging.d.ts.map +1 -0
- package/dist/mcp-server/tools/paging.js +44 -0
- package/dist/mcp-server/tools/paging.js.map +1 -0
- package/dist/mcp-server/tools/record-miss.d.ts +5 -1
- package/dist/mcp-server/tools/record-miss.d.ts.map +1 -1
- package/dist/mcp-server/tools/record-miss.js +6 -2
- package/dist/mcp-server/tools/record-miss.js.map +1 -1
- package/dist/services/zenodo/html-to-text.d.ts +19 -8
- package/dist/services/zenodo/html-to-text.d.ts.map +1 -1
- package/dist/services/zenodo/html-to-text.js +175 -48
- package/dist/services/zenodo/html-to-text.js.map +1 -1
- package/dist/services/zenodo/http.d.ts.map +1 -1
- package/dist/services/zenodo/http.js +21 -32
- package/dist/services/zenodo/http.js.map +1 -1
- package/dist/services/zenodo/identifiers.js +1 -1
- package/dist/services/zenodo/identifiers.js.map +1 -1
- package/dist/services/zenodo/normalize.d.ts.map +1 -1
- package/dist/services/zenodo/normalize.js +5 -2
- package/dist/services/zenodo/normalize.js.map +1 -1
- package/dist/services/zenodo/query-builder.d.ts +84 -8
- package/dist/services/zenodo/query-builder.d.ts.map +1 -1
- package/dist/services/zenodo/query-builder.js +484 -21
- package/dist/services/zenodo/query-builder.js.map +1 -1
- package/dist/services/zenodo/text-preview.d.ts +1 -1
- package/dist/services/zenodo/text-preview.d.ts.map +1 -1
- package/dist/services/zenodo/text-preview.js +38 -38
- package/dist/services/zenodo/text-preview.js.map +1 -1
- package/package.json +14 -12
- package/server.json +16 -24
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview Composes the Zenodo search request from validated filters. Only
|
|
3
3
|
* allowlisted query parameters are ever emitted; every other filter composes into
|
|
4
|
-
* `q` as a quoted field clause. Also holds the local query pre-checks
|
|
5
|
-
* partial-date
|
|
4
|
+
* `q` as a quoted field clause. Also holds the local query pre-checks (including a
|
|
5
|
+
* recognizer of the query grammar Zenodo parses `q` with) and the partial-date
|
|
6
|
+
* expansion search needs.
|
|
6
7
|
* @module services/zenodo/query-builder
|
|
7
8
|
*/
|
|
8
9
|
import { getResourceType } from './resource-types.js';
|
|
@@ -45,14 +46,19 @@ function trimOperators(query) {
|
|
|
45
46
|
* with no open group is escaped as `\)`, and each group left open is closed.
|
|
46
47
|
* Zenodo matches a query it cannot parse as plain text, which turns the filter
|
|
47
48
|
* clauses into optional terms (an unterminated quote matched the whole corpus
|
|
48
|
-
* instead of the filtered set), and a stray `)` lets the query widen them.
|
|
49
|
-
*
|
|
49
|
+
* instead of the filtered set), and a stray `)` lets the query widen them. Inside a
|
|
50
|
+
* range, as Zenodo's search engine lexes it ({@link rangeSpan}), a `/` and a `"` that
|
|
51
|
+
* does not close within the range are literal, so they leave nothing open
|
|
52
|
+
* (`[a"b TO c]`). A well-formed query comes back unchanged.
|
|
50
53
|
*/
|
|
51
54
|
export function balanceQuery(raw) {
|
|
52
55
|
const query = trimOperators(raw);
|
|
53
56
|
let out = '';
|
|
54
57
|
let depth = 0;
|
|
55
58
|
let mode = 'text';
|
|
59
|
+
/** End of the range the scan is inside; once one never closes, none after it can. */
|
|
60
|
+
let rangeStop = 0;
|
|
61
|
+
let rangesClose = true;
|
|
56
62
|
for (let i = 0; i < query.length; i++) {
|
|
57
63
|
const ch = query[i];
|
|
58
64
|
if (ch === '\\') {
|
|
@@ -68,11 +74,15 @@ export function balanceQuery(raw) {
|
|
|
68
74
|
if (ch === '/')
|
|
69
75
|
mode = 'text';
|
|
70
76
|
}
|
|
71
|
-
else if (ch === '"') {
|
|
72
|
-
mode = 'quote';
|
|
77
|
+
else if ((ch === '"' || ch === '/') && !boundCharacter(query, i, rangeStop)) {
|
|
78
|
+
mode = ch === '"' ? 'quote' : 'regex';
|
|
73
79
|
}
|
|
74
|
-
else if (ch === '
|
|
75
|
-
|
|
80
|
+
else if ((ch === '[' || ch === '{') && i >= rangeStop && rangesClose) {
|
|
81
|
+
const { end } = rangeSpan(query, i);
|
|
82
|
+
if (end < 0)
|
|
83
|
+
rangesClose = false;
|
|
84
|
+
else
|
|
85
|
+
rangeStop = end;
|
|
76
86
|
}
|
|
77
87
|
else if (ch === '(') {
|
|
78
88
|
depth++;
|
|
@@ -92,6 +102,311 @@ export function balanceQuery(raw) {
|
|
|
92
102
|
out += '/';
|
|
93
103
|
return out + ')'.repeat(depth);
|
|
94
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* The caller's query as it sits in `q`: balanced ({@link balanceQuery}) when filter
|
|
107
|
+
* clauses compose with it, otherwise trimmed and sent as written. `''` when nothing
|
|
108
|
+
* of it remains, in which case `q` carries no query part.
|
|
109
|
+
*/
|
|
110
|
+
export function queryAsSent(query, withClauses) {
|
|
111
|
+
return withClauses ? balanceQuery(query ?? '') : (query?.trim() ?? '');
|
|
112
|
+
}
|
|
113
|
+
const CONVERSIONS = new Set(['boost', 'fuzzy', 'proximity']);
|
|
114
|
+
/**
|
|
115
|
+
* True when `error` is a value luqum cannot convert. Zenodo answers that with HTTP
|
|
116
|
+
* 500 rather than its plain-text fallback, so it fails with or without filters.
|
|
117
|
+
*/
|
|
118
|
+
export const isConversionError = (error) => CONVERSIONS.has(error.problem);
|
|
119
|
+
/** Characters (besides whitespace) that cannot start a term. */
|
|
120
|
+
const TERM_START_EXCLUDED = ':^~(){}[]/"\'+-\\<>';
|
|
121
|
+
/** Characters (besides whitespace) that end a term. */
|
|
122
|
+
const TERM_CONTINUE_EXCLUDED = ':^\\~(){}[]';
|
|
123
|
+
const KEYWORDS = new Map([
|
|
124
|
+
['AND', 'AND'],
|
|
125
|
+
['OR', 'OR'],
|
|
126
|
+
['NOT', 'NOT'],
|
|
127
|
+
['TO', 'TO'],
|
|
128
|
+
]);
|
|
129
|
+
const SINGLE_CHAR = new Map([
|
|
130
|
+
['+', 'PLUS'],
|
|
131
|
+
['-', 'MINUS'],
|
|
132
|
+
[':', 'COLUMN'],
|
|
133
|
+
['(', 'LPAREN'],
|
|
134
|
+
[')', 'RPAREN'],
|
|
135
|
+
['[', 'LBRACKET'],
|
|
136
|
+
['{', 'LBRACKET'],
|
|
137
|
+
[']', 'RBRACKET'],
|
|
138
|
+
['}', 'RBRACKET'],
|
|
139
|
+
]);
|
|
140
|
+
/** Kinds that can open a unary expression. */
|
|
141
|
+
const UNARY_START = new Set([
|
|
142
|
+
'PLUS',
|
|
143
|
+
'MINUS',
|
|
144
|
+
'NOT',
|
|
145
|
+
'LPAREN',
|
|
146
|
+
'LBRACKET',
|
|
147
|
+
'CMP',
|
|
148
|
+
'TERM',
|
|
149
|
+
'PHRASE',
|
|
150
|
+
'REGEX',
|
|
151
|
+
'TO',
|
|
152
|
+
]);
|
|
153
|
+
/**
|
|
154
|
+
* A time part inside a term (`2020-01-01T12:30:00`): a `:` right after `T` and two
|
|
155
|
+
* digits, then two digits and an optional `:` with two more. Run sticky on a short
|
|
156
|
+
* window around the `:` ({@link timePartEnd}), never on the whole query.
|
|
157
|
+
*/
|
|
158
|
+
const TIME_PART = /(?<=T\p{Nd}{2}):\p{Nd}{2}(?::\p{Nd}{2})?/uy;
|
|
159
|
+
/**
|
|
160
|
+
* End of the time part whose `:` is at `j`, or -1. The window holds the five code
|
|
161
|
+
* units the lookbehind can need (`T` and two astral digits) and the ten the match
|
|
162
|
+
* can span.
|
|
163
|
+
*/
|
|
164
|
+
function timePartEnd(q, j) {
|
|
165
|
+
const start = Math.max(0, j - 5);
|
|
166
|
+
TIME_PART.lastIndex = j - start;
|
|
167
|
+
return TIME_PART.test(q.slice(start, j + 11)) ? start + TIME_PART.lastIndex : -1;
|
|
168
|
+
}
|
|
169
|
+
/** Python's `str.isspace()`, which is what Zenodo's parser skips between tokens. */
|
|
170
|
+
function isSpace(code) {
|
|
171
|
+
return ((code >= 0x09 && code <= 0x0d) ||
|
|
172
|
+
(code >= 0x1c && code <= 0x20) ||
|
|
173
|
+
code === 0x85 ||
|
|
174
|
+
code === 0xa0 ||
|
|
175
|
+
code === 0x1680 ||
|
|
176
|
+
(code >= 0x2000 && code <= 0x200a) ||
|
|
177
|
+
code === 0x2028 ||
|
|
178
|
+
code === 0x2029 ||
|
|
179
|
+
code === 0x202f ||
|
|
180
|
+
code === 0x205f ||
|
|
181
|
+
code === 0x3000);
|
|
182
|
+
}
|
|
183
|
+
/** True when a `\` at `i` escapes the next character (anything but a line feed). */
|
|
184
|
+
const escapes = (q, i) => i + 1 < q.length && q[i + 1] !== '\n';
|
|
185
|
+
/** The `"…"` or `/…/` opened at `i`, or why it never closes. */
|
|
186
|
+
function closeDelimited(q, i, delim) {
|
|
187
|
+
for (let j = i + 1; j < q.length; j++) {
|
|
188
|
+
if (q[j] === delim)
|
|
189
|
+
return { kind: delim === '"' ? 'PHRASE' : 'REGEX', start: i, end: j + 1 };
|
|
190
|
+
if (q[j] !== '\\' || j + 1 >= q.length)
|
|
191
|
+
continue;
|
|
192
|
+
if (q[j + 1] === '\n')
|
|
193
|
+
return { kind: 'ILLEGAL', problem: 'escape', start: j, end: j + 1 };
|
|
194
|
+
j++;
|
|
195
|
+
}
|
|
196
|
+
return { kind: 'ILLEGAL', problem: delim === '"' ? 'phrase' : 'regex', start: i, end: q.length };
|
|
197
|
+
}
|
|
198
|
+
/** End of the run of digits and dots starting at `i`. */
|
|
199
|
+
function numberEnd(q, i) {
|
|
200
|
+
let j = i;
|
|
201
|
+
for (let c = q.charCodeAt(j); c === 0x2e || (c >= 0x30 && c <= 0x39); c = q.charCodeAt(j))
|
|
202
|
+
j++;
|
|
203
|
+
return j;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* True when luqum converts the digits and dots after the `^` or `~` of `tok`. A
|
|
207
|
+
* boost (`^2`) or a term's fuzziness (`~0.5`) becomes a `Decimal`, so it takes one
|
|
208
|
+
* decimal number: at least one digit and at most one dot (`^.5`, `^1.`). A
|
|
209
|
+
* phrase's proximity (`"x y"~2`) becomes an `int`, so it takes digits alone. A bare
|
|
210
|
+
* `^` or `~` takes luqum's default.
|
|
211
|
+
*/
|
|
212
|
+
function converts(q, tok, whole) {
|
|
213
|
+
let dots = 0;
|
|
214
|
+
for (let i = tok.start + 1; i < tok.end; i++)
|
|
215
|
+
if (q.charCodeAt(i) === 0x2e)
|
|
216
|
+
dots++;
|
|
217
|
+
const digits = tok.end - tok.start - 1 - dots;
|
|
218
|
+
return digits + dots === 0 || (digits > 0 && dots <= (whole ? 0 : 1));
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Tokens after a `^` or `~` value on which luqum stops before converting it: its
|
|
222
|
+
* lexer fails first, or its parser rejects the token without reducing the value.
|
|
223
|
+
*/
|
|
224
|
+
const CONVERSION_STOPS = new Set(['ILLEGAL', 'COLUMN', 'RBRACKET', 'APPROX']);
|
|
225
|
+
/** End of the term starting at `i` (its first character already accepted). */
|
|
226
|
+
function termEnd(q, i) {
|
|
227
|
+
let j = q[i] === '\\' ? i + 2 : i + 1;
|
|
228
|
+
while (j < q.length) {
|
|
229
|
+
const ch = q[j];
|
|
230
|
+
if (ch === '\\') {
|
|
231
|
+
if (!escapes(q, j))
|
|
232
|
+
break;
|
|
233
|
+
j += 2;
|
|
234
|
+
}
|
|
235
|
+
else if (ch === ':') {
|
|
236
|
+
const end = timePartEnd(q, j);
|
|
237
|
+
if (end < 0)
|
|
238
|
+
break;
|
|
239
|
+
j = end;
|
|
240
|
+
}
|
|
241
|
+
else if (isSpace(q.charCodeAt(j)) || TERM_CONTINUE_EXCLUDED.includes(ch)) {
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
j++;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return j;
|
|
249
|
+
}
|
|
250
|
+
/** The token at or after `from`, whitespace skipped. Mirrors luqum 1.0.0's lexer rules in their order. */
|
|
251
|
+
function nextToken(q, from) {
|
|
252
|
+
let i = from;
|
|
253
|
+
while (i < q.length && isSpace(q.charCodeAt(i)))
|
|
254
|
+
i++;
|
|
255
|
+
if (i >= q.length)
|
|
256
|
+
return { kind: 'EOF', start: q.length, end: q.length };
|
|
257
|
+
const ch = q[i];
|
|
258
|
+
if (ch === '\\' ? escapes(q, i) : !TERM_START_EXCLUDED.includes(ch)) {
|
|
259
|
+
const end = termEnd(q, i);
|
|
260
|
+
return { kind: (end - i <= 3 && KEYWORDS.get(q.slice(i, end))) || 'TERM', start: i, end };
|
|
261
|
+
}
|
|
262
|
+
const single = SINGLE_CHAR.get(ch);
|
|
263
|
+
if (single)
|
|
264
|
+
return { kind: single, start: i, end: i + 1 };
|
|
265
|
+
switch (ch) {
|
|
266
|
+
case '<':
|
|
267
|
+
case '>':
|
|
268
|
+
return { kind: 'CMP', start: i, end: q[i + 1] === '=' ? i + 2 : i + 1 };
|
|
269
|
+
case '"':
|
|
270
|
+
case '/':
|
|
271
|
+
return closeDelimited(q, i, ch);
|
|
272
|
+
case '~':
|
|
273
|
+
return { kind: 'APPROX', start: i, end: numberEnd(q, i + 1) };
|
|
274
|
+
case '^':
|
|
275
|
+
return { kind: 'BOOST', start: i, end: numberEnd(q, i + 1) };
|
|
276
|
+
case "'":
|
|
277
|
+
return { kind: 'ILLEGAL', problem: 'quote', start: i, end: i + 1 };
|
|
278
|
+
default:
|
|
279
|
+
return { kind: 'ILLEGAL', problem: 'escape', start: i, end: i + 1 };
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Checks `query` against the grammar Zenodo parses `q` with (luqum 1.0.0, whose
|
|
284
|
+
* failures Zenodo answers by matching the whole `q` as plain text), returning the
|
|
285
|
+
* first problem in reading order, or `undefined` when it parses:
|
|
286
|
+
*
|
|
287
|
+
* ```text
|
|
288
|
+
* query := expr EOF
|
|
289
|
+
* expr := seq ((AND | OR) seq)*
|
|
290
|
+
* seq := unary+
|
|
291
|
+
* unary := (+ | - | NOT) unary | atom BOOST*
|
|
292
|
+
* atom := ( expr ) | [ bound TO bound ] | (< | <= | > | >=) (TERM | PHRASE)
|
|
293
|
+
* | TERM : unary | TERM APPROX? | PHRASE APPROX? | REGEX | TO
|
|
294
|
+
* bound := -? (TERM | PHRASE)
|
|
295
|
+
* ```
|
|
296
|
+
*
|
|
297
|
+
* One forward pass with no recursion: prefixes and `field:` chains are tail
|
|
298
|
+
* positions, and the only nesting, `( expr )`, needs nothing but a depth count, so
|
|
299
|
+
* any depth the parser accepts is accepted here too.
|
|
300
|
+
*
|
|
301
|
+
* A boost, fuzziness, or proximity value is converted when luqum reduces it, which
|
|
302
|
+
* it does on reading the next token unless that token stops it
|
|
303
|
+
* ({@link CONVERSION_STOPS}); a value it cannot convert is reported there, as
|
|
304
|
+
* `boost`, `fuzzy`, or `proximity`.
|
|
305
|
+
*/
|
|
306
|
+
export function querySyntaxError(query) {
|
|
307
|
+
let tok = nextToken(query, 0);
|
|
308
|
+
const next = () => nextToken(query, tok.end);
|
|
309
|
+
const fail = () => {
|
|
310
|
+
if (tok.kind === 'ILLEGAL') {
|
|
311
|
+
return { problem: tok.problem, index: tok.start, token: query.slice(tok.start, tok.end) };
|
|
312
|
+
}
|
|
313
|
+
if (tok.kind === 'EOF')
|
|
314
|
+
return { problem: 'end', index: query.length, token: '' };
|
|
315
|
+
return { problem: 'unexpected', index: tok.start, token: query.slice(tok.start, tok.end) };
|
|
316
|
+
};
|
|
317
|
+
/** Steps past the `^` or `~` value at `tok`; its conversion failure, when luqum gets that far. */
|
|
318
|
+
const convert = (problem) => {
|
|
319
|
+
const value = tok;
|
|
320
|
+
tok = next();
|
|
321
|
+
return CONVERSION_STOPS.has(tok.kind) || converts(query, value, problem === 'proximity')
|
|
322
|
+
? undefined
|
|
323
|
+
: { problem, index: value.start, token: query.slice(value.start, value.end) };
|
|
324
|
+
};
|
|
325
|
+
/** `-? (TERM | PHRASE)`, a range bound; false (nothing consumed past a `-`) when absent. */
|
|
326
|
+
const bound = () => {
|
|
327
|
+
if (tok.kind === 'MINUS')
|
|
328
|
+
tok = next();
|
|
329
|
+
if (tok.kind !== 'TERM' && tok.kind !== 'PHRASE')
|
|
330
|
+
return false;
|
|
331
|
+
tok = next();
|
|
332
|
+
return true;
|
|
333
|
+
};
|
|
334
|
+
let depth = 0;
|
|
335
|
+
for (;;) {
|
|
336
|
+
// One unary, through its prefixes and `field:` chain to the atom that ends it.
|
|
337
|
+
for (;;) {
|
|
338
|
+
if (tok.kind === 'PLUS' || tok.kind === 'MINUS' || tok.kind === 'NOT') {
|
|
339
|
+
tok = next();
|
|
340
|
+
}
|
|
341
|
+
else if (tok.kind === 'LPAREN') {
|
|
342
|
+
depth++;
|
|
343
|
+
tok = next();
|
|
344
|
+
}
|
|
345
|
+
else if (tok.kind === 'TERM') {
|
|
346
|
+
tok = next();
|
|
347
|
+
if (tok.kind !== 'COLUMN') {
|
|
348
|
+
const failed = tok.kind === 'APPROX' ? convert('fuzzy') : undefined;
|
|
349
|
+
if (failed)
|
|
350
|
+
return failed;
|
|
351
|
+
break;
|
|
352
|
+
}
|
|
353
|
+
tok = next();
|
|
354
|
+
}
|
|
355
|
+
else if (tok.kind === 'PHRASE') {
|
|
356
|
+
tok = next();
|
|
357
|
+
const failed = tok.kind === 'APPROX' ? convert('proximity') : undefined;
|
|
358
|
+
if (failed)
|
|
359
|
+
return failed;
|
|
360
|
+
break;
|
|
361
|
+
}
|
|
362
|
+
else if (tok.kind === 'REGEX' || tok.kind === 'TO') {
|
|
363
|
+
tok = next();
|
|
364
|
+
break;
|
|
365
|
+
}
|
|
366
|
+
else if (tok.kind === 'CMP') {
|
|
367
|
+
tok = next();
|
|
368
|
+
if (tok.kind !== 'TERM' && tok.kind !== 'PHRASE')
|
|
369
|
+
return fail();
|
|
370
|
+
tok = next();
|
|
371
|
+
break;
|
|
372
|
+
}
|
|
373
|
+
else if (tok.kind === 'LBRACKET') {
|
|
374
|
+
tok = next();
|
|
375
|
+
if (!bound() || tok.kind !== 'TO')
|
|
376
|
+
return fail();
|
|
377
|
+
tok = next();
|
|
378
|
+
if (!bound() || tok.kind !== 'RBRACKET')
|
|
379
|
+
return fail();
|
|
380
|
+
tok = next();
|
|
381
|
+
break;
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
return fail();
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
// After an atom: its boosts, then each `)` that closes a group (boosts apply to it too).
|
|
388
|
+
for (;;) {
|
|
389
|
+
while (tok.kind === 'BOOST') {
|
|
390
|
+
const failed = convert('boost');
|
|
391
|
+
if (failed)
|
|
392
|
+
return failed;
|
|
393
|
+
}
|
|
394
|
+
if (tok.kind !== 'RPAREN' || depth === 0)
|
|
395
|
+
break;
|
|
396
|
+
depth--;
|
|
397
|
+
tok = next();
|
|
398
|
+
}
|
|
399
|
+
if (tok.kind === 'AND' || tok.kind === 'OR') {
|
|
400
|
+
tok = next();
|
|
401
|
+
}
|
|
402
|
+
else if (tok.kind === 'EOF' && depth === 0) {
|
|
403
|
+
return undefined;
|
|
404
|
+
}
|
|
405
|
+
else if (!UNARY_START.has(tok.kind)) {
|
|
406
|
+
return fail();
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
95
410
|
/** One clause, or several OR-ed inside parentheses. */
|
|
96
411
|
function anyOf(clauses) {
|
|
97
412
|
return clauses.length === 1 ? clauses[0] : `(${clauses.join(' OR ')})`;
|
|
@@ -137,7 +452,7 @@ export function buildSearch(filters) {
|
|
|
137
452
|
if (filters.publishedFrom || filters.publishedTo) {
|
|
138
453
|
clauses.push(`metadata.publication_date:[${filters.publishedFrom ?? '*'} TO ${filters.publishedTo ?? '*'}]`);
|
|
139
454
|
}
|
|
140
|
-
const query = clauses.length > 0
|
|
455
|
+
const query = queryAsSent(filters.query, clauses.length > 0);
|
|
141
456
|
if (query)
|
|
142
457
|
clauses.unshift(clauses.length > 0 ? `(${query})` : query);
|
|
143
458
|
const q = clauses.length > 0 ? clauses.join(' AND ') : undefined;
|
|
@@ -161,25 +476,173 @@ export function escapeVocabularyQuery(query) {
|
|
|
161
476
|
return query.replace(/[\\/:[\]{}()^~!?]/g, '\\$&');
|
|
162
477
|
}
|
|
163
478
|
/**
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
479
|
+
* Offset of the `"` in the regex body `q[from, to)` that opens a quoted string the
|
|
480
|
+
* body never closes, or -1. Zenodo's search engine compiles a regex body where `\`
|
|
481
|
+
* escapes the next character, `"…"` is a literal string with no escapes inside,
|
|
482
|
+
* and a `"` within a `[…]` character class is literal.
|
|
483
|
+
*/
|
|
484
|
+
function unclosedRegexQuote(q, from, to) {
|
|
485
|
+
for (let i = from; i < to; i++) {
|
|
486
|
+
const ch = q[i];
|
|
487
|
+
if (ch === '\\') {
|
|
488
|
+
i++;
|
|
489
|
+
}
|
|
490
|
+
else if (ch === '"') {
|
|
491
|
+
const close = q.indexOf('"', i + 1);
|
|
492
|
+
if (close === -1 || close >= to)
|
|
493
|
+
return i;
|
|
494
|
+
i = close;
|
|
495
|
+
}
|
|
496
|
+
else if (ch === '[') {
|
|
497
|
+
// A class's first member is literal even when it is `]`.
|
|
498
|
+
let j = q[i + 1] === '^' ? i + 2 : i + 1;
|
|
499
|
+
j += q[j] === '\\' ? 2 : 1;
|
|
500
|
+
while (j < to && q[j] !== ']')
|
|
501
|
+
j += q[j] === '\\' ? 2 : 1;
|
|
502
|
+
i = j;
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
return -1;
|
|
506
|
+
}
|
|
507
|
+
/** What Zenodo's search engine skips between the tokens of a range. */
|
|
508
|
+
const isEngineSpace = (ch) => ch === ' ' || ch === '\t' || ch === '\n' || ch === '\r' || ch === ' ';
|
|
509
|
+
/** True when `q[from, to)` ends in an odd run of `\`. */
|
|
510
|
+
function endsInEscape(q, from, to) {
|
|
511
|
+
let j = to;
|
|
512
|
+
while (j > from && q[j - 1] === '\\')
|
|
513
|
+
j--;
|
|
514
|
+
return (to - j) % 2 === 1;
|
|
515
|
+
}
|
|
516
|
+
/**
|
|
517
|
+
* The range opened by the `[` or `{` at `i`, as Zenodo's search engine lexes it. A
|
|
518
|
+
* bound runs to the next space, `]`, or `}`, and a `"` opens a quoted bound only at a
|
|
519
|
+
* bound's start, when that is the longer token; a `"`, `/`, bracket, or `\` inside a
|
|
520
|
+
* bound is literal (`[a"b TO c/d]` runs), so a bound luqum reads past an escaped
|
|
521
|
+
* space, `]`, or `}` ends there, in a `\` the engine cannot unescape
|
|
522
|
+
* (`[a TO b\]]` → 500).
|
|
523
|
+
*/
|
|
524
|
+
function rangeSpan(q, i) {
|
|
525
|
+
let escaped;
|
|
526
|
+
let j = i + 1;
|
|
527
|
+
for (;;) {
|
|
528
|
+
while (j < q.length && isEngineSpace(q[j]))
|
|
529
|
+
j++;
|
|
530
|
+
if (j >= q.length)
|
|
531
|
+
return { end: -1, escaped };
|
|
532
|
+
if (q[j] === ']' || q[j] === '}')
|
|
533
|
+
return { end: j + 1, escaped };
|
|
534
|
+
let end = j + 1;
|
|
535
|
+
while (end < q.length && q[end] !== ' ' && q[end] !== ']' && q[end] !== '}')
|
|
536
|
+
end++;
|
|
537
|
+
const quoted = q[j] === '"' ? closeDelimited(q, j, '"') : undefined;
|
|
538
|
+
if (quoted?.kind === 'PHRASE' && quoted.end >= end)
|
|
539
|
+
end = quoted.end;
|
|
540
|
+
else if (!escaped && endsInEscape(q, j, end))
|
|
541
|
+
escaped = [j, end];
|
|
542
|
+
j = end;
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* True when the `"` or `/` at `i` is a character of a range bound, inside the range
|
|
547
|
+
* ending at `stop`: a `/` always, a `"` unless its phrase closes inside the range.
|
|
167
548
|
*/
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
549
|
+
function boundCharacter(q, i, stop) {
|
|
550
|
+
if (i >= stop)
|
|
551
|
+
return false;
|
|
552
|
+
if (q[i] === '/')
|
|
553
|
+
return true;
|
|
554
|
+
const phrase = closeDelimited(q, i, '"');
|
|
555
|
+
return phrase.kind !== 'PHRASE' || phrase.end > stop;
|
|
556
|
+
}
|
|
557
|
+
/** True when only engine whitespace stands between `i` and the query's end or a `)`. */
|
|
558
|
+
function nothingFollows(q, i) {
|
|
559
|
+
let j = i;
|
|
560
|
+
while (j < q.length && isEngineSpace(q[j]))
|
|
561
|
+
j++;
|
|
562
|
+
return j >= q.length || q[j] === ')';
|
|
563
|
+
}
|
|
564
|
+
/** True when luqum's lexer, reading `q` from the start, meets a phrase at `at` it never closes. */
|
|
565
|
+
function luqumLeavesPhraseOpenAt(q, at) {
|
|
566
|
+
let tok = nextToken(q, 0);
|
|
567
|
+
while (tok.start < at && tok.kind !== 'EOF')
|
|
568
|
+
tok = nextToken(q, tok.end);
|
|
569
|
+
return tok.start === at && tok.kind === 'ILLEGAL' && tok.problem === 'phrase';
|
|
570
|
+
}
|
|
571
|
+
/**
|
|
572
|
+
* The first query part Zenodo's search engine cannot run, read as that engine lexes
|
|
573
|
+
* `q` once luqum has parsed it. The engine opens a phrase at every unescaped `"` and a
|
|
574
|
+
* regex at every unescaped `/` outside a phrase, regex, or range, inside a word too,
|
|
575
|
+
* where luqum reads either as part of the word; phrases and regexes are delimited as
|
|
576
|
+
* luqum lexes them ({@link closeDelimited}). It reports:
|
|
577
|
+
*
|
|
578
|
+
* - `regex`: a regex never closed (`climate 10.5281/zenodo.591564`, HTTP 500);
|
|
579
|
+
* - `regex_quote`: a regex whose body opens a quoted string it never closes (`/a"/ b`, HTTP 400);
|
|
580
|
+
* - `word_quote`: a phrase never closed that luqum does not leave open itself
|
|
581
|
+
* (`climate a"b`, HTTP 500; `climate "model` is luqum's own and passes);
|
|
582
|
+
* - `word_span`: when luqum parses the query but the engine's phrases and regexes
|
|
583
|
+
* leave a `(`, `)`, `[`, `]`, `{`, or `}` unmatched, the first of them luqum does not
|
|
584
|
+
* read (`(a"b) c"`, HTTP 500);
|
|
585
|
+
* - `range_escape`: a range bound ending in an unpaired `\`, which the engine cannot
|
|
586
|
+
* unescape ({@link rangeSpan}; `[a TO b\]]`, `[a\ b TO c]`, HTTP 500);
|
|
587
|
+
* - `dangling_not`: a `!`, which the engine reads as NOT inside a word too, with
|
|
588
|
+
* nothing after it but a `)` or the end (`climate!`, `(climate!) model`, HTTP 500).
|
|
589
|
+
*/
|
|
590
|
+
export function engineSyntaxError(query) {
|
|
591
|
+
const spans = [];
|
|
592
|
+
let depth = 0;
|
|
593
|
+
let unmatched = false;
|
|
171
594
|
for (let i = 0; i < query.length; i++) {
|
|
172
595
|
const ch = query[i];
|
|
173
596
|
if (ch === '\\') {
|
|
174
597
|
i++;
|
|
175
|
-
continue;
|
|
176
598
|
}
|
|
177
|
-
if (ch === '
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
599
|
+
else if (ch === '[' || ch === '{') {
|
|
600
|
+
const { end, escaped } = rangeSpan(query, i);
|
|
601
|
+
if (end < 0) {
|
|
602
|
+
unmatched = true;
|
|
603
|
+
break;
|
|
604
|
+
}
|
|
605
|
+
if (escaped)
|
|
606
|
+
return { problem: 'range_escape', index: escaped[0], token: query.slice(...escaped) };
|
|
607
|
+
i = end - 1;
|
|
608
|
+
}
|
|
609
|
+
else if (ch === '(') {
|
|
610
|
+
depth++;
|
|
611
|
+
}
|
|
612
|
+
else if (ch === ')' && depth > 0) {
|
|
613
|
+
depth--;
|
|
614
|
+
}
|
|
615
|
+
else if (ch === ')' || ch === ']' || ch === '}') {
|
|
616
|
+
unmatched = true;
|
|
617
|
+
}
|
|
618
|
+
else if (ch === '!' && nothingFollows(query, i + 1)) {
|
|
619
|
+
return { problem: 'dangling_not', index: i, token: '!' };
|
|
620
|
+
}
|
|
621
|
+
else if (ch === '"' || ch === '/') {
|
|
622
|
+
const span = closeDelimited(query, i, ch);
|
|
623
|
+
if (span.kind === 'ILLEGAL') {
|
|
624
|
+
if (span.problem === 'regex')
|
|
625
|
+
return { problem: 'regex', index: i, token: query.slice(i) };
|
|
626
|
+
return span.problem === 'phrase' && !luqumLeavesPhraseOpenAt(query, i)
|
|
627
|
+
? { problem: 'word_quote', index: i, token: query.slice(i) }
|
|
628
|
+
: undefined;
|
|
629
|
+
}
|
|
630
|
+
if (ch === '/' && unclosedRegexQuote(query, i + 1, span.end - 1) !== -1) {
|
|
631
|
+
return { problem: 'regex_quote', index: i, token: query.slice(i, span.end) };
|
|
632
|
+
}
|
|
633
|
+
spans.push([i, span.end]);
|
|
634
|
+
i = span.end - 1;
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
if ((!unmatched && depth === 0) || querySyntaxError(query))
|
|
638
|
+
return undefined;
|
|
639
|
+
const luqumStarts = new Set();
|
|
640
|
+
for (let tok = nextToken(query, 0); tok.kind !== 'EOF'; tok = nextToken(query, tok.end)) {
|
|
641
|
+
if (tok.kind === 'PHRASE' || tok.kind === 'REGEX')
|
|
642
|
+
luqumStarts.add(tok.start);
|
|
181
643
|
}
|
|
182
|
-
|
|
644
|
+
const moved = spans.find(([start]) => !luqumStarts.has(start));
|
|
645
|
+
return moved && { problem: 'word_span', index: moved[0], token: query.slice(...moved) };
|
|
183
646
|
}
|
|
184
647
|
const PARTIAL_DATE = /^(\d{4})(?:-(0[1-9]|1[0-2])(?:-(0[1-9]|[12]\d|3[01]))?)?$/;
|
|
185
648
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../../src/services/zenodo/query-builder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../../src/services/zenodo/query-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,7 +31,7 @@ export declare function previewMode(key: string, mimetype: string | undefined):
|
|
|
31
31
|
export declare function looksLikeText(bytes: Uint8Array, atStart: boolean): boolean;
|
|
32
32
|
/** True when the key names a ZIP archive by extension or mimetype. */
|
|
33
33
|
export declare function isZip(key: string, mimetype: string | undefined): boolean;
|
|
34
|
-
/** Code-fence language hint for a file key; `''`
|
|
34
|
+
/** Code-fence language hint for a file key; `''` for any extension the table does not list. */
|
|
35
35
|
export declare function languageHint(key: string): string;
|
|
36
36
|
/** Result of cutting a byte window into previewable text. */
|
|
37
37
|
export interface PreviewCut {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-preview.d.ts","sourceRoot":"","sources":["../../../src/services/zenodo/text-preview.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqBH,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/C;AAOD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAOhF;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtD,uDAAuD;AACvD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAMlF;AAKD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAY1E;AAED,sEAAsE;AACtE,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAExE;AAuCD
|
|
1
|
+
{"version":3,"file":"text-preview.d.ts","sourceRoot":"","sources":["../../../src/services/zenodo/text-preview.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqBH,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/C;AAOD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAOhF;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtD,uDAAuD;AACvD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAMlF;AAKD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAY1E;AAED,sEAAsE;AACtE,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAExE;AAuCD,+FAA+F;AAC/F,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,6DAA6D;AAC7D,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,MAAM,EAAE,OAAO,CAAC;IAChB,oFAAoF;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAeD;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,GAClD,UAAU,CAaZ"}
|