musicbrainz-api 0.9.0 → 0.10.1
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/.idea/jpa-buddy.xml +6 -0
- package/README.md +11 -18
- package/lib/digest-auth.js +6 -6
- package/lib/musicbrainz-api.d.ts +43 -16
- package/lib/musicbrainz-api.js +25 -17
- package/lib/musicbrainz.types.d.ts +22 -21
- package/lib/rate-limiter.js +3 -3
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -94,13 +94,13 @@ Arguments:
|
|
|
94
94
|
* MBID [(MusicBrainz identifier)](https://wiki.musicbrainz.org/MusicBrainz_Identifier)
|
|
95
95
|
|
|
96
96
|
```js
|
|
97
|
-
const artist = await mbApi.lookupEntity('artist',
|
|
97
|
+
const artist = await mbApi.lookupEntity('artist', 'ab2528d9-719f-4261-8098-21849222a0f2');
|
|
98
98
|
```
|
|
99
99
|
|
|
100
100
|
### Lookup area
|
|
101
101
|
|
|
102
102
|
```js
|
|
103
|
-
const area = await mbApi.lookupArea(
|
|
103
|
+
const area = await mbApi.lookupArea('ab2528d9-719f-4261-8098-21849222a0f2');
|
|
104
104
|
```
|
|
105
105
|
|
|
106
106
|
### Lookup artist
|
|
@@ -108,7 +108,7 @@ const area = await mbApi.lookupArea({query: 'ab2528d9-719f-4261-8098-21849222a0f
|
|
|
108
108
|
Lookup an `artist` and include their `releases`, `release-groups` and `aliases`
|
|
109
109
|
|
|
110
110
|
```js
|
|
111
|
-
const artist = await mbApi.lookupArtist(
|
|
111
|
+
const artist = await mbApi.lookupArtist('ab2528d9-719f-4261-8098-21849222a0f2');
|
|
112
112
|
```
|
|
113
113
|
|
|
114
114
|
### Lookup instrument
|
|
@@ -116,7 +116,7 @@ const artist = await mbApi.lookupArtist({query: 'ab2528d9-719f-4261-8098-2184922
|
|
|
116
116
|
Lookup an instrument
|
|
117
117
|
|
|
118
118
|
```js
|
|
119
|
-
const
|
|
119
|
+
const instrument = await mbApi.lookupInstrument('b3eac5f9-7859-4416-ac39-7154e2e8d348');
|
|
120
120
|
```
|
|
121
121
|
|
|
122
122
|
### Lookup label
|
|
@@ -124,13 +124,13 @@ const artist = await mbApi.lookupInstrument({query: 'b3eac5f9-7859-4416-ac39-715
|
|
|
124
124
|
Lookup a label
|
|
125
125
|
|
|
126
126
|
```js
|
|
127
|
-
const
|
|
127
|
+
const label = await mbApi.lookupLabel('25dda9f9-f069-4898-82f0-59330a106c7f');
|
|
128
128
|
```
|
|
129
129
|
|
|
130
130
|
### Lookup place
|
|
131
131
|
|
|
132
132
|
```js
|
|
133
|
-
const
|
|
133
|
+
const place = await mbApi.lookupPlace('e6cfb74d-d69b-44c3-b890-1b3f509816e4');
|
|
134
134
|
```
|
|
135
135
|
|
|
136
136
|
The second argument can be used to pass [subqueries](https://wiki.musicbrainz.org/Development/XML_Web_Service/Version_2#Subqueries), which will return more (nested) information:
|
|
@@ -142,32 +142,27 @@ const artist = await mbApi.lookupArtist('ab2528d9-719f-4261-8098-21849222a0f2',
|
|
|
142
142
|
|
|
143
143
|
The second argument can be used to pass [subqueries](https://wiki.musicbrainz.org/Development/XML_Web_Service/Version_2#Subqueries):
|
|
144
144
|
```js
|
|
145
|
-
const
|
|
145
|
+
const recording = await mbApi.lookupRecording('16afa384-174e-435e-bfa3-5591accda31c', ['artists', 'url-rels']);
|
|
146
146
|
```
|
|
147
147
|
|
|
148
148
|
### Lookup release
|
|
149
149
|
```js
|
|
150
|
-
const release = await mbApi.lookupRelease(
|
|
150
|
+
const release = await mbApi.lookupRelease('976e0677-a480-4a5e-a177-6a86c1900bbf', ['artists', 'url-rels']);
|
|
151
151
|
```
|
|
152
152
|
|
|
153
153
|
### Lookup release-group
|
|
154
154
|
```js
|
|
155
|
-
const releaseGroup = await mbApi.lookupReleaseGroup(
|
|
155
|
+
const releaseGroup = await mbApi.lookupReleaseGroup('19099ea5-3600-4154-b482-2ec68815883e');
|
|
156
156
|
```
|
|
157
157
|
|
|
158
158
|
### Lookup work
|
|
159
159
|
```js
|
|
160
|
-
const work = await mbApi.lookupWork(
|
|
160
|
+
const work = await mbApi.lookupWork('b2aa02f4-6c95-43be-a426-aedb9f9a3805');
|
|
161
161
|
```
|
|
162
162
|
|
|
163
163
|
### Lookup URL
|
|
164
164
|
```js
|
|
165
|
-
const url = await mbApi.lookupUrl(
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
### Lookup URL
|
|
169
|
-
```js
|
|
170
|
-
const url = await mbApi.lookupUrl({query: 'c69556a6-7ded-4c54-809c-afb45a1abe7d'});
|
|
165
|
+
const url = await mbApi.lookupUrl('c69556a6-7ded-4c54-809c-afb45a1abe7d');
|
|
171
166
|
```
|
|
172
167
|
|
|
173
168
|
## Browse entities
|
|
@@ -316,7 +311,6 @@ const places = await browseSeries();
|
|
|
316
311
|
| `query.release-group` | Release-group MBID |
|
|
317
312
|
| `query.work` | Work MBID |
|
|
318
313
|
|
|
319
|
-
|
|
320
314
|
### Browse works
|
|
321
315
|
```js
|
|
322
316
|
const places = await browseWorks();
|
|
@@ -327,7 +321,6 @@ const places = await browseWorks();
|
|
|
327
321
|
| `query.artist` | Artist MBID |
|
|
328
322
|
| `query.xollection` | Collection MBID |
|
|
329
323
|
|
|
330
|
-
|
|
331
324
|
### Browse urls
|
|
332
325
|
```js
|
|
333
326
|
const urls = await browseUrls();
|
package/lib/digest-auth.js
CHANGED
|
@@ -7,12 +7,6 @@ function md5(str) {
|
|
|
7
7
|
return crypto.createHash('md5').update(str).digest('hex'); // lgtm [js/insufficient-password-hash]
|
|
8
8
|
}
|
|
9
9
|
class DigestAuth {
|
|
10
|
-
constructor(credentials) {
|
|
11
|
-
this.credentials = credentials;
|
|
12
|
-
this.hasAuth = false;
|
|
13
|
-
this.sentAuth = false;
|
|
14
|
-
this.bearerToken = null;
|
|
15
|
-
}
|
|
16
10
|
/**
|
|
17
11
|
* RFC 2617: handle both MD5 and MD5-sess algorithms.
|
|
18
12
|
*
|
|
@@ -25,6 +19,12 @@ class DigestAuth {
|
|
|
25
19
|
const ha1 = md5(user + ':' + realm + ':' + pass); // lgtm [js/insufficient-password-hash]
|
|
26
20
|
return algorithm && algorithm.toLowerCase() === 'md5-sess' ? md5(ha1 + ':' + nonce + ':' + cnonce) : ha1;
|
|
27
21
|
}
|
|
22
|
+
constructor(credentials) {
|
|
23
|
+
this.credentials = credentials;
|
|
24
|
+
this.hasAuth = false;
|
|
25
|
+
this.sentAuth = false;
|
|
26
|
+
this.bearerToken = null;
|
|
27
|
+
}
|
|
28
28
|
digest(method, path, authHeader) {
|
|
29
29
|
// TODO: More complete implementation of RFC 2617.
|
|
30
30
|
// - support qop="auth-int" only
|
package/lib/musicbrainz-api.d.ts
CHANGED
|
@@ -5,22 +5,43 @@ export { XmlRecording } from './xml/xml-recording';
|
|
|
5
5
|
import { XmlMetadata } from './xml/xml-metadata';
|
|
6
6
|
import * as mb from './musicbrainz.types';
|
|
7
7
|
export * from './musicbrainz.types';
|
|
8
|
-
export
|
|
9
|
-
export
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
8
|
+
export type RelationsIncludes = 'area-rels' | 'artist-rels' | 'event-rels' | 'instrument-rels' | 'label-rels' | 'place-rels' | 'recording-rels' | 'release-rels' | 'release-group-rels' | 'series-rels' | 'url-rels' | 'work-rels';
|
|
9
|
+
export type SubQueryIncludes =
|
|
10
|
+
/**
|
|
11
|
+
* include discids for all media in the releases
|
|
12
|
+
*/
|
|
13
|
+
'discids'
|
|
14
|
+
/**
|
|
15
|
+
* include media for all releases, this includes the # of tracks on each medium and its format.
|
|
16
|
+
*/
|
|
17
|
+
| 'media'
|
|
18
|
+
/**
|
|
19
|
+
* include isrcs for all recordings
|
|
20
|
+
*/
|
|
21
|
+
| 'isrcs'
|
|
22
|
+
/**
|
|
23
|
+
* include artists credits for all releases and recordings
|
|
24
|
+
*/
|
|
25
|
+
| 'artist-credits'
|
|
26
|
+
/**
|
|
27
|
+
* include only those releases where the artist appears on one of the tracks, only valid on artists in combination with `releases`
|
|
28
|
+
*/
|
|
29
|
+
| 'various-artists';
|
|
30
|
+
export type MiscIncludes = 'aliases' | 'annotation' | 'tags' | 'genres' | 'ratings' | 'media';
|
|
31
|
+
export type AreaIncludes = MiscIncludes | RelationsIncludes;
|
|
32
|
+
export type ArtistIncludes = MiscIncludes | RelationsIncludes | 'recordings' | 'releases' | 'release-groups' | 'works';
|
|
33
|
+
export type CollectionIncludes = MiscIncludes | RelationsIncludes | 'user-collections';
|
|
34
|
+
export type EventIncludes = MiscIncludes | RelationsIncludes;
|
|
35
|
+
export type GenreIncludes = MiscIncludes;
|
|
36
|
+
export type InstrumentIncludes = MiscIncludes | RelationsIncludes;
|
|
37
|
+
export type LabelIncludes = MiscIncludes | RelationsIncludes | 'releases';
|
|
38
|
+
export type PlaceIncludes = MiscIncludes | RelationsIncludes;
|
|
39
|
+
export type RecordingIncludes = MiscIncludes | RelationsIncludes | SubQueryIncludes | 'artists' | 'releases' | 'isrcs';
|
|
40
|
+
export type ReleasesIncludes = MiscIncludes | SubQueryIncludes | RelationsIncludes | 'artists' | 'collections' | 'labels' | 'recordings' | 'release-groups';
|
|
41
|
+
export type ReleaseGroupIncludes = MiscIncludes | SubQueryIncludes | RelationsIncludes | 'artists' | 'releases';
|
|
42
|
+
export type SeriesIncludes = MiscIncludes | RelationsIncludes;
|
|
43
|
+
export type WorkIncludes = MiscIncludes | RelationsIncludes;
|
|
44
|
+
export type UrlIncludes = RelationsIncludes;
|
|
24
45
|
export interface IFormData {
|
|
25
46
|
[key: string]: string | number;
|
|
26
47
|
}
|
|
@@ -83,6 +104,12 @@ export declare class MusicBrainzApi {
|
|
|
83
104
|
* @param inc Sub-queries
|
|
84
105
|
*/
|
|
85
106
|
lookupArtist(artistId: string, inc?: ArtistIncludes[]): Promise<mb.IArtist>;
|
|
107
|
+
/**
|
|
108
|
+
* Lookup collection
|
|
109
|
+
* @param collectionId Collection MBID
|
|
110
|
+
* @param inc List of additional information to be included about the entity. Any of the entities directly linked to the entity can be included.
|
|
111
|
+
*/
|
|
112
|
+
lookupCollection(collectionId: string, inc?: ArtistIncludes[]): Promise<mb.ICollection>;
|
|
86
113
|
/**
|
|
87
114
|
* Lookup instrument
|
|
88
115
|
* @param artistId Instrument MBID
|
package/lib/musicbrainz-api.js
CHANGED
|
@@ -37,23 +37,6 @@ const util_1 = require("util");
|
|
|
37
37
|
const retries = 3;
|
|
38
38
|
const debug = Debug('musicbrainz-api');
|
|
39
39
|
class MusicBrainzApi {
|
|
40
|
-
constructor(_config) {
|
|
41
|
-
this.config = {
|
|
42
|
-
baseUrl: 'https://musicbrainz.org'
|
|
43
|
-
};
|
|
44
|
-
Object.assign(this.config, _config);
|
|
45
|
-
const cookieJar = new tough.CookieJar();
|
|
46
|
-
this.getCookies = (0, util_1.promisify)(cookieJar.getCookies.bind(cookieJar));
|
|
47
|
-
this.options = {
|
|
48
|
-
prefixUrl: this.config.baseUrl,
|
|
49
|
-
timeout: 20 * 1000,
|
|
50
|
-
headers: {
|
|
51
|
-
'User-Agent': `${this.config.appName}/${this.config.appVersion} ( ${this.config.appContactInfo} )`
|
|
52
|
-
},
|
|
53
|
-
cookieJar
|
|
54
|
-
};
|
|
55
|
-
this.rateLimiter = new rate_limiter_1.RateLimiter(60, 50);
|
|
56
|
-
}
|
|
57
40
|
static escapeText(text) {
|
|
58
41
|
let str = '';
|
|
59
42
|
for (const chr of text) {
|
|
@@ -101,6 +84,23 @@ class MusicBrainzApi {
|
|
|
101
84
|
}
|
|
102
85
|
}
|
|
103
86
|
}
|
|
87
|
+
constructor(_config) {
|
|
88
|
+
this.config = {
|
|
89
|
+
baseUrl: 'https://musicbrainz.org'
|
|
90
|
+
};
|
|
91
|
+
Object.assign(this.config, _config);
|
|
92
|
+
const cookieJar = new tough.CookieJar();
|
|
93
|
+
this.getCookies = (0, util_1.promisify)(cookieJar.getCookies.bind(cookieJar));
|
|
94
|
+
this.options = {
|
|
95
|
+
prefixUrl: this.config.baseUrl,
|
|
96
|
+
timeout: 20 * 1000,
|
|
97
|
+
headers: {
|
|
98
|
+
'User-Agent': `${this.config.appName}/${this.config.appVersion} ( ${this.config.appContactInfo} )`
|
|
99
|
+
},
|
|
100
|
+
cookieJar
|
|
101
|
+
};
|
|
102
|
+
this.rateLimiter = new rate_limiter_1.RateLimiter(60, 50);
|
|
103
|
+
}
|
|
104
104
|
async restGet(relUrl, query = {}, attempt = 1) {
|
|
105
105
|
query.fmt = 'json';
|
|
106
106
|
let response;
|
|
@@ -157,6 +157,14 @@ class MusicBrainzApi {
|
|
|
157
157
|
lookupArtist(artistId, inc = []) {
|
|
158
158
|
return this.lookupEntity('artist', artistId, inc);
|
|
159
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Lookup collection
|
|
162
|
+
* @param collectionId Collection MBID
|
|
163
|
+
* @param inc List of additional information to be included about the entity. Any of the entities directly linked to the entity can be included.
|
|
164
|
+
*/
|
|
165
|
+
lookupCollection(collectionId, inc = []) {
|
|
166
|
+
return this.lookupEntity('collection', collectionId, inc);
|
|
167
|
+
}
|
|
160
168
|
/**
|
|
161
169
|
* Lookup instrument
|
|
162
170
|
* @param artistId Instrument MBID
|
|
@@ -56,6 +56,14 @@ export interface IArtistCredit {
|
|
|
56
56
|
joinphrase: string;
|
|
57
57
|
name: string;
|
|
58
58
|
}
|
|
59
|
+
export interface ICollection extends IEntity {
|
|
60
|
+
type: string;
|
|
61
|
+
name: string;
|
|
62
|
+
'type-id': string;
|
|
63
|
+
'recording-count': number;
|
|
64
|
+
editor: string;
|
|
65
|
+
'entity-type': string;
|
|
66
|
+
}
|
|
59
67
|
export interface IEvent extends IEntity {
|
|
60
68
|
cancelled: boolean;
|
|
61
69
|
type: string;
|
|
@@ -73,7 +81,7 @@ export interface IInstrument extends IEntity {
|
|
|
73
81
|
type: string;
|
|
74
82
|
description: string;
|
|
75
83
|
}
|
|
76
|
-
export
|
|
84
|
+
export type ReleaseQuality = 'normal';
|
|
77
85
|
export interface IRelease extends IEntity {
|
|
78
86
|
title: string;
|
|
79
87
|
'text-representation': {
|
|
@@ -101,7 +109,7 @@ export interface IReleaseEvent {
|
|
|
101
109
|
area?: IArea;
|
|
102
110
|
date?: string;
|
|
103
111
|
}
|
|
104
|
-
export
|
|
112
|
+
export type MediaFormatType = 'Digital Media';
|
|
105
113
|
export interface IRecording extends IEntity {
|
|
106
114
|
video: boolean;
|
|
107
115
|
length: number;
|
|
@@ -177,18 +185,18 @@ export interface IReleaseGroupList extends ISearchResult {
|
|
|
177
185
|
export interface IUrlList extends ISearchResult {
|
|
178
186
|
urls: IUrlMatch[];
|
|
179
187
|
}
|
|
180
|
-
export
|
|
188
|
+
export type RelationDirection = 'backward' | 'forward';
|
|
181
189
|
export interface IRelation {
|
|
182
190
|
'attribute-ids': any;
|
|
183
191
|
direction: RelationDirection;
|
|
184
192
|
'target-credit': string;
|
|
185
|
-
end: null |
|
|
193
|
+
end: null | unknown;
|
|
186
194
|
'source-credit': string;
|
|
187
195
|
ended: boolean;
|
|
188
|
-
'attribute-values':
|
|
196
|
+
'attribute-values': unknown;
|
|
189
197
|
attributes?: any[];
|
|
190
198
|
type: string;
|
|
191
|
-
begin?: null |
|
|
199
|
+
begin?: null | unknown;
|
|
192
200
|
'target-type'?: 'url';
|
|
193
201
|
'type-id': string;
|
|
194
202
|
url?: IUrl;
|
|
@@ -229,8 +237,8 @@ export interface IReleaseSearchResult extends ISearchResult {
|
|
|
229
237
|
/**
|
|
230
238
|
* https://musicbrainz.org/doc/Development/XML_Web_Service/Version_2#Subqueries
|
|
231
239
|
*/
|
|
232
|
-
export
|
|
233
|
-
export
|
|
240
|
+
export type EntityType = 'area' | 'artist' | 'collection' | 'event' | 'instrument' | 'label' | 'place' | 'recording' | 'release' | 'release-group' | 'series' | 'work' | 'url';
|
|
241
|
+
export type Relationships = 'area-rels' | 'artist-rels' | 'event-rels' | 'instrument-rels' | 'label-rels' | 'place-rels' | 'recording-rels' | 'release-rels' | 'release-group-rels' | 'series-rels' | 'url-rels' | 'work-rels';
|
|
234
242
|
export declare enum LinkType {
|
|
235
243
|
license = 302,
|
|
236
244
|
production = 256,
|
|
@@ -493,13 +501,6 @@ export interface IReleaseGroupsQuery extends IPagination {
|
|
|
493
501
|
collection?: string;
|
|
494
502
|
release?: string;
|
|
495
503
|
}
|
|
496
|
-
/**
|
|
497
|
-
* Browse series query <entity>: <MBID>
|
|
498
|
-
* https://wiki.musicbrainz.org/MusicBrainz_API#Linked_entities
|
|
499
|
-
*/
|
|
500
|
-
export interface IBrowseSeriesQuery extends IPagination {
|
|
501
|
-
recording?: string;
|
|
502
|
-
}
|
|
503
504
|
/**
|
|
504
505
|
* Browse release query <entity>: <MBID>
|
|
505
506
|
* https://wiki.musicbrainz.org/MusicBrainz_API#Linked_entities
|
|
@@ -533,27 +534,27 @@ export interface IBrowseArtistsResult {
|
|
|
533
534
|
'artist-offset': number;
|
|
534
535
|
}
|
|
535
536
|
export interface IBrowseCollectionsResult {
|
|
536
|
-
collections:
|
|
537
|
+
collections: ICollection[];
|
|
537
538
|
'collection-count': number;
|
|
538
539
|
'collection-offset': number;
|
|
539
540
|
}
|
|
540
541
|
export interface IBrowseEventsResult {
|
|
541
|
-
events:
|
|
542
|
+
events: IEvent[];
|
|
542
543
|
'event-count': number;
|
|
543
544
|
'event-offset': number;
|
|
544
545
|
}
|
|
545
546
|
export interface IBrowseInstrumentsResult {
|
|
546
|
-
instruments:
|
|
547
|
+
instruments: IInstrument[];
|
|
547
548
|
'instrument-count': number;
|
|
548
549
|
'instrument-offset': number;
|
|
549
550
|
}
|
|
550
551
|
export interface IBrowseLabelsResult {
|
|
551
|
-
label:
|
|
552
|
+
label: ILabel[];
|
|
552
553
|
'label-count': number;
|
|
553
554
|
'label-offset': number;
|
|
554
555
|
}
|
|
555
556
|
export interface IBrowsePlacesResult {
|
|
556
|
-
place:
|
|
557
|
+
place: IPlace[];
|
|
557
558
|
'place-count': number;
|
|
558
559
|
'place-offset': number;
|
|
559
560
|
}
|
|
@@ -568,7 +569,7 @@ export interface IBrowseReleasesResult {
|
|
|
568
569
|
'release-offset': number;
|
|
569
570
|
}
|
|
570
571
|
export interface IBrowseReleaseGroupsResult {
|
|
571
|
-
'release-groups':
|
|
572
|
+
'release-groups': IReleaseGroup[];
|
|
572
573
|
'release-group-count': number;
|
|
573
574
|
'release-group-offset': number;
|
|
574
575
|
}
|
package/lib/rate-limiter.js
CHANGED
|
@@ -4,14 +4,14 @@ exports.RateLimiter = void 0;
|
|
|
4
4
|
const Debug = require("debug");
|
|
5
5
|
const debug = Debug('musicbrainz-api:rate-limiter');
|
|
6
6
|
class RateLimiter {
|
|
7
|
+
static sleep(ms) {
|
|
8
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
9
|
+
}
|
|
7
10
|
constructor(period, maxCalls) {
|
|
8
11
|
this.maxCalls = maxCalls;
|
|
9
12
|
this.queue = [];
|
|
10
13
|
this.period = 1000 * period;
|
|
11
14
|
}
|
|
12
|
-
static sleep(ms) {
|
|
13
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
14
|
-
}
|
|
15
15
|
async limit() {
|
|
16
16
|
let now = new Date().getTime();
|
|
17
17
|
const t0 = now - (this.period);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "musicbrainz-api",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"description": "MusicBrainz API client for reading and submitting metadata",
|
|
5
5
|
"main": "lib/musicbrainz-api",
|
|
6
6
|
"types": "lib/musicbrainz-api",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"jsontoxml": "^1.0.1",
|
|
47
47
|
"source-map-support": "^0.5.16",
|
|
48
48
|
"tough-cookie": "^4.0.0",
|
|
49
|
-
"uuid": "^
|
|
49
|
+
"uuid": "^9.0.0"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@types/chai": "^4.3.0",
|
|
@@ -55,17 +55,17 @@
|
|
|
55
55
|
"@typescript-eslint/eslint-plugin": "^5.13.0",
|
|
56
56
|
"@typescript-eslint/parser": "^5.13.0",
|
|
57
57
|
"chai": "^4.2.0",
|
|
58
|
-
"del-cli": "^
|
|
58
|
+
"del-cli": "^5.0.0",
|
|
59
59
|
"eslint": "^8.10.0",
|
|
60
60
|
"eslint-config-prettier": "^8.4.0",
|
|
61
|
-
"eslint-import-resolver-typescript": "^
|
|
61
|
+
"eslint-import-resolver-typescript": "^3.3.0",
|
|
62
62
|
"eslint-plugin-import": "^2.25.4",
|
|
63
|
-
"eslint-plugin-jsdoc": "^
|
|
63
|
+
"eslint-plugin-jsdoc": "^39.3.3",
|
|
64
64
|
"eslint-plugin-node": "^11.1.0",
|
|
65
|
-
"eslint-plugin-unicorn": "^
|
|
65
|
+
"eslint-plugin-unicorn": "^44.0.2",
|
|
66
66
|
"mocha": "^9.0.1",
|
|
67
67
|
"nyc": "^15.0.0",
|
|
68
|
-
"remark-cli": "^
|
|
68
|
+
"remark-cli": "^11.0.0",
|
|
69
69
|
"remark-preset-lint-recommended": "^6.1.2",
|
|
70
70
|
"ts-node": "^10.0.0",
|
|
71
71
|
"tslint": "^6.1.1",
|