osu-stable-db 0.1.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 +141 -0
- package/dist/index.d.mts +15 -0
- package/dist/index.mjs +2 -0
- package/dist/node.d.mts +12 -0
- package/dist/node.mjs +23 -0
- package/dist/scores-7qsAMzUc.mjs +665 -0
- package/dist/types-DiZMN3fQ.d.mts +547 -0
- package/package.json +45 -0
|
@@ -0,0 +1,547 @@
|
|
|
1
|
+
//#region src/types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* The minimum legacy database version supported by this library.
|
|
4
|
+
*
|
|
5
|
+
* Only the latest stable structure introduced in version 20250107 is modeled.
|
|
6
|
+
*/
|
|
7
|
+
declare const MINIMUM_SUPPORTED_VERSION = 20250107;
|
|
8
|
+
/**
|
|
9
|
+
* Legacy gameplay mode identifiers used by osu!stable database files.
|
|
10
|
+
*/
|
|
11
|
+
declare const GameplayModes: {
|
|
12
|
+
readonly Osu: 0;
|
|
13
|
+
readonly Taiko: 1;
|
|
14
|
+
readonly Catch: 2;
|
|
15
|
+
readonly Mania: 3;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Beatmap ranked status values stored in osu!.db.
|
|
19
|
+
*/
|
|
20
|
+
declare const RankedStatuses: {
|
|
21
|
+
readonly Unknown: 0;
|
|
22
|
+
readonly Unsubmitted: 1;
|
|
23
|
+
readonly Pending: 2;
|
|
24
|
+
readonly Unused: 3;
|
|
25
|
+
readonly Ranked: 4;
|
|
26
|
+
readonly Approved: 5;
|
|
27
|
+
readonly Qualified: 6;
|
|
28
|
+
readonly Loved: 7;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Grade values stored in osu!.db for each ruleset.
|
|
32
|
+
*
|
|
33
|
+
* This matches legacy stable grade byte values used by osu!.db.
|
|
34
|
+
*/
|
|
35
|
+
declare const Grades: {
|
|
36
|
+
readonly XH: 0;
|
|
37
|
+
readonly SH: 1;
|
|
38
|
+
readonly X: 2;
|
|
39
|
+
readonly S: 3;
|
|
40
|
+
readonly A: 4;
|
|
41
|
+
readonly B: 5;
|
|
42
|
+
readonly C: 6;
|
|
43
|
+
readonly D: 7;
|
|
44
|
+
readonly F: 8;
|
|
45
|
+
readonly N: 9;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* User permission flags stored in osu!.db.
|
|
49
|
+
*/
|
|
50
|
+
declare const UserPermissions: {
|
|
51
|
+
readonly None: 0;
|
|
52
|
+
readonly Normal: 1;
|
|
53
|
+
readonly Moderator: 2;
|
|
54
|
+
readonly Supporter: 4;
|
|
55
|
+
readonly Friend: 8;
|
|
56
|
+
readonly Peppy: 16;
|
|
57
|
+
readonly WorldCupStaff: 32;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Legacy mod flags used by scores.db, osu!.db star ratings, and replay-derived data.
|
|
61
|
+
*
|
|
62
|
+
* This is a flag enum expressed as a const object. Values are intended to be combined
|
|
63
|
+
* with bitwise operations such as `Hidden | HardRock`.
|
|
64
|
+
*/
|
|
65
|
+
declare const Mods: {
|
|
66
|
+
readonly None: 0;
|
|
67
|
+
readonly NoFail: 1;
|
|
68
|
+
readonly Easy: 2;
|
|
69
|
+
readonly TouchDevice: 4;
|
|
70
|
+
readonly Hidden: 8;
|
|
71
|
+
readonly HardRock: 16;
|
|
72
|
+
readonly SuddenDeath: 32;
|
|
73
|
+
readonly DoubleTime: 64;
|
|
74
|
+
readonly Relax: 128;
|
|
75
|
+
readonly HalfTime: 256;
|
|
76
|
+
readonly Nightcore: 512;
|
|
77
|
+
readonly Flashlight: 1024;
|
|
78
|
+
readonly Autoplay: 2048;
|
|
79
|
+
readonly SpunOut: 4096;
|
|
80
|
+
readonly Autopilot: 8192;
|
|
81
|
+
readonly Perfect: 16384;
|
|
82
|
+
readonly Key4: 32768;
|
|
83
|
+
readonly Key5: 65536;
|
|
84
|
+
readonly Key6: 131072;
|
|
85
|
+
readonly Key7: 262144;
|
|
86
|
+
readonly Key8: 524288;
|
|
87
|
+
readonly FadeIn: 1048576;
|
|
88
|
+
readonly Random: 2097152;
|
|
89
|
+
readonly Cinema: 4194304;
|
|
90
|
+
readonly TargetPractice: 8388608;
|
|
91
|
+
readonly Key9: 16777216;
|
|
92
|
+
readonly KeyCoop: 33554432;
|
|
93
|
+
readonly Key1: 67108864;
|
|
94
|
+
readonly Key3: 134217728;
|
|
95
|
+
readonly Key2: 268435456;
|
|
96
|
+
readonly ScoreV2: 536870912;
|
|
97
|
+
readonly Mirror: 1073741824;
|
|
98
|
+
};
|
|
99
|
+
type GameplayMode = (typeof GameplayModes)[keyof typeof GameplayModes];
|
|
100
|
+
type RankedStatus = (typeof RankedStatuses)[keyof typeof RankedStatuses];
|
|
101
|
+
type Grade = (typeof Grades)[keyof typeof Grades];
|
|
102
|
+
type UserPermission = (typeof UserPermissions)[keyof typeof UserPermissions];
|
|
103
|
+
type UserPermissionFlags = number;
|
|
104
|
+
type Mod = (typeof Mods)[keyof typeof Mods];
|
|
105
|
+
type ModFlags = number;
|
|
106
|
+
/**
|
|
107
|
+
* A 64-bit .NET DateTime ticks value.
|
|
108
|
+
*
|
|
109
|
+
* One tick is 100 nanoseconds since 0001-01-01T00:00:00Z.
|
|
110
|
+
*
|
|
111
|
+
* The legacy database wiki calls some timestamp fields "Windows ticks", but
|
|
112
|
+
* reference implementations decode the corresponding values as .NET DateTime
|
|
113
|
+
* ticks for unlock dates, beatmap timestamps, and replay timestamps.
|
|
114
|
+
*/
|
|
115
|
+
type DateTimeTicks = bigint;
|
|
116
|
+
/**
|
|
117
|
+
* A pair of legacy mod flags and a star rating value.
|
|
118
|
+
*/
|
|
119
|
+
interface IntFloatPair {
|
|
120
|
+
/**
|
|
121
|
+
* Bitwise combination of mods for which this star rating was computed.
|
|
122
|
+
*/
|
|
123
|
+
mods: ModFlags;
|
|
124
|
+
/**
|
|
125
|
+
* Star rating value stored as a 32-bit float in version 20250107 and later.
|
|
126
|
+
*/
|
|
127
|
+
starRating: number;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* A timing point entry stored inside a beatmap entry in osu!.db.
|
|
131
|
+
*/
|
|
132
|
+
interface TimingPoint {
|
|
133
|
+
/**
|
|
134
|
+
* BPM value stored by the database.
|
|
135
|
+
*/
|
|
136
|
+
bpm: number;
|
|
137
|
+
/**
|
|
138
|
+
* Offset into the song, in milliseconds.
|
|
139
|
+
*/
|
|
140
|
+
offsetMs: number;
|
|
141
|
+
/**
|
|
142
|
+
* Raw timing-change flag.
|
|
143
|
+
*
|
|
144
|
+
* If false, the timing point is inherited.
|
|
145
|
+
*/
|
|
146
|
+
isUninherited: boolean;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Beatmap metadata cached inside osu!.db.
|
|
150
|
+
*/
|
|
151
|
+
interface BeatmapEntry {
|
|
152
|
+
/**
|
|
153
|
+
* Artist name.
|
|
154
|
+
*/
|
|
155
|
+
artist: string | null;
|
|
156
|
+
/**
|
|
157
|
+
* Artist name in Unicode.
|
|
158
|
+
*/
|
|
159
|
+
artistUnicode: string | null;
|
|
160
|
+
/**
|
|
161
|
+
* Song title.
|
|
162
|
+
*/
|
|
163
|
+
title: string | null;
|
|
164
|
+
/**
|
|
165
|
+
* Song title in Unicode.
|
|
166
|
+
*/
|
|
167
|
+
titleUnicode: string | null;
|
|
168
|
+
/**
|
|
169
|
+
* Creator name.
|
|
170
|
+
*/
|
|
171
|
+
creator: string | null;
|
|
172
|
+
/**
|
|
173
|
+
* Difficulty name such as Hard or Insane.
|
|
174
|
+
*/
|
|
175
|
+
difficultyName: string | null;
|
|
176
|
+
/**
|
|
177
|
+
* Audio file name.
|
|
178
|
+
*/
|
|
179
|
+
audioFileName: string | null;
|
|
180
|
+
/**
|
|
181
|
+
* MD5 hash of the beatmap.
|
|
182
|
+
*/
|
|
183
|
+
md5Hash: string | null;
|
|
184
|
+
/**
|
|
185
|
+
* Name of the corresponding .osu file.
|
|
186
|
+
*/
|
|
187
|
+
osuFileName: string | null;
|
|
188
|
+
/**
|
|
189
|
+
* Ranked status byte.
|
|
190
|
+
*/
|
|
191
|
+
rankedStatus: RankedStatus;
|
|
192
|
+
/**
|
|
193
|
+
* Number of hitcircles.
|
|
194
|
+
*/
|
|
195
|
+
hitCircleCount: number;
|
|
196
|
+
/**
|
|
197
|
+
* Number of sliders.
|
|
198
|
+
*/
|
|
199
|
+
sliderCount: number;
|
|
200
|
+
/**
|
|
201
|
+
* Number of spinners.
|
|
202
|
+
*/
|
|
203
|
+
spinnerCount: number;
|
|
204
|
+
/**
|
|
205
|
+
* Last modification time, in .NET DateTime ticks.
|
|
206
|
+
*/
|
|
207
|
+
lastModificationTime: DateTimeTicks;
|
|
208
|
+
/**
|
|
209
|
+
* Approach rate.
|
|
210
|
+
*/
|
|
211
|
+
approachRate: number;
|
|
212
|
+
/**
|
|
213
|
+
* Circle size.
|
|
214
|
+
*/
|
|
215
|
+
circleSize: number;
|
|
216
|
+
/**
|
|
217
|
+
* HP drain.
|
|
218
|
+
*/
|
|
219
|
+
hpDrain: number;
|
|
220
|
+
/**
|
|
221
|
+
* Overall difficulty.
|
|
222
|
+
*/
|
|
223
|
+
overallDifficulty: number;
|
|
224
|
+
/**
|
|
225
|
+
* Slider velocity.
|
|
226
|
+
*/
|
|
227
|
+
sliderVelocity: number;
|
|
228
|
+
/**
|
|
229
|
+
* Star rating info for osu!standard.
|
|
230
|
+
*/
|
|
231
|
+
standardStarRatings: IntFloatPair[];
|
|
232
|
+
/**
|
|
233
|
+
* Star rating info for osu!taiko.
|
|
234
|
+
*/
|
|
235
|
+
taikoStarRatings: IntFloatPair[];
|
|
236
|
+
/**
|
|
237
|
+
* Star rating info for osu!catch.
|
|
238
|
+
*/
|
|
239
|
+
catchStarRatings: IntFloatPair[];
|
|
240
|
+
/**
|
|
241
|
+
* Star rating info for osu!mania.
|
|
242
|
+
*/
|
|
243
|
+
maniaStarRatings: IntFloatPair[];
|
|
244
|
+
/**
|
|
245
|
+
* Drain time, in seconds.
|
|
246
|
+
*/
|
|
247
|
+
drainTimeSeconds: number;
|
|
248
|
+
/**
|
|
249
|
+
* Total time, in milliseconds.
|
|
250
|
+
*/
|
|
251
|
+
totalTimeMs: number;
|
|
252
|
+
/**
|
|
253
|
+
* Preview start time in beatmap select, in milliseconds.
|
|
254
|
+
*/
|
|
255
|
+
previewOffsetMs: number;
|
|
256
|
+
/**
|
|
257
|
+
* Timing points attached to this beatmap.
|
|
258
|
+
*/
|
|
259
|
+
timingPoints: TimingPoint[];
|
|
260
|
+
/**
|
|
261
|
+
* Online difficulty ID.
|
|
262
|
+
*/
|
|
263
|
+
difficultyId: number;
|
|
264
|
+
/**
|
|
265
|
+
* Online beatmap ID.
|
|
266
|
+
*/
|
|
267
|
+
beatmapId: number;
|
|
268
|
+
/**
|
|
269
|
+
* Online thread ID.
|
|
270
|
+
*/
|
|
271
|
+
threadId: number;
|
|
272
|
+
/**
|
|
273
|
+
* Grade achieved in osu!standard.
|
|
274
|
+
*/
|
|
275
|
+
standardGrade: Grade;
|
|
276
|
+
/**
|
|
277
|
+
* Grade achieved in osu!taiko.
|
|
278
|
+
*/
|
|
279
|
+
taikoGrade: Grade;
|
|
280
|
+
/**
|
|
281
|
+
* Grade achieved in osu!catch.
|
|
282
|
+
*/
|
|
283
|
+
catchGrade: Grade;
|
|
284
|
+
/**
|
|
285
|
+
* Grade achieved in osu!mania.
|
|
286
|
+
*/
|
|
287
|
+
maniaGrade: Grade;
|
|
288
|
+
/**
|
|
289
|
+
* Local beatmap offset.
|
|
290
|
+
*/
|
|
291
|
+
localOffset: number;
|
|
292
|
+
/**
|
|
293
|
+
* Stack leniency.
|
|
294
|
+
*/
|
|
295
|
+
stackLeniency: number;
|
|
296
|
+
/**
|
|
297
|
+
* osu! gameplay mode.
|
|
298
|
+
*/
|
|
299
|
+
gameplayMode: GameplayMode;
|
|
300
|
+
/**
|
|
301
|
+
* Song source.
|
|
302
|
+
*/
|
|
303
|
+
source: string | null;
|
|
304
|
+
/**
|
|
305
|
+
* Song tags.
|
|
306
|
+
*/
|
|
307
|
+
tags: string | null;
|
|
308
|
+
/**
|
|
309
|
+
* Online offset.
|
|
310
|
+
*/
|
|
311
|
+
onlineOffset: number;
|
|
312
|
+
/**
|
|
313
|
+
* Font used for the song title.
|
|
314
|
+
*/
|
|
315
|
+
titleFont: string | null;
|
|
316
|
+
/**
|
|
317
|
+
* Whether the beatmap is unplayed.
|
|
318
|
+
*/
|
|
319
|
+
isUnplayed: boolean;
|
|
320
|
+
/**
|
|
321
|
+
* Last time the beatmap was played, in .NET DateTime ticks.
|
|
322
|
+
*/
|
|
323
|
+
lastPlayedAt: DateTimeTicks;
|
|
324
|
+
/**
|
|
325
|
+
* Whether the beatmap is stored in osz2 format.
|
|
326
|
+
*/
|
|
327
|
+
isOsz2: boolean;
|
|
328
|
+
/**
|
|
329
|
+
* Beatmap folder name relative to Songs.
|
|
330
|
+
*/
|
|
331
|
+
beatmapFolderName: string | null;
|
|
332
|
+
/**
|
|
333
|
+
* Last time the beatmap was checked against the osu! repository, in .NET DateTime ticks.
|
|
334
|
+
*/
|
|
335
|
+
lastCheckedAgainstRepositoryAt: DateTimeTicks;
|
|
336
|
+
/**
|
|
337
|
+
* Ignore beatmap sound.
|
|
338
|
+
*/
|
|
339
|
+
ignoreBeatmapSound: boolean;
|
|
340
|
+
/**
|
|
341
|
+
* Ignore beatmap skin.
|
|
342
|
+
*/
|
|
343
|
+
ignoreBeatmapSkin: boolean;
|
|
344
|
+
/**
|
|
345
|
+
* Disable storyboard.
|
|
346
|
+
*/
|
|
347
|
+
disableStoryboard: boolean;
|
|
348
|
+
/**
|
|
349
|
+
* Disable video.
|
|
350
|
+
*/
|
|
351
|
+
disableVideo: boolean;
|
|
352
|
+
/**
|
|
353
|
+
* Visual override.
|
|
354
|
+
*/
|
|
355
|
+
visualOverride: boolean;
|
|
356
|
+
/**
|
|
357
|
+
* An unknown 32-bit integer documented as "Last modification time (?)".
|
|
358
|
+
*/
|
|
359
|
+
lastModificationTimeUnknown: number;
|
|
360
|
+
/**
|
|
361
|
+
* Mania scroll speed.
|
|
362
|
+
*/
|
|
363
|
+
maniaScrollSpeed: number;
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Top-level structure of osu!.db for supported versions.
|
|
367
|
+
*/
|
|
368
|
+
interface OsuDatabase {
|
|
369
|
+
/**
|
|
370
|
+
* osu! version such as 20250107.
|
|
371
|
+
*/
|
|
372
|
+
version: number;
|
|
373
|
+
/**
|
|
374
|
+
* Folder count.
|
|
375
|
+
*/
|
|
376
|
+
folderCount: number;
|
|
377
|
+
/**
|
|
378
|
+
* AccountUnlocked. Only false when the account is locked or banned in any way.
|
|
379
|
+
*/
|
|
380
|
+
accountUnlocked: boolean;
|
|
381
|
+
/**
|
|
382
|
+
* Date the account will be unlocked, in .NET DateTime ticks.
|
|
383
|
+
*/
|
|
384
|
+
accountUnlockDate: DateTimeTicks;
|
|
385
|
+
/**
|
|
386
|
+
* Player name.
|
|
387
|
+
*/
|
|
388
|
+
playerName: string | null;
|
|
389
|
+
/**
|
|
390
|
+
* Cached beatmaps.
|
|
391
|
+
*/
|
|
392
|
+
beatmaps: BeatmapEntry[];
|
|
393
|
+
/**
|
|
394
|
+
* User permission flags.
|
|
395
|
+
*/
|
|
396
|
+
userPermissions: UserPermissionFlags;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* A collection entry inside collection.db.
|
|
400
|
+
*/
|
|
401
|
+
interface CollectionEntry {
|
|
402
|
+
/**
|
|
403
|
+
* Name of the collection.
|
|
404
|
+
*/
|
|
405
|
+
name: string | null;
|
|
406
|
+
/**
|
|
407
|
+
* Beatmap MD5 hashes contained in the collection.
|
|
408
|
+
*/
|
|
409
|
+
beatmapMd5Hashes: Array<string | null>;
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Top-level structure of collection.db.
|
|
413
|
+
*/
|
|
414
|
+
interface CollectionDatabase {
|
|
415
|
+
/**
|
|
416
|
+
* Database version.
|
|
417
|
+
*/
|
|
418
|
+
version: number;
|
|
419
|
+
/**
|
|
420
|
+
* All collections stored in the database.
|
|
421
|
+
*/
|
|
422
|
+
collections: CollectionEntry[];
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Additional score payload written only for specific mods.
|
|
426
|
+
*/
|
|
427
|
+
interface ScoreAdditionalModInfo {
|
|
428
|
+
/**
|
|
429
|
+
* Total accuracy of all hits for Target Practice.
|
|
430
|
+
* Divide by the number of targets to obtain the in-game displayed accuracy.
|
|
431
|
+
*/
|
|
432
|
+
targetPracticeAccuracy: number;
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* A score entry stored in scores.db.
|
|
436
|
+
*/
|
|
437
|
+
interface ScoreEntry {
|
|
438
|
+
/**
|
|
439
|
+
* osu! gameplay mode.
|
|
440
|
+
*/
|
|
441
|
+
gameplayMode: GameplayMode;
|
|
442
|
+
/**
|
|
443
|
+
* Version of this score or replay.
|
|
444
|
+
*/
|
|
445
|
+
version: number;
|
|
446
|
+
/**
|
|
447
|
+
* Beatmap MD5 hash.
|
|
448
|
+
*/
|
|
449
|
+
beatmapMd5Hash: string | null;
|
|
450
|
+
/**
|
|
451
|
+
* Player name.
|
|
452
|
+
*/
|
|
453
|
+
playerName: string | null;
|
|
454
|
+
/**
|
|
455
|
+
* Replay MD5 hash.
|
|
456
|
+
*/
|
|
457
|
+
replayMd5Hash: string | null;
|
|
458
|
+
/**
|
|
459
|
+
* Number of 300s.
|
|
460
|
+
*/
|
|
461
|
+
count300: number;
|
|
462
|
+
/**
|
|
463
|
+
* Number of 100s, 150s, or mode-specific equivalent judgements.
|
|
464
|
+
*/
|
|
465
|
+
count100: number;
|
|
466
|
+
/**
|
|
467
|
+
* Number of 50s or mode-specific equivalent judgements.
|
|
468
|
+
*/
|
|
469
|
+
count50: number;
|
|
470
|
+
/**
|
|
471
|
+
* Number of gekis or max 300s.
|
|
472
|
+
*/
|
|
473
|
+
countGeki: number;
|
|
474
|
+
/**
|
|
475
|
+
* Number of katus or 200s.
|
|
476
|
+
*/
|
|
477
|
+
countKatu: number;
|
|
478
|
+
/**
|
|
479
|
+
* Number of misses.
|
|
480
|
+
*/
|
|
481
|
+
countMiss: number;
|
|
482
|
+
/**
|
|
483
|
+
* Replay score.
|
|
484
|
+
*/
|
|
485
|
+
totalScore: number;
|
|
486
|
+
/**
|
|
487
|
+
* Max combo.
|
|
488
|
+
*/
|
|
489
|
+
maxCombo: number;
|
|
490
|
+
/**
|
|
491
|
+
* Perfect combo flag.
|
|
492
|
+
*/
|
|
493
|
+
perfectCombo: boolean;
|
|
494
|
+
/**
|
|
495
|
+
* Bitwise combination of mods used.
|
|
496
|
+
*/
|
|
497
|
+
mods: ModFlags;
|
|
498
|
+
/**
|
|
499
|
+
* Reserved string field that should always be empty in scores.db.
|
|
500
|
+
*/
|
|
501
|
+
reservedEmptyString: string | null;
|
|
502
|
+
/**
|
|
503
|
+
* Replay timestamp, in .NET DateTime ticks.
|
|
504
|
+
*/
|
|
505
|
+
replayTimestamp: DateTimeTicks;
|
|
506
|
+
/**
|
|
507
|
+
* Reserved 32-bit integer field that should always be 0xffffffff (-1).
|
|
508
|
+
*/
|
|
509
|
+
reservedInt32: number;
|
|
510
|
+
/**
|
|
511
|
+
* Online score ID.
|
|
512
|
+
*/
|
|
513
|
+
onlineScoreId: bigint;
|
|
514
|
+
/**
|
|
515
|
+
* Additional mod information.
|
|
516
|
+
* Present only if Target Practice is enabled.
|
|
517
|
+
*/
|
|
518
|
+
additionalModInfo?: ScoreAdditionalModInfo;
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* A beatmap section stored in scores.db.
|
|
522
|
+
*/
|
|
523
|
+
interface ScoresBeatmapEntry {
|
|
524
|
+
/**
|
|
525
|
+
* Beatmap MD5 hash.
|
|
526
|
+
*/
|
|
527
|
+
beatmapMd5Hash: string | null;
|
|
528
|
+
/**
|
|
529
|
+
* Scores stored for this beatmap.
|
|
530
|
+
*/
|
|
531
|
+
scores: ScoreEntry[];
|
|
532
|
+
}
|
|
533
|
+
/**
|
|
534
|
+
* Top-level structure of scores.db.
|
|
535
|
+
*/
|
|
536
|
+
interface ScoresDatabase {
|
|
537
|
+
/**
|
|
538
|
+
* Database version.
|
|
539
|
+
*/
|
|
540
|
+
version: number;
|
|
541
|
+
/**
|
|
542
|
+
* Beatmap score groups.
|
|
543
|
+
*/
|
|
544
|
+
beatmaps: ScoresBeatmapEntry[];
|
|
545
|
+
}
|
|
546
|
+
//#endregion
|
|
547
|
+
export { UserPermissionFlags as C, UserPermission as S, ScoreAdditionalModInfo as _, GameplayMode as a, ScoresDatabase as b, Grades as c, Mod as d, ModFlags as f, RankedStatuses as g, RankedStatus as h, DateTimeTicks as i, IntFloatPair as l, OsuDatabase as m, CollectionDatabase as n, GameplayModes as o, Mods as p, CollectionEntry as r, Grade as s, BeatmapEntry as t, MINIMUM_SUPPORTED_VERSION as u, ScoreEntry as v, UserPermissions as w, TimingPoint as x, ScoresBeatmapEntry as y };
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "osu-stable-db",
|
|
3
|
+
"type": "module",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"description": "TypeScript reader and writer for osu!stable database files.",
|
|
6
|
+
"author": "zzzzv",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"sideEffects": false,
|
|
9
|
+
"homepage": "https://github.com/zzzzv/osu-stable-db#readme",
|
|
10
|
+
"bugs": {
|
|
11
|
+
"url": "https://github.com/zzzzv/osu-stable-db/issues"
|
|
12
|
+
},
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git+https://github.com/zzzzv/osu-stable-db.git"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"osu",
|
|
19
|
+
"osu-stable"
|
|
20
|
+
],
|
|
21
|
+
"exports": {
|
|
22
|
+
".": "./dist/index.mjs",
|
|
23
|
+
"./node": "./dist/node.mjs",
|
|
24
|
+
"./package.json": "./package.json"
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"dist"
|
|
28
|
+
],
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "tsdown",
|
|
31
|
+
"dev": "tsdown --watch",
|
|
32
|
+
"local:inspect": "pnpm run build && node scripts/local-inspect.mjs",
|
|
33
|
+
"local:roundtrip": "pnpm run build && node scripts/local-roundtrip.mjs",
|
|
34
|
+
"test": "vitest",
|
|
35
|
+
"typecheck": "tsc --noEmit",
|
|
36
|
+
"prepublishOnly": "pnpm run build"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/node": "^25.5.0",
|
|
40
|
+
"@typescript/native-preview": "7.0.0-dev.20260328.1",
|
|
41
|
+
"tsdown": "^0.21.7",
|
|
42
|
+
"typescript": "^6.0.2",
|
|
43
|
+
"vitest": "^4.1.2"
|
|
44
|
+
}
|
|
45
|
+
}
|