@tosuapp/osu-native-wrapper 1.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/dist/index.cjs ADDED
@@ -0,0 +1,737 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
10
+ var __export = (target, all) => {
11
+ for (var name in all)
12
+ __defProp(target, name, { get: all[name], enumerable: true });
13
+ };
14
+ var __copyProps = (to, from, except, desc) => {
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from))
17
+ if (!__hasOwnProp.call(to, key) && key !== except)
18
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19
+ }
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
+ // If the importer is in node compatibility mode or this is not an ESM
24
+ // file that has been converted to a CommonJS file using a Babel-
25
+ // compatible transform (i.e. "__esModule" has not been set), then set
26
+ // "default" to the CommonJS "module.exports" for node compatibility.
27
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
28
+ mod
29
+ ));
30
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
31
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
32
+
33
+ // index.ts
34
+ var index_exports = {};
35
+ __export(index_exports, {
36
+ Beatmap: () => Beatmap,
37
+ CatchDifficultyCalculator: () => CatchDifficultyCalculator,
38
+ CatchPerformanceCalculator: () => CatchPerformanceCalculator,
39
+ DifficultyCalculatorFactory: () => DifficultyCalculatorFactory,
40
+ ManiaDifficultyCalculator: () => ManiaDifficultyCalculator,
41
+ ManiaPerformanceCalculator: () => ManiaPerformanceCalculator,
42
+ Mod: () => Mod,
43
+ ModsCollection: () => ModsCollection,
44
+ OsuDifficultyCalculator: () => OsuDifficultyCalculator,
45
+ OsuNative: () => OsuNative,
46
+ OsuNativeError: () => OsuNativeError,
47
+ OsuPerformanceCalculator: () => OsuPerformanceCalculator,
48
+ PerformanceCalculatorFactory: () => PerformanceCalculatorFactory,
49
+ Ruleset: () => Ruleset,
50
+ TaikoDifficultyCalculator: () => TaikoDifficultyCalculator,
51
+ TaikoPerformanceCalculator: () => TaikoPerformanceCalculator
52
+ });
53
+ module.exports = __toCommonJS(index_exports);
54
+
55
+ // src/core/OsuNativeError.ts
56
+ var _OsuNativeError = class _OsuNativeError extends Error {
57
+ constructor(operation, errno, message, code, rawMessage) {
58
+ super(message);
59
+ __publicField(this, "errno");
60
+ __publicField(this, "operation");
61
+ __publicField(this, "rawMessage");
62
+ __publicField(this, "code");
63
+ this.name = "OsuNativeError";
64
+ this.errno = errno;
65
+ this.operation = operation;
66
+ this.rawMessage = rawMessage;
67
+ this.code = code;
68
+ }
69
+ };
70
+ __name(_OsuNativeError, "OsuNativeError");
71
+ var OsuNativeError = _OsuNativeError;
72
+
73
+ // src/core/OsuNative.ts
74
+ var import_osu_native_napi = __toESM(require("@tosuapp/osu-native-napi"));
75
+ var _OsuNative = class _OsuNative {
76
+ static getLastMessage() {
77
+ const msg = import_osu_native_napi.default.ErrorHandler_GetLastMessage();
78
+ const trimmed = msg.trim();
79
+ return trimmed.length > 0 ? trimmed : void 0;
80
+ }
81
+ static errorCodeName(value) {
82
+ return _OsuNative.errorCodeNameByValue.get(value);
83
+ }
84
+ static toError(operation, value) {
85
+ const name = this.errorCodeName(value);
86
+ const rawMessage = this.getLastMessage();
87
+ const suffix = rawMessage ? `: ${rawMessage}` : "";
88
+ const message = `${operation} failed (${name ?? value})${suffix}`;
89
+ return new OsuNativeError(operation, value, message, name, rawMessage);
90
+ }
91
+ static assertOk(operation, value) {
92
+ if (value === import_osu_native_napi.default.ErrorCode.SUCCESS) {
93
+ return;
94
+ }
95
+ throw this.toError(operation, value);
96
+ }
97
+ static assertSizeQuery(operation, value) {
98
+ if (value === import_osu_native_napi.default.ErrorCode.BUFFER_SIZE_QUERY) {
99
+ return;
100
+ }
101
+ throw this.toError(operation, value);
102
+ }
103
+ static makeNullHandle() {
104
+ return new import_osu_native_napi.default.ManagedObjectHandle();
105
+ }
106
+ };
107
+ __name(_OsuNative, "OsuNative");
108
+ __publicField(_OsuNative, "errorCode", import_osu_native_napi.default.ErrorCode);
109
+ __publicField(_OsuNative, "errorCodeNameByValue", new Map(Object.entries(import_osu_native_napi.default.ErrorCode).filter((entry) => typeof entry[1] === "number").map(([name, value]) => [
110
+ value,
111
+ name
112
+ ])));
113
+ var OsuNative = _OsuNative;
114
+
115
+ // src/internal/NativeHandleOwner.ts
116
+ var _NativeHandleOwner = class _NativeHandleOwner {
117
+ constructor(native) {
118
+ __publicField(this, "native");
119
+ __publicField(this, "destroyed", false);
120
+ this.native = native;
121
+ }
122
+ get handle() {
123
+ return this.native.handle;
124
+ }
125
+ ensureAlive() {
126
+ if (!this.destroyed) {
127
+ return;
128
+ }
129
+ throw new Error(`${this.constructor.name} is destroyed`);
130
+ }
131
+ };
132
+ __name(_NativeHandleOwner, "NativeHandleOwner");
133
+ var NativeHandleOwner = _NativeHandleOwner;
134
+
135
+ // src/objects/Beatmap.ts
136
+ var import_osu_native_napi2 = __toESM(require("@tosuapp/osu-native-napi"));
137
+ var _Beatmap = class _Beatmap extends NativeHandleOwner {
138
+ static fromFile(filePath) {
139
+ const native = new import_osu_native_napi2.default.NativeBeatmap();
140
+ OsuNative.assertOk("Beatmap_CreateFromFile", import_osu_native_napi2.default.Beatmap_CreateFromFile(filePath, native));
141
+ return new _Beatmap(native);
142
+ }
143
+ static fromText(text) {
144
+ const native = new import_osu_native_napi2.default.NativeBeatmap();
145
+ OsuNative.assertOk("Beatmap_CreateFromText", import_osu_native_napi2.default.Beatmap_CreateFromText(text, native));
146
+ return new _Beatmap(native);
147
+ }
148
+ constructor(native) {
149
+ super(native);
150
+ }
151
+ getTitle() {
152
+ this.ensureAlive();
153
+ const bufferSizeArr = new Int32Array([
154
+ 0
155
+ ]);
156
+ OsuNative.assertSizeQuery("Beatmap_GetTitle", import_osu_native_napi2.default.Beatmap_GetTitle(this.handle, null, bufferSizeArr));
157
+ const buffer = Buffer.alloc(bufferSizeArr[0]);
158
+ OsuNative.assertOk("Beatmap_GetTitle", import_osu_native_napi2.default.Beatmap_GetTitle(this.handle, buffer, bufferSizeArr));
159
+ return buffer.toString();
160
+ }
161
+ getArtist() {
162
+ this.ensureAlive();
163
+ const bufferSizeArr = new Int32Array([
164
+ 0
165
+ ]);
166
+ OsuNative.assertSizeQuery("Beatmap_GetArtist", import_osu_native_napi2.default.Beatmap_GetArtist(this.handle, null, bufferSizeArr));
167
+ const buffer = Buffer.alloc(bufferSizeArr[0]);
168
+ OsuNative.assertOk("Beatmap_GetArtist", import_osu_native_napi2.default.Beatmap_GetArtist(this.handle, buffer, bufferSizeArr));
169
+ return buffer.toString();
170
+ }
171
+ getVersion() {
172
+ this.ensureAlive();
173
+ const bufferSizeArr = new Int32Array([
174
+ 0
175
+ ]);
176
+ OsuNative.assertSizeQuery("Beatmap_GetVersion", import_osu_native_napi2.default.Beatmap_GetVersion(this.handle, null, bufferSizeArr));
177
+ const buffer = Buffer.alloc(bufferSizeArr[0]);
178
+ OsuNative.assertOk("Beatmap_GetArtist", import_osu_native_napi2.default.Beatmap_GetVersion(this.handle, buffer, bufferSizeArr));
179
+ return buffer.toString();
180
+ }
181
+ destroy() {
182
+ if (this.destroyed) {
183
+ return;
184
+ }
185
+ OsuNative.assertOk("Beatmap_Destroy", import_osu_native_napi2.default.Beatmap_Destroy(this.handle));
186
+ this.destroyed = true;
187
+ }
188
+ };
189
+ __name(_Beatmap, "Beatmap");
190
+ var Beatmap = _Beatmap;
191
+
192
+ // src/objects/Mod.ts
193
+ var import_osu_native_napi3 = __toESM(require("@tosuapp/osu-native-napi"));
194
+ var _Mod = class _Mod extends NativeHandleOwner {
195
+ static create(acronym) {
196
+ const native = new import_osu_native_napi3.default.NativeMod();
197
+ OsuNative.assertOk("Mod_Create", import_osu_native_napi3.default.Mod_Create(acronym, native));
198
+ return new _Mod(native);
199
+ }
200
+ setSettingBool(key, value) {
201
+ this.ensureAlive();
202
+ OsuNative.assertOk("Mod_SetSettingBool", import_osu_native_napi3.default.Mod_SetSettingBool(this.handle, key, value));
203
+ }
204
+ setSettingInteger(key, value) {
205
+ this.ensureAlive();
206
+ OsuNative.assertOk("Mod_SetSettingInteger", import_osu_native_napi3.default.Mod_SetSettingInteger(this.handle, key, value));
207
+ }
208
+ setSettingFloat(key, value) {
209
+ this.ensureAlive();
210
+ OsuNative.assertOk("Mod_SetSettingFloat", import_osu_native_napi3.default.Mod_SetSettingFloat(this.handle, key, value));
211
+ }
212
+ debug() {
213
+ this.ensureAlive();
214
+ OsuNative.assertOk("Mod_Debug", import_osu_native_napi3.default.Mod_Debug(this.handle));
215
+ }
216
+ destroy() {
217
+ if (this.destroyed) {
218
+ return;
219
+ }
220
+ OsuNative.assertOk("Mod_Destroy", import_osu_native_napi3.default.Mod_Destroy(this.handle));
221
+ this.destroyed = true;
222
+ }
223
+ };
224
+ __name(_Mod, "Mod");
225
+ var Mod = _Mod;
226
+
227
+ // src/objects/ModsCollection.ts
228
+ var import_osu_native_napi4 = __toESM(require("@tosuapp/osu-native-napi"));
229
+ var _ModsCollection = class _ModsCollection extends NativeHandleOwner {
230
+ constructor() {
231
+ super(...arguments);
232
+ __publicField(this, "mods", []);
233
+ }
234
+ static create() {
235
+ const native = new import_osu_native_napi4.default.NativeModsCollection();
236
+ OsuNative.assertOk("ModsCollection_Create", import_osu_native_napi4.default.ModsCollection_Create(native));
237
+ return new _ModsCollection(native);
238
+ }
239
+ add(mod) {
240
+ this.ensureAlive();
241
+ OsuNative.assertOk("ModsCollection_Add", import_osu_native_napi4.default.ModsCollection_Add(this.handle, mod.handle));
242
+ this.mods.push(mod.handle);
243
+ }
244
+ has(mod) {
245
+ return this.mods.find((x) => x == mod.handle) !== void 0;
246
+ }
247
+ remove(mod) {
248
+ this.ensureAlive();
249
+ OsuNative.assertOk("ModsCollection_Remove", import_osu_native_napi4.default.ModsCollection_Remove(this.handle, mod.handle));
250
+ this.mods = this.mods.filter((x) => x !== mod.handle);
251
+ }
252
+ debug() {
253
+ this.ensureAlive();
254
+ OsuNative.assertOk("ModsCollection_Debug", import_osu_native_napi4.default.ModsCollection_Debug(this.handle));
255
+ }
256
+ destroy() {
257
+ if (this.destroyed) {
258
+ return;
259
+ }
260
+ OsuNative.assertOk("ModsCollection_Destroy", import_osu_native_napi4.default.ModsCollection_Destroy(this.handle));
261
+ this.destroyed = true;
262
+ }
263
+ };
264
+ __name(_ModsCollection, "ModsCollection");
265
+ var ModsCollection = _ModsCollection;
266
+
267
+ // src/internal/rulesetShortName.ts
268
+ var RULESET_SHORT_NAME_BY_ID = /* @__PURE__ */ new Map([
269
+ [
270
+ 0,
271
+ "osu"
272
+ ],
273
+ [
274
+ 1,
275
+ "taiko"
276
+ ],
277
+ [
278
+ 2,
279
+ "catch"
280
+ ],
281
+ [
282
+ 3,
283
+ "mania"
284
+ ]
285
+ ]);
286
+
287
+ // src/objects/Ruleset.ts
288
+ var import_osu_native_napi5 = __toESM(require("@tosuapp/osu-native-napi"));
289
+ var _Ruleset = class _Ruleset extends NativeHandleOwner {
290
+ static fromId(rulesetId) {
291
+ const native = new import_osu_native_napi5.default.NativeRuleset();
292
+ OsuNative.assertOk("Ruleset_CreateFromId", import_osu_native_napi5.default.Ruleset_CreateFromId(rulesetId, native));
293
+ return new _Ruleset(native);
294
+ }
295
+ static fromShortName(shortName) {
296
+ const native = new import_osu_native_napi5.default.NativeRuleset();
297
+ OsuNative.assertOk("Ruleset_CreateFromShortName", import_osu_native_napi5.default.Ruleset_CreateFromShortName(shortName, native));
298
+ return new _Ruleset(native);
299
+ }
300
+ get rulesetId() {
301
+ return this.native.rulesetId;
302
+ }
303
+ get shortName() {
304
+ return RULESET_SHORT_NAME_BY_ID.get(this.rulesetId);
305
+ }
306
+ getShortName() {
307
+ this.ensureAlive();
308
+ return;
309
+ }
310
+ destroy() {
311
+ if (this.destroyed) {
312
+ return;
313
+ }
314
+ OsuNative.assertOk("Ruleset_Destroy", import_osu_native_napi5.default.Ruleset_Destroy(this.handle));
315
+ this.destroyed = true;
316
+ }
317
+ };
318
+ __name(_Ruleset, "Ruleset");
319
+ var Ruleset = _Ruleset;
320
+
321
+ // src/calculators/difficulty/CatchDifficultyCalculator.ts
322
+ var import_osu_native_napi6 = __toESM(require("@tosuapp/osu-native-napi"));
323
+ var _CatchDifficultyCalculator = class _CatchDifficultyCalculator extends NativeHandleOwner {
324
+ constructor(native, ruleset, beatmap) {
325
+ super(native);
326
+ __publicField(this, "ruleset");
327
+ __publicField(this, "beatmap");
328
+ this.ruleset = ruleset, this.beatmap = beatmap;
329
+ }
330
+ static create(ruleset, beatmap) {
331
+ const native = new import_osu_native_napi6.default.NativeCatchDifficultyCalculator();
332
+ OsuNative.assertOk("CatchDifficultyCalculator_Create", import_osu_native_napi6.default.CatchDifficultyCalculator_Create(ruleset.handle, beatmap.handle, native));
333
+ return new _CatchDifficultyCalculator(native, ruleset, beatmap);
334
+ }
335
+ calculate() {
336
+ this.ensureAlive();
337
+ const attrs = new import_osu_native_napi6.default.NativeCatchDifficultyAttributes();
338
+ OsuNative.assertOk("CatchDifficultyCalculator_Calculate", import_osu_native_napi6.default.CatchDifficultyCalculator_Calculate(this.handle, attrs));
339
+ return attrs;
340
+ }
341
+ calculateWithMods(mods) {
342
+ this.ensureAlive();
343
+ const attrs = new import_osu_native_napi6.default.NativeCatchDifficultyAttributes();
344
+ OsuNative.assertOk("CatchDifficultyCalculator_CalculateMods", import_osu_native_napi6.default.CatchDifficultyCalculator_CalculateMods(this.handle, mods.handle, attrs));
345
+ return attrs;
346
+ }
347
+ calculateTimed() {
348
+ this.ensureAlive();
349
+ const bufferSize = new Int32Array(1);
350
+ OsuNative.assertSizeQuery("CatchDifficultyCalculator_CalculateTimed", import_osu_native_napi6.default.CatchDifficultyCalculator_CalculateTimed(this.handle, null, bufferSize));
351
+ if (bufferSize[0] <= 0) {
352
+ return [];
353
+ }
354
+ const outAttrs = new Array(bufferSize[0]);
355
+ OsuNative.assertOk("CatchDifficultyCalculator_CalculateTimed", import_osu_native_napi6.default.CatchDifficultyCalculator_CalculateTimed(this.handle, outAttrs, bufferSize));
356
+ return outAttrs;
357
+ }
358
+ calculateWithModsTimed(mods) {
359
+ this.ensureAlive();
360
+ const bufferSize = new Int32Array(1);
361
+ OsuNative.assertSizeQuery("CatchDifficultyCalculator_CalculateModsTimed", import_osu_native_napi6.default.CatchDifficultyCalculator_CalculateModsTimed(this.handle, mods.handle, null, bufferSize));
362
+ if (bufferSize[0] <= 0) {
363
+ return [];
364
+ }
365
+ const outAttrs = new Array(bufferSize[0]);
366
+ OsuNative.assertOk("CatchDifficultyCalculator_CalculateModsTimed", import_osu_native_napi6.default.CatchDifficultyCalculator_CalculateModsTimed(this.handle, mods.handle, outAttrs, bufferSize));
367
+ return outAttrs;
368
+ }
369
+ destroy() {
370
+ if (this.destroyed) {
371
+ return;
372
+ }
373
+ OsuNative.assertOk("CatchDifficultyCalculator_Destroy", import_osu_native_napi6.default.CatchDifficultyCalculator_Destroy(this.handle));
374
+ this.destroyed = true;
375
+ }
376
+ };
377
+ __name(_CatchDifficultyCalculator, "CatchDifficultyCalculator");
378
+ var CatchDifficultyCalculator = _CatchDifficultyCalculator;
379
+
380
+ // src/calculators/difficulty/ManiaDifficultyCalculator.ts
381
+ var import_osu_native_napi7 = __toESM(require("@tosuapp/osu-native-napi"));
382
+ var _ManiaDifficultyCalculator = class _ManiaDifficultyCalculator extends NativeHandleOwner {
383
+ constructor(native, ruleset, beatmap) {
384
+ super(native);
385
+ __publicField(this, "ruleset");
386
+ __publicField(this, "beatmap");
387
+ this.ruleset = ruleset, this.beatmap = beatmap;
388
+ }
389
+ static create(ruleset, beatmap) {
390
+ const native = new import_osu_native_napi7.default.NativeManiaDifficultyCalculator();
391
+ OsuNative.assertOk("ManiaDifficultyCalculator_Create", import_osu_native_napi7.default.ManiaDifficultyCalculator_Create(ruleset.handle, beatmap.handle, native));
392
+ return new _ManiaDifficultyCalculator(native, ruleset, beatmap);
393
+ }
394
+ calculate() {
395
+ this.ensureAlive();
396
+ const attrs = new import_osu_native_napi7.default.NativeManiaDifficultyAttributes();
397
+ OsuNative.assertOk("ManiaDifficultyCalculator_Calculate", import_osu_native_napi7.default.ManiaDifficultyCalculator_Calculate(this.handle, attrs));
398
+ return attrs;
399
+ }
400
+ calculateWithMods(mods) {
401
+ this.ensureAlive();
402
+ const attrs = new import_osu_native_napi7.default.NativeManiaDifficultyAttributes();
403
+ OsuNative.assertOk("ManiaDifficultyCalculator_CalculateMods", import_osu_native_napi7.default.ManiaDifficultyCalculator_CalculateMods(this.handle, mods.handle, attrs));
404
+ return attrs;
405
+ }
406
+ calculateTimed() {
407
+ this.ensureAlive();
408
+ const bufferSize = new Int32Array(1);
409
+ OsuNative.assertSizeQuery("ManiaDifficultyCalculator_CalculateTimed", import_osu_native_napi7.default.ManiaDifficultyCalculator_CalculateTimed(this.handle, null, bufferSize));
410
+ if (bufferSize[0] <= 0) {
411
+ return [];
412
+ }
413
+ const outAttrs = new Array(bufferSize[0]);
414
+ OsuNative.assertOk("ManiaDifficultyCalculator_CalculateTimed", import_osu_native_napi7.default.ManiaDifficultyCalculator_CalculateTimed(this.handle, outAttrs, bufferSize));
415
+ return outAttrs;
416
+ }
417
+ calculateWithModsTimed(mods) {
418
+ this.ensureAlive();
419
+ const bufferSize = new Int32Array(1);
420
+ OsuNative.assertSizeQuery("ManiaDifficultyCalculator_CalculateModsTimed", import_osu_native_napi7.default.ManiaDifficultyCalculator_CalculateModsTimed(this.handle, mods.handle, null, bufferSize));
421
+ if (bufferSize[0] <= 0) {
422
+ return [];
423
+ }
424
+ const outAttrs = new Array(bufferSize[0]);
425
+ OsuNative.assertOk("ManiaDifficultyCalculator_CalculateModsTimed", import_osu_native_napi7.default.ManiaDifficultyCalculator_CalculateModsTimed(this.handle, mods.handle, outAttrs, bufferSize));
426
+ return outAttrs;
427
+ }
428
+ destroy() {
429
+ if (this.destroyed) {
430
+ return;
431
+ }
432
+ OsuNative.assertOk("ManiaDifficultyCalculator_Destroy", import_osu_native_napi7.default.ManiaDifficultyCalculator_Destroy(this.handle));
433
+ this.destroyed = true;
434
+ }
435
+ };
436
+ __name(_ManiaDifficultyCalculator, "ManiaDifficultyCalculator");
437
+ var ManiaDifficultyCalculator = _ManiaDifficultyCalculator;
438
+
439
+ // src/calculators/difficulty/OsuDifficultyCalculator.ts
440
+ var import_osu_native_napi8 = __toESM(require("@tosuapp/osu-native-napi"));
441
+ var _OsuDifficultyCalculator = class _OsuDifficultyCalculator extends NativeHandleOwner {
442
+ constructor(native, ruleset, beatmap) {
443
+ super(native);
444
+ __publicField(this, "ruleset");
445
+ __publicField(this, "beatmap");
446
+ this.ruleset = ruleset, this.beatmap = beatmap;
447
+ }
448
+ static create(ruleset, beatmap) {
449
+ const native = new import_osu_native_napi8.default.NativeOsuDifficultyCalculator();
450
+ OsuNative.assertOk("OsuDifficultyCalculator_Create", import_osu_native_napi8.default.OsuDifficultyCalculator_Create(ruleset.handle, beatmap.handle, native));
451
+ return new _OsuDifficultyCalculator(native, ruleset, beatmap);
452
+ }
453
+ calculate() {
454
+ this.ensureAlive();
455
+ const attrs = new import_osu_native_napi8.default.NativeOsuDifficultyAttributes();
456
+ OsuNative.assertOk("OsuDifficultyCalculator_Calculate", import_osu_native_napi8.default.OsuDifficultyCalculator_Calculate(this.handle, attrs));
457
+ return attrs;
458
+ }
459
+ calculateWithMods(mods) {
460
+ this.ensureAlive();
461
+ const attrs = new import_osu_native_napi8.default.NativeOsuDifficultyAttributes();
462
+ OsuNative.assertOk("OsuDifficultyCalculator_CalculateMods", import_osu_native_napi8.default.OsuDifficultyCalculator_CalculateMods(this.handle, mods.handle, attrs));
463
+ return attrs;
464
+ }
465
+ calculateTimed() {
466
+ this.ensureAlive();
467
+ const bufferSize = new Int32Array(1);
468
+ OsuNative.assertSizeQuery("OsuDifficultyCalculator_CalculateTimed", import_osu_native_napi8.default.OsuDifficultyCalculator_CalculateTimed(this.handle, null, bufferSize));
469
+ if (bufferSize[0] <= 0) {
470
+ return [];
471
+ }
472
+ const outAttrs = new Array(bufferSize[0]);
473
+ OsuNative.assertOk("OsuDifficultyCalculator_CalculateTimed", import_osu_native_napi8.default.OsuDifficultyCalculator_CalculateTimed(this.handle, outAttrs, bufferSize));
474
+ return outAttrs;
475
+ }
476
+ calculateWithModsTimed(mods) {
477
+ this.ensureAlive();
478
+ const bufferSize = new Int32Array(1);
479
+ OsuNative.assertSizeQuery("OsuDifficultyCalculator_CalculateModsTimed", import_osu_native_napi8.default.OsuDifficultyCalculator_CalculateModsTimed(this.handle, mods.handle, null, bufferSize));
480
+ if (bufferSize[0] <= 0) {
481
+ return [];
482
+ }
483
+ const outAttrs = new Array(bufferSize[0]);
484
+ OsuNative.assertOk("OsuDifficultyCalculator_CalculateModsTimed", import_osu_native_napi8.default.OsuDifficultyCalculator_CalculateModsTimed(this.handle, mods.handle, outAttrs, bufferSize));
485
+ return outAttrs;
486
+ }
487
+ destroy() {
488
+ if (this.destroyed) {
489
+ return;
490
+ }
491
+ OsuNative.assertOk("OsuDifficultyCalculator_Destroy", import_osu_native_napi8.default.OsuDifficultyCalculator_Destroy(this.handle));
492
+ this.destroyed = true;
493
+ }
494
+ };
495
+ __name(_OsuDifficultyCalculator, "OsuDifficultyCalculator");
496
+ var OsuDifficultyCalculator = _OsuDifficultyCalculator;
497
+
498
+ // src/calculators/difficulty/TaikoDifficultyCalculator.ts
499
+ var import_osu_native_napi9 = __toESM(require("@tosuapp/osu-native-napi"));
500
+ var _TaikoDifficultyCalculator = class _TaikoDifficultyCalculator extends NativeHandleOwner {
501
+ constructor(native, ruleset, beatmap) {
502
+ super(native);
503
+ __publicField(this, "ruleset");
504
+ __publicField(this, "beatmap");
505
+ this.ruleset = ruleset, this.beatmap = beatmap;
506
+ }
507
+ static create(ruleset, beatmap) {
508
+ const native = new import_osu_native_napi9.default.NativeTaikoDifficultyCalculator();
509
+ OsuNative.assertOk("TaikoDifficultyCalculator_Create", import_osu_native_napi9.default.TaikoDifficultyCalculator_Create(ruleset.handle, beatmap.handle, native));
510
+ return new _TaikoDifficultyCalculator(native, ruleset, beatmap);
511
+ }
512
+ calculate() {
513
+ this.ensureAlive();
514
+ const attrs = new import_osu_native_napi9.default.NativeTaikoDifficultyAttributes();
515
+ OsuNative.assertOk("TaikoDifficultyCalculator_Calculate", import_osu_native_napi9.default.TaikoDifficultyCalculator_Calculate(this.handle, attrs));
516
+ return attrs;
517
+ }
518
+ calculateWithMods(mods) {
519
+ this.ensureAlive();
520
+ const attrs = new import_osu_native_napi9.default.NativeTaikoDifficultyAttributes();
521
+ OsuNative.assertOk("TaikoDifficultyCalculator_CalculateMods", import_osu_native_napi9.default.TaikoDifficultyCalculator_CalculateMods(this.handle, mods.handle, attrs));
522
+ return attrs;
523
+ }
524
+ calculateTimed() {
525
+ this.ensureAlive();
526
+ const bufferSize = new Int32Array(1);
527
+ OsuNative.assertSizeQuery("TaikoDifficultyCalculator_CalculateTimed", import_osu_native_napi9.default.TaikoDifficultyCalculator_CalculateTimed(this.handle, null, bufferSize));
528
+ if (bufferSize[0] <= 0) {
529
+ return [];
530
+ }
531
+ const outAttrs = new Array(bufferSize[0]);
532
+ OsuNative.assertOk("TaikoDifficultyCalculator_CalculateTimed", import_osu_native_napi9.default.TaikoDifficultyCalculator_CalculateTimed(this.handle, outAttrs, bufferSize));
533
+ return outAttrs;
534
+ }
535
+ calculateWithModsTimed(mods) {
536
+ this.ensureAlive();
537
+ const bufferSize = new Int32Array(1);
538
+ OsuNative.assertSizeQuery("TaikoDifficultyCalculator_CalculateModsTimed", import_osu_native_napi9.default.TaikoDifficultyCalculator_CalculateModsTimed(this.handle, mods.handle, null, bufferSize));
539
+ if (bufferSize[0] <= 0) {
540
+ return [];
541
+ }
542
+ const outAttrs = new Array(bufferSize[0]);
543
+ OsuNative.assertOk("TaikoDifficultyCalculator_CalculateModsTimed", import_osu_native_napi9.default.TaikoDifficultyCalculator_CalculateModsTimed(this.handle, mods.handle, outAttrs, bufferSize));
544
+ return outAttrs;
545
+ }
546
+ destroy() {
547
+ if (this.destroyed) {
548
+ return;
549
+ }
550
+ OsuNative.assertOk("TaikoDifficultyCalculator_Destroy", import_osu_native_napi9.default.TaikoDifficultyCalculator_Destroy(this.handle));
551
+ this.destroyed = true;
552
+ }
553
+ };
554
+ __name(_TaikoDifficultyCalculator, "TaikoDifficultyCalculator");
555
+ var TaikoDifficultyCalculator = _TaikoDifficultyCalculator;
556
+
557
+ // src/calculators/performance/CatchPerformanceCalculator.ts
558
+ var import_osu_native_napi11 = __toESM(require("@tosuapp/osu-native-napi"));
559
+
560
+ // src/internal/scoreInfo.ts
561
+ var import_osu_native_napi10 = __toESM(require("@tosuapp/osu-native-napi"));
562
+ function makeScoreInfo(input) {
563
+ const score = new import_osu_native_napi10.default.NativeScoreInfo();
564
+ score.rulesetHandle = input.ruleset.handle;
565
+ score.beatmapHandle = input.beatmap.handle;
566
+ score.modsHandle = input.mods?.handle ?? OsuNative.makeNullHandle();
567
+ score.maxCombo = input.maxCombo ?? 0;
568
+ score.accuracy = input.accuracy ?? 0;
569
+ score.countMiss = input.countMiss ?? 0;
570
+ score.countMeh = input.countMeh ?? 0;
571
+ score.countOk = input.countOk ?? 0;
572
+ score.countGood = input.countGood ?? 0;
573
+ score.countGreat = input.countGreat ?? 0;
574
+ score.countPerfect = input.countPerfect ?? 0;
575
+ score.countSliderTailHit = input.countSliderTailHit ?? 0;
576
+ score.countLargeTickMiss = input.countLargeTickMiss ?? 0;
577
+ return score;
578
+ }
579
+ __name(makeScoreInfo, "makeScoreInfo");
580
+
581
+ // src/calculators/performance/CatchPerformanceCalculator.ts
582
+ var _CatchPerformanceCalculator = class _CatchPerformanceCalculator extends NativeHandleOwner {
583
+ static create() {
584
+ const native = new import_osu_native_napi11.default.NativeCatchPerformanceCalculator();
585
+ OsuNative.assertOk("CatchPerformanceCalculator_Create", import_osu_native_napi11.default.CatchPerformanceCalculator_Create(native));
586
+ return new _CatchPerformanceCalculator(native);
587
+ }
588
+ calculate(score, difficulty) {
589
+ this.ensureAlive();
590
+ const out = new import_osu_native_napi11.default.NativeCatchPerformanceAttributes();
591
+ OsuNative.assertOk("CatchPerformanceCalculator_Calculate", import_osu_native_napi11.default.CatchPerformanceCalculator_Calculate(this.handle, makeScoreInfo(score), difficulty, out));
592
+ return out;
593
+ }
594
+ destroy() {
595
+ if (this.destroyed) {
596
+ return;
597
+ }
598
+ OsuNative.assertOk("CatchPerformanceCalculator_Destroy", import_osu_native_napi11.default.CatchPerformanceCalculator_Destroy(this.handle));
599
+ this.destroyed = true;
600
+ }
601
+ };
602
+ __name(_CatchPerformanceCalculator, "CatchPerformanceCalculator");
603
+ var CatchPerformanceCalculator = _CatchPerformanceCalculator;
604
+
605
+ // src/calculators/performance/ManiaPerformanceCalculator.ts
606
+ var import_osu_native_napi12 = __toESM(require("@tosuapp/osu-native-napi"));
607
+ var _ManiaPerformanceCalculator = class _ManiaPerformanceCalculator extends NativeHandleOwner {
608
+ static create() {
609
+ const native = new import_osu_native_napi12.default.NativeManiaPerformanceCalculator();
610
+ OsuNative.assertOk("ManiaPerformanceCalculator_Create", import_osu_native_napi12.default.ManiaPerformanceCalculator_Create(native));
611
+ return new _ManiaPerformanceCalculator(native);
612
+ }
613
+ calculate(score, difficulty) {
614
+ this.ensureAlive();
615
+ const out = new import_osu_native_napi12.default.NativeManiaPerformanceAttributes();
616
+ OsuNative.assertOk("ManiaPerformanceCalculator_Calculate", import_osu_native_napi12.default.ManiaPerformanceCalculator_Calculate(this.handle, makeScoreInfo(score), difficulty, out));
617
+ return out;
618
+ }
619
+ destroy() {
620
+ if (this.destroyed) {
621
+ return;
622
+ }
623
+ OsuNative.assertOk("ManiaPerformanceCalculator_Destroy", import_osu_native_napi12.default.ManiaPerformanceCalculator_Destroy(this.handle));
624
+ this.destroyed = true;
625
+ }
626
+ };
627
+ __name(_ManiaPerformanceCalculator, "ManiaPerformanceCalculator");
628
+ var ManiaPerformanceCalculator = _ManiaPerformanceCalculator;
629
+
630
+ // src/calculators/performance/OsuPerformanceCalculator.ts
631
+ var import_osu_native_napi13 = __toESM(require("@tosuapp/osu-native-napi"));
632
+ var _OsuPerformanceCalculator = class _OsuPerformanceCalculator extends NativeHandleOwner {
633
+ static create() {
634
+ const native = new import_osu_native_napi13.default.NativeOsuPerformanceCalculator();
635
+ OsuNative.assertOk("OsuPerformanceCalculator_Create", import_osu_native_napi13.default.OsuPerformanceCalculator_Create(native));
636
+ return new _OsuPerformanceCalculator(native);
637
+ }
638
+ calculate(score, difficulty) {
639
+ this.ensureAlive();
640
+ const out = new import_osu_native_napi13.default.NativeOsuPerformanceAttributes();
641
+ OsuNative.assertOk("OsuPerformanceCalculator_Calculate", import_osu_native_napi13.default.OsuPerformanceCalculator_Calculate(this.handle, makeScoreInfo(score), difficulty, out));
642
+ return out;
643
+ }
644
+ destroy() {
645
+ if (this.destroyed) {
646
+ return;
647
+ }
648
+ OsuNative.assertOk("OsuPerformanceCalculator_Destroy", import_osu_native_napi13.default.OsuPerformanceCalculator_Destroy(this.handle));
649
+ this.destroyed = true;
650
+ }
651
+ };
652
+ __name(_OsuPerformanceCalculator, "OsuPerformanceCalculator");
653
+ var OsuPerformanceCalculator = _OsuPerformanceCalculator;
654
+
655
+ // src/calculators/performance/TaikoPerformanceCalculator.ts
656
+ var import_osu_native_napi14 = __toESM(require("@tosuapp/osu-native-napi"));
657
+ var _TaikoPerformanceCalculator = class _TaikoPerformanceCalculator extends NativeHandleOwner {
658
+ static create() {
659
+ const native = new import_osu_native_napi14.default.NativeTaikoPerformanceCalculator();
660
+ OsuNative.assertOk("TaikoPerformanceCalculator_Create", import_osu_native_napi14.default.TaikoPerformanceCalculator_Create(native));
661
+ return new _TaikoPerformanceCalculator(native);
662
+ }
663
+ calculate(score, difficulty) {
664
+ this.ensureAlive();
665
+ const out = new import_osu_native_napi14.default.NativeTaikoPerformanceAttributes();
666
+ OsuNative.assertOk("TaikoPerformanceCalculator_Calculate", import_osu_native_napi14.default.TaikoPerformanceCalculator_Calculate(this.handle, makeScoreInfo(score), difficulty, out));
667
+ return out;
668
+ }
669
+ destroy() {
670
+ if (this.destroyed) {
671
+ return;
672
+ }
673
+ OsuNative.assertOk("TaikoPerformanceCalculator_Destroy", import_osu_native_napi14.default.TaikoPerformanceCalculator_Destroy(this.handle));
674
+ this.destroyed = true;
675
+ }
676
+ };
677
+ __name(_TaikoPerformanceCalculator, "TaikoPerformanceCalculator");
678
+ var TaikoPerformanceCalculator = _TaikoPerformanceCalculator;
679
+
680
+ // src/factories/DifficultyCalculatorFactory.ts
681
+ var _DifficultyCalculatorFactory = class _DifficultyCalculatorFactory {
682
+ static create(ruleset, beatmap) {
683
+ switch (ruleset.rulesetId) {
684
+ case 0:
685
+ return OsuDifficultyCalculator.create(ruleset, beatmap);
686
+ case 1:
687
+ return TaikoDifficultyCalculator.create(ruleset, beatmap);
688
+ case 2:
689
+ return CatchDifficultyCalculator.create(ruleset, beatmap);
690
+ case 3:
691
+ return ManiaDifficultyCalculator.create(ruleset, beatmap);
692
+ default:
693
+ throw new Error(`Unsupported rulesetId: ${ruleset.rulesetId}`);
694
+ }
695
+ }
696
+ };
697
+ __name(_DifficultyCalculatorFactory, "DifficultyCalculatorFactory");
698
+ var DifficultyCalculatorFactory = _DifficultyCalculatorFactory;
699
+
700
+ // src/factories/PerformanceCalculatorFactory.ts
701
+ var _PerformanceCalculatorFactory = class _PerformanceCalculatorFactory {
702
+ static create(ruleset) {
703
+ switch (ruleset.rulesetId) {
704
+ case 0:
705
+ return OsuPerformanceCalculator.create();
706
+ case 1:
707
+ return TaikoPerformanceCalculator.create();
708
+ case 2:
709
+ return CatchPerformanceCalculator.create();
710
+ case 3:
711
+ return ManiaPerformanceCalculator.create();
712
+ default:
713
+ throw new Error(`Unsupported rulesetId: ${ruleset.rulesetId}`);
714
+ }
715
+ }
716
+ };
717
+ __name(_PerformanceCalculatorFactory, "PerformanceCalculatorFactory");
718
+ var PerformanceCalculatorFactory = _PerformanceCalculatorFactory;
719
+ // Annotate the CommonJS export names for ESM import in node:
720
+ 0 && (module.exports = {
721
+ Beatmap,
722
+ CatchDifficultyCalculator,
723
+ CatchPerformanceCalculator,
724
+ DifficultyCalculatorFactory,
725
+ ManiaDifficultyCalculator,
726
+ ManiaPerformanceCalculator,
727
+ Mod,
728
+ ModsCollection,
729
+ OsuDifficultyCalculator,
730
+ OsuNative,
731
+ OsuNativeError,
732
+ OsuPerformanceCalculator,
733
+ PerformanceCalculatorFactory,
734
+ Ruleset,
735
+ TaikoDifficultyCalculator,
736
+ TaikoPerformanceCalculator
737
+ });