arxiv-api-wrapper 1.1.0 → 2.0.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 +318 -250
- package/package.json +6 -4
- package/src/arxivAPIRead.ts +316 -316
- package/src/atom.ts +1 -1
- package/src/index.ts +102 -57
- package/src/oaiClient.ts +425 -0
- package/src/oaiParser.ts +264 -0
- package/src/oaiToArxiv.ts +204 -0
- package/src/oaiTypes.ts +248 -0
- package/src/types.ts +265 -265
- package/tests/arxivAPI.integration.test.ts +144 -144
- package/tests/arxivAPIRead.test.ts +1 -1
- package/tests/fixtures/parseEntries/2507.17541.json.ts +1 -1
- package/tests/fixtures/parseEntries/search_agdur.json.ts +1 -1
- package/tests/oai.integration.test.ts +222 -0
- package/tests/oai.test.ts +248 -0
- package/tests/oaiToArxiv.test.ts +131 -0
- package/tsconfig.json +13 -0
package/README.md
CHANGED
|
@@ -1,250 +1,318 @@
|
|
|
1
|
-
# arxiv-api-wrapper
|
|
2
|
-
|
|
3
|
-
A TypeScript package that provides a convenient wrapper around the arXiv API, enabling easy querying and parsing of arXiv papers.
|
|
4
|
-
|
|
5
|
-
## Installation
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm install arxiv-api-wrapper
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## Quick Start
|
|
12
|
-
|
|
13
|
-
```typescript
|
|
14
|
-
import { getArxivEntries, getArxivEntriesById } from 'arxiv-api-wrapper';
|
|
15
|
-
|
|
16
|
-
// Search for papers
|
|
17
|
-
const result = await getArxivEntries({
|
|
18
|
-
search: {
|
|
19
|
-
title: ['quantum computing'],
|
|
20
|
-
author: ['John Doe'],
|
|
21
|
-
},
|
|
22
|
-
maxResults: 10,
|
|
23
|
-
sortBy: 'submittedDate',
|
|
24
|
-
sortOrder: 'descending',
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
console.log(`Found ${result.feed.totalResults} papers`);
|
|
28
|
-
result.entries.forEach(entry => {
|
|
29
|
-
console.log(`${entry.arxivId}: ${entry.title}`);
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
// Or fetch specific papers by ID
|
|
33
|
-
const papers = await getArxivEntriesById(['2101.01234', '2101.05678']);
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## Features
|
|
37
|
-
|
|
38
|
-
- **Type-safe**: Full TypeScript support with comprehensive type definitions
|
|
39
|
-
- **Flexible Search**: Support for complex queries with multiple filters, OR groups, and negation
|
|
40
|
-
- **Rate Limiting**: Built-in token bucket rate limiter to respect arXiv API guidelines
|
|
41
|
-
- **Retry Logic**: Automatic retries with exponential backoff for transient failures
|
|
42
|
-
- **Pagination**: Support for paginated results with configurable page size
|
|
43
|
-
- **Sorting**: Multiple sort options (relevance, submission date, last updated)
|
|
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
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
{
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
##
|
|
249
|
-
|
|
250
|
-
|
|
1
|
+
# arxiv-api-wrapper
|
|
2
|
+
|
|
3
|
+
A TypeScript package that provides a convenient wrapper around the arXiv API, enabling easy querying and parsing of arXiv papers.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install arxiv-api-wrapper
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { getArxivEntries, getArxivEntriesById } from 'arxiv-api-wrapper';
|
|
15
|
+
|
|
16
|
+
// Search for papers
|
|
17
|
+
const result = await getArxivEntries({
|
|
18
|
+
search: {
|
|
19
|
+
title: ['quantum computing'],
|
|
20
|
+
author: ['John Doe'],
|
|
21
|
+
},
|
|
22
|
+
maxResults: 10,
|
|
23
|
+
sortBy: 'submittedDate',
|
|
24
|
+
sortOrder: 'descending',
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
console.log(`Found ${result.feed.totalResults} papers`);
|
|
28
|
+
result.entries.forEach(entry => {
|
|
29
|
+
console.log(`${entry.arxivId}: ${entry.title}`);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
// Or fetch specific papers by ID
|
|
33
|
+
const papers = await getArxivEntriesById(['2101.01234', '2101.05678']);
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Features
|
|
37
|
+
|
|
38
|
+
- **Type-safe**: Full TypeScript support with comprehensive type definitions
|
|
39
|
+
- **Flexible Search**: Support for complex queries with multiple filters, OR groups, and negation
|
|
40
|
+
- **Rate Limiting**: Built-in token bucket rate limiter to respect arXiv API guidelines
|
|
41
|
+
- **Retry Logic**: Automatic retries with exponential backoff for transient failures
|
|
42
|
+
- **Pagination**: Support for paginated results with configurable page size
|
|
43
|
+
- **Sorting**: Multiple sort options (relevance, submission date, last updated)
|
|
44
|
+
- **OAI-PMH**: Support for the [arXiv Open Archives Initiative](https://info.arxiv.org/help/oa/index.html#open-archives-initiative-oai) interface (Identify, ListSets, GetRecord, ListRecords, ListIdentifiers, ListMetadataFormats)
|
|
45
|
+
|
|
46
|
+
## OAI-PMH interface
|
|
47
|
+
|
|
48
|
+
The package also supports the arXiv OAI-PMH endpoint (`https://oaipmh.arxiv.org/oai`), which is useful for metadata harvesting and bulk access. See the [arXiv OAI help](https://info.arxiv.org/help/oa/index.html#open-archives-initiative-oai) and the [OAI-PMH v2.0 protocol](https://www.openarchives.org/OAI/openarchivesprotocol.html) for details.
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
import {
|
|
52
|
+
oaiIdentify,
|
|
53
|
+
oaiListRecords,
|
|
54
|
+
oaiListRecordsAsyncIterator,
|
|
55
|
+
oaiGetRecord,
|
|
56
|
+
oaiListSets,
|
|
57
|
+
oaiListIdentifiers,
|
|
58
|
+
oaiListMetadataFormats,
|
|
59
|
+
} from 'arxiv-api-wrapper';
|
|
60
|
+
|
|
61
|
+
// Repository info
|
|
62
|
+
const identify = await oaiIdentify();
|
|
63
|
+
console.log(identify.repositoryName, identify.protocolVersion);
|
|
64
|
+
|
|
65
|
+
// One page of records (e.g. Dublin Core)
|
|
66
|
+
const result = await oaiListRecords('oai_dc', {
|
|
67
|
+
from: '2024-01-01',
|
|
68
|
+
until: '2024-01-31',
|
|
69
|
+
set: 'math:math:LO', // optional: restrict to a set
|
|
70
|
+
rateLimit: { tokensPerInterval: 1, intervalMs: 1000 },
|
|
71
|
+
});
|
|
72
|
+
result.records.forEach((rec) => {
|
|
73
|
+
console.log(rec.header.identifier, rec.metadata);
|
|
74
|
+
});
|
|
75
|
+
if (result.resumptionToken) {
|
|
76
|
+
// Fetch next page with result.resumptionToken.value
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Single record by identifier (full or short form)
|
|
80
|
+
const record = await oaiGetRecord('cs/0112017', 'oai_dc');
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
For an intermediate option between manual page-by-page pagination and `*All` helpers, use async iterators:
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
for await (const rec of oaiListRecordsAsyncIterator('oai_dc', {
|
|
87
|
+
from: '2024-01-01',
|
|
88
|
+
until: '2024-01-02',
|
|
89
|
+
maxRecords: 50,
|
|
90
|
+
})) {
|
|
91
|
+
console.log(rec.header.identifier);
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The `oaiListRecordsAll` / `oaiListIdentifiersAll` / `oaiListSetsAll` helpers are convenience wrappers that collect from the corresponding async iterators.
|
|
96
|
+
|
|
97
|
+
All OAI functions accept optional `timeoutMs`, `retries`, `userAgent`, and `rateLimit` (same as the Atom API). OAI errors (e.g. `idDoesNotExist`, `noRecordsMatch`) are thrown as `OaiError` with a `code` and `messageText`.
|
|
98
|
+
|
|
99
|
+
## API Reference
|
|
100
|
+
|
|
101
|
+
For complete API documentation with detailed type information and examples, see the [generated API documentation](https://vagdur.github.io/arxiv-api-wrapper/).
|
|
102
|
+
|
|
103
|
+
### `getArxivEntriesById(ids: string[], options?): Promise<ArxivQueryResult>`
|
|
104
|
+
|
|
105
|
+
Simpler function to fetch arXiv papers by their IDs using the id_list API mode.
|
|
106
|
+
|
|
107
|
+
**Parameters:**
|
|
108
|
+
- `ids: string[]` - Array of arXiv paper IDs (e.g., `['2101.01234', '2101.05678']`)
|
|
109
|
+
- `options?: object` - Optional request configuration
|
|
110
|
+
- `rateLimit?: { tokensPerInterval: number, intervalMs: number }` - Rate limit configuration
|
|
111
|
+
- `retries?: number` - Number of retry attempts (default: 3)
|
|
112
|
+
- `timeoutMs?: number` - Request timeout in milliseconds (default: 10000)
|
|
113
|
+
- `userAgent?: string` - Custom User-Agent header
|
|
114
|
+
|
|
115
|
+
**Returns:** Same as `getArxivEntries` - see return type below.
|
|
116
|
+
|
|
117
|
+
### `getArxivEntries(options: ArxivQueryOptions): Promise<ArxivQueryResult>`
|
|
118
|
+
|
|
119
|
+
Main function to query the arXiv API with search filters or ID lists.
|
|
120
|
+
|
|
121
|
+
**Options:**
|
|
122
|
+
- `idList?: string[]` - List of arXiv IDs to fetch (e.g., `['2101.01234', '2101.05678']`)
|
|
123
|
+
- `search?: ArxivSearchFilters` - Search filters (when used with `idList`, filters the entries from `idList` to only return those matching the search query)
|
|
124
|
+
- `start?: number` - Pagination offset (0-based)
|
|
125
|
+
- `maxResults?: number` - Maximum number of results (≤ 300)
|
|
126
|
+
- `sortBy?: 'relevance' | 'lastUpdatedDate' | 'submittedDate'` - Sort field
|
|
127
|
+
- `sortOrder?: 'ascending' | 'descending'` - Sort direction
|
|
128
|
+
- `timeoutMs?: number` - Request timeout in milliseconds (default: 10000)
|
|
129
|
+
- `retries?: number` - Number of retry attempts (default: 3)
|
|
130
|
+
- `rateLimit?: { tokensPerInterval: number, intervalMs: number }` - Rate limit configuration
|
|
131
|
+
- `userAgent?: string` - Custom User-Agent header
|
|
132
|
+
|
|
133
|
+
**Search Filters:**
|
|
134
|
+
- `title?: string[]` - Search in titles
|
|
135
|
+
- `author?: string[]` - Search by author names
|
|
136
|
+
- `abstract?: string[]` - Search in abstracts
|
|
137
|
+
- `category?: string[]` - Filter by arXiv categories
|
|
138
|
+
- `submittedDateRange?: { from: string, to: string }` - Date range filter (YYYYMMDDTTTT format)
|
|
139
|
+
- `or?: ArxivSearchFilters[]` - OR group of filters
|
|
140
|
+
- `andNot?: ArxivSearchFilters` - Negated filter (ANDNOT)
|
|
141
|
+
|
|
142
|
+
**Returns:**
|
|
143
|
+
```typescript
|
|
144
|
+
{
|
|
145
|
+
feed: {
|
|
146
|
+
id: string;
|
|
147
|
+
updated: string;
|
|
148
|
+
title: string;
|
|
149
|
+
link: string;
|
|
150
|
+
totalResults: number;
|
|
151
|
+
startIndex: number;
|
|
152
|
+
itemsPerPage: number;
|
|
153
|
+
};
|
|
154
|
+
entries: Array<{
|
|
155
|
+
id: string;
|
|
156
|
+
arxivId: string;
|
|
157
|
+
title: string;
|
|
158
|
+
summary: string;
|
|
159
|
+
published: string;
|
|
160
|
+
updated: string;
|
|
161
|
+
authors: Array<{ name: string; affiliation?: string }>;
|
|
162
|
+
categories: string[];
|
|
163
|
+
primaryCategory?: string;
|
|
164
|
+
links: Array<{ href: string; rel?: string; type?: string; title?: string }>;
|
|
165
|
+
doi?: string;
|
|
166
|
+
journalRef?: string;
|
|
167
|
+
comment?: string;
|
|
168
|
+
}>;
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Examples
|
|
173
|
+
|
|
174
|
+
### Search by title and author
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
const result = await getArxivEntries({
|
|
178
|
+
search: {
|
|
179
|
+
title: ['machine learning'],
|
|
180
|
+
author: ['Geoffrey Hinton'],
|
|
181
|
+
},
|
|
182
|
+
maxResults: 5,
|
|
183
|
+
});
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Fetch specific papers by ID
|
|
187
|
+
|
|
188
|
+
Using the simpler `getArxivEntriesById` function:
|
|
189
|
+
|
|
190
|
+
```typescript
|
|
191
|
+
const result = await getArxivEntriesById(['2101.01234', '2101.05678']);
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Or using `getArxivEntries`:
|
|
195
|
+
|
|
196
|
+
```typescript
|
|
197
|
+
const result = await getArxivEntries({
|
|
198
|
+
idList: ['2101.01234', '2101.05678'],
|
|
199
|
+
});
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Complex search with OR and date range
|
|
203
|
+
|
|
204
|
+
```typescript
|
|
205
|
+
const result = await getArxivEntries({
|
|
206
|
+
search: {
|
|
207
|
+
or: [
|
|
208
|
+
{ title: ['quantum'] },
|
|
209
|
+
{ abstract: ['quantum'] },
|
|
210
|
+
],
|
|
211
|
+
submittedDateRange: {
|
|
212
|
+
from: '202301010600',
|
|
213
|
+
to: '202401010600',
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
sortBy: 'submittedDate',
|
|
217
|
+
sortOrder: 'descending',
|
|
218
|
+
});
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Fetch papers by ID with rate limiting
|
|
222
|
+
|
|
223
|
+
```typescript
|
|
224
|
+
const result = await getArxivEntriesById(
|
|
225
|
+
['2101.01234', '2101.05678'],
|
|
226
|
+
{
|
|
227
|
+
rateLimit: {
|
|
228
|
+
tokensPerInterval: 1,
|
|
229
|
+
intervalMs: 3000, // 1 request per 3 seconds
|
|
230
|
+
},
|
|
231
|
+
timeoutMs: 15000,
|
|
232
|
+
}
|
|
233
|
+
);
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### Search with rate limiting
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
const result = await getArxivEntries({
|
|
240
|
+
search: { title: ['neural networks'] },
|
|
241
|
+
rateLimit: {
|
|
242
|
+
tokensPerInterval: 1,
|
|
243
|
+
intervalMs: 3000, // 1 request per 3 seconds
|
|
244
|
+
},
|
|
245
|
+
});
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
## Documentation
|
|
249
|
+
|
|
250
|
+
### Generating API Documentation
|
|
251
|
+
|
|
252
|
+
To generate browsable API documentation from the source code:
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
npm run docs:generate
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
This will create HTML documentation in the `docs/` directory. You can then view it locally:
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
npm run docs:serve
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
The generated documentation includes:
|
|
265
|
+
- Complete API reference for all exported functions and types
|
|
266
|
+
- Detailed parameter descriptions and examples
|
|
267
|
+
- Type information and relationships
|
|
268
|
+
- Search functionality
|
|
269
|
+
|
|
270
|
+
### IDE IntelliSense
|
|
271
|
+
|
|
272
|
+
All exported functions and types include JSDoc comments for enhanced IDE IntelliSense support. Hover over any exported symbol in your IDE to see inline documentation.
|
|
273
|
+
|
|
274
|
+
## TypeScript Types
|
|
275
|
+
|
|
276
|
+
All types are exported from the package:
|
|
277
|
+
|
|
278
|
+
```typescript
|
|
279
|
+
import type {
|
|
280
|
+
ArxivQueryOptions,
|
|
281
|
+
ArxivQueryResult,
|
|
282
|
+
ArxivSearchFilters,
|
|
283
|
+
ArxivEntry,
|
|
284
|
+
ArxivFeedMeta,
|
|
285
|
+
ArxivAuthor,
|
|
286
|
+
ArxivLink,
|
|
287
|
+
ArxivSortBy,
|
|
288
|
+
ArxivSortOrder,
|
|
289
|
+
ArxivRateLimitConfig,
|
|
290
|
+
ArxivDateRange,
|
|
291
|
+
// OAI-PMH types
|
|
292
|
+
OaiIdentifyResponse,
|
|
293
|
+
OaiRecord,
|
|
294
|
+
OaiHeader,
|
|
295
|
+
OaiSet,
|
|
296
|
+
OaiMetadataFormat,
|
|
297
|
+
OaiResumptionToken,
|
|
298
|
+
OaiListRecordsResult,
|
|
299
|
+
OaiListIdentifiersResult,
|
|
300
|
+
OaiListSetsResult,
|
|
301
|
+
OaiRequestOptions,
|
|
302
|
+
OaiListOptions,
|
|
303
|
+
OaiErrorCode,
|
|
304
|
+
OaiError
|
|
305
|
+
} from 'arxiv-api-wrapper';
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
## License
|
|
309
|
+
|
|
310
|
+
ISC
|
|
311
|
+
|
|
312
|
+
## Author
|
|
313
|
+
|
|
314
|
+
Vilhelm Agdur
|
|
315
|
+
|
|
316
|
+
## Repository
|
|
317
|
+
|
|
318
|
+
https://github.com/vagdur/arxiv-api-wrapper
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "arxiv-api-wrapper",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Provides functions wrapping the arXiv API",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"arxiv"
|
|
@@ -20,16 +20,18 @@
|
|
|
20
20
|
"types": "./src/index.ts",
|
|
21
21
|
"scripts": {
|
|
22
22
|
"test": "vitest run --config tests/vitest.config.mts",
|
|
23
|
+
"typecheck": "tsc --noEmit",
|
|
24
|
+
"check": "npm run typecheck && npm run test && npm audit",
|
|
23
25
|
"docs:generate": "typedoc",
|
|
24
26
|
"docs:serve": "npx serve docs"
|
|
25
27
|
},
|
|
26
28
|
"dependencies": {
|
|
27
|
-
"fast-xml-parser": "^
|
|
29
|
+
"fast-xml-parser": "^5.3.5"
|
|
28
30
|
},
|
|
29
31
|
"devDependencies": {
|
|
30
32
|
"@types/node": "^25.0.0",
|
|
31
|
-
"typedoc": "^0.
|
|
33
|
+
"typedoc": "^0.28.17",
|
|
32
34
|
"typescript": "^5.0.0",
|
|
33
|
-
"vitest": "^
|
|
35
|
+
"vitest": "^4.0.18"
|
|
34
36
|
}
|
|
35
37
|
}
|