@time2win/t2w 1.4.20 → 1.4.22
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/CHANGELOG.md +8 -0
- package/index.d.ts +2 -0
- package/index.js +127 -106
- package/package.json +1 -1
- package/test.js +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## 1.4.22 - 2025-04-09
|
|
9
|
+
### Added
|
|
10
|
+
wrapper methods for ```getParticipantInfos()``` and ```getIndividualResults()``` which are called by the user, internally the fetch methods will be called (prevents to call getEventData multiple times)
|
|
11
|
+
|
|
12
|
+
## 1.4.21 - 2025-03-13
|
|
13
|
+
### Modified
|
|
14
|
+
```paceBrutto``` ```paceNetto``` ```speedBrutto``` ```speedNetto``` properties to support laps
|
|
15
|
+
|
|
8
16
|
## 1.4.20 - 2025-03-13
|
|
9
17
|
### Added
|
|
10
18
|
```paceBrutto``` ```paceNetto``` ```speedBrutto``` ```speedNetto``` properties for individual result
|
package/index.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export default class Time2WinAPI {
|
|
|
13
13
|
* if no params are given, the events in the next seven days are returned
|
|
14
14
|
* */
|
|
15
15
|
getUpcomingEvents(from?: Date, to?: Date, page?: number): Promise<T2WEventResponse>;
|
|
16
|
+
private fetchIndividualResults;
|
|
17
|
+
private fetchParticipantInfos;
|
|
16
18
|
private getUrl;
|
|
17
19
|
private calculateAge;
|
|
18
20
|
private formatDate;
|
package/index.js
CHANGED
|
@@ -194,116 +194,28 @@ var Time2WinAPI = /** @class */ (function () {
|
|
|
194
194
|
Time2WinAPI.prototype.getIndividualResults = function (eventId, raceId, dataExtra, gender, page) {
|
|
195
195
|
if (page === void 0) { page = 1; }
|
|
196
196
|
return __awaiter(this, void 0, void 0, function () {
|
|
197
|
-
var
|
|
198
|
-
return __generator(this, function (
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
'page_size': _this.pageSize
|
|
206
|
-
};
|
|
207
|
-
fetch(_this.getUrl("results/".concat(eventId, "/individuals"), queryParams))
|
|
208
|
-
.then(function (response) { return __awaiter(_this, void 0, void 0, function () {
|
|
209
|
-
var body, event, _a, _b, _c;
|
|
210
|
-
var _d;
|
|
211
|
-
var _this = this;
|
|
212
|
-
return __generator(this, function (_e) {
|
|
213
|
-
switch (_e.label) {
|
|
214
|
-
case 0: return [4 /*yield*/, response.json()];
|
|
215
|
-
case 1:
|
|
216
|
-
body = _e.sent();
|
|
217
|
-
if (response.status === 403) {
|
|
218
|
-
reject(body);
|
|
219
|
-
return [2 /*return*/];
|
|
220
|
-
}
|
|
221
|
-
return [4 /*yield*/, this.getEventData(eventId, ['splits'])];
|
|
222
|
-
case 2:
|
|
223
|
-
event = _e.sent();
|
|
224
|
-
if (!(body.page < body.page_total)) return [3 /*break*/, 4];
|
|
225
|
-
_b = (_a = (_d = body.list).push).apply;
|
|
226
|
-
_c = [_d];
|
|
227
|
-
return [4 /*yield*/, this.getIndividualResults(eventId, raceId, dataExtra, gender, body.page + 1)];
|
|
228
|
-
case 3:
|
|
229
|
-
_b.apply(_a, _c.concat([(_e.sent()).list]));
|
|
230
|
-
body.page = Math.ceil(body.list.length / body.page_size);
|
|
231
|
-
resolve(body);
|
|
232
|
-
_e.label = 4;
|
|
233
|
-
case 4:
|
|
234
|
-
body.list = body.list.map(function (p) {
|
|
235
|
-
return __assign(__assign({}, p), { birthdate: p.birthdate ? new Date(p.birthdate) : null, racenumNumeric: _this.getNumericBib(p.racenum), speedNetto: _this.calculateSpeed(p, event, 'speed', 'netto') + ' km/h', speedBrutto: _this.calculateSpeed(p, event, 'speed', 'brutto') + ' km/h', paceNetto: _this.calculateSpeed(p, event, 'pace', 'netto') + ' min/km', paceBrutto: _this.calculateSpeed(p, event, 'pace', 'brutto') + ' min/km' });
|
|
236
|
-
});
|
|
237
|
-
resolve(body);
|
|
238
|
-
return [2 /*return*/];
|
|
239
|
-
}
|
|
240
|
-
});
|
|
241
|
-
}); })
|
|
242
|
-
.catch(function (reason) { return reject(reason); });
|
|
243
|
-
})];
|
|
197
|
+
var _a;
|
|
198
|
+
return __generator(this, function (_b) {
|
|
199
|
+
switch (_b.label) {
|
|
200
|
+
case 0:
|
|
201
|
+
_a = this.fetchIndividualResults;
|
|
202
|
+
return [4 /*yield*/, this.getEventData(eventId, ['splits'])];
|
|
203
|
+
case 1: return [2 /*return*/, _a.apply(this, [_b.sent(), raceId, dataExtra, gender, page])];
|
|
204
|
+
}
|
|
244
205
|
});
|
|
245
206
|
});
|
|
246
207
|
};
|
|
247
208
|
Time2WinAPI.prototype.getParticipantInfos = function (eventId, raceId, dataExtra, gender, page) {
|
|
248
209
|
if (page === void 0) { page = 1; }
|
|
249
210
|
return __awaiter(this, void 0, void 0, function () {
|
|
250
|
-
var
|
|
251
|
-
return __generator(this, function (
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
return
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
queryParams = {
|
|
259
|
-
'race_id': raceId || '',
|
|
260
|
-
'data_extra': (dataExtra === null || dataExtra === void 0 ? void 0 : dataExtra.join(',')) || '',
|
|
261
|
-
gender: gender || '',
|
|
262
|
-
page: page,
|
|
263
|
-
'page_size': this.pageSize
|
|
264
|
-
};
|
|
265
|
-
return [4 /*yield*/, this.getEventData(eventId)];
|
|
266
|
-
case 1:
|
|
267
|
-
races = (_a.sent()).races;
|
|
268
|
-
fetch(this.getUrl("/participants/".concat(eventId, "/individuals"), queryParams))
|
|
269
|
-
.then(function (response) { return __awaiter(_this, void 0, void 0, function () {
|
|
270
|
-
var body, _a, _b, _c;
|
|
271
|
-
var _d;
|
|
272
|
-
var _this = this;
|
|
273
|
-
return __generator(this, function (_e) {
|
|
274
|
-
switch (_e.label) {
|
|
275
|
-
case 0: return [4 /*yield*/, response.json()];
|
|
276
|
-
case 1:
|
|
277
|
-
body = _e.sent();
|
|
278
|
-
if (response.status === 403) {
|
|
279
|
-
reject(body);
|
|
280
|
-
return [2 /*return*/];
|
|
281
|
-
}
|
|
282
|
-
if (!body.page_more) return [3 /*break*/, 3];
|
|
283
|
-
_b = (_a = (_d = body.list).push).apply;
|
|
284
|
-
_c = [_d];
|
|
285
|
-
return [4 /*yield*/, this.getParticipantInfos(eventId, raceId, dataExtra, gender, body.page + 1)];
|
|
286
|
-
case 2:
|
|
287
|
-
_b.apply(_a, _c.concat([(_e.sent()).list]));
|
|
288
|
-
body.page_more = false;
|
|
289
|
-
body.page = Math.ceil(body.list.length / body.page_size);
|
|
290
|
-
resolve(body);
|
|
291
|
-
_e.label = 3;
|
|
292
|
-
case 3:
|
|
293
|
-
body.list = body.list.map(function (p) {
|
|
294
|
-
var race = races.find(function (r) { return r.race_id === p.race_id; });
|
|
295
|
-
return __assign(__assign({}, p), { birthdate: p.birthdate ? new Date(p.birthdate) : null, age: p.birthdate && race ? _this.calculateAge(new Date(p.birthdate), race.starttime) : null, year: p.birthdate ? new Date(p.birthdate).getFullYear() : null, order_date: p.order_date ? new Date(p.order_date) : null, racenumNumeric: _this.getNumericBib(p.racenum) });
|
|
296
|
-
});
|
|
297
|
-
resolve(body);
|
|
298
|
-
return [2 /*return*/];
|
|
299
|
-
}
|
|
300
|
-
});
|
|
301
|
-
}); })
|
|
302
|
-
.catch(function (reason) { return reject(reason); });
|
|
303
|
-
return [2 /*return*/];
|
|
304
|
-
}
|
|
305
|
-
});
|
|
306
|
-
}); })];
|
|
211
|
+
var _a;
|
|
212
|
+
return __generator(this, function (_b) {
|
|
213
|
+
switch (_b.label) {
|
|
214
|
+
case 0:
|
|
215
|
+
_a = this.fetchParticipantInfos;
|
|
216
|
+
return [4 /*yield*/, this.getEventData(eventId)];
|
|
217
|
+
case 1: return [2 /*return*/, _a.apply(this, [_b.sent(), raceId, dataExtra, gender, page])];
|
|
218
|
+
}
|
|
307
219
|
});
|
|
308
220
|
});
|
|
309
221
|
};
|
|
@@ -355,6 +267,114 @@ var Time2WinAPI = /** @class */ (function () {
|
|
|
355
267
|
});
|
|
356
268
|
});
|
|
357
269
|
};
|
|
270
|
+
Time2WinAPI.prototype.fetchIndividualResults = function (event, raceId, dataExtra, gender, page) {
|
|
271
|
+
if (page === void 0) { page = 1; }
|
|
272
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
273
|
+
var _this = this;
|
|
274
|
+
return __generator(this, function (_a) {
|
|
275
|
+
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
276
|
+
var queryParams = {
|
|
277
|
+
'race_id': raceId,
|
|
278
|
+
'data_extra': (dataExtra === null || dataExtra === void 0 ? void 0 : dataExtra.join(',')) || '',
|
|
279
|
+
page: page,
|
|
280
|
+
'gender': gender || '',
|
|
281
|
+
'page_size': _this.pageSize
|
|
282
|
+
};
|
|
283
|
+
fetch(_this.getUrl("results/".concat(event.event_id, "/individuals"), queryParams))
|
|
284
|
+
.then(function (response) { return __awaiter(_this, void 0, void 0, function () {
|
|
285
|
+
var body, _a, _b, _c;
|
|
286
|
+
var _d;
|
|
287
|
+
var _this = this;
|
|
288
|
+
var _e;
|
|
289
|
+
return __generator(this, function (_f) {
|
|
290
|
+
switch (_f.label) {
|
|
291
|
+
case 0: return [4 /*yield*/, response.json()];
|
|
292
|
+
case 1:
|
|
293
|
+
body = _f.sent();
|
|
294
|
+
if (response.status === 403) {
|
|
295
|
+
reject(body);
|
|
296
|
+
return [2 /*return*/];
|
|
297
|
+
}
|
|
298
|
+
if (!(body.page < body.page_total)) return [3 /*break*/, 3];
|
|
299
|
+
_b = (_a = (_d = body.list).push).apply;
|
|
300
|
+
_c = [_d];
|
|
301
|
+
return [4 /*yield*/, this.fetchIndividualResults(event, raceId, dataExtra, gender, body.page + 1)];
|
|
302
|
+
case 2:
|
|
303
|
+
_b.apply(_a, _c.concat([(_f.sent()).list]));
|
|
304
|
+
body.page = Math.ceil(body.list.length / body.page_size);
|
|
305
|
+
resolve(body);
|
|
306
|
+
_f.label = 3;
|
|
307
|
+
case 3:
|
|
308
|
+
body.list = (_e = body.list) === null || _e === void 0 ? void 0 : _e.map(function (p) {
|
|
309
|
+
return __assign(__assign({}, p), { birthdate: p.birthdate ? new Date(p.birthdate) : null, racenumNumeric: _this.getNumericBib(p.racenum), speedNetto: _this.calculateSpeed(p, event, 'speed', 'netto') + ' km/h', speedBrutto: _this.calculateSpeed(p, event, 'speed', 'brutto') + ' km/h', paceNetto: _this.calculateSpeed(p, event, 'pace', 'netto') + ' min/km', paceBrutto: _this.calculateSpeed(p, event, 'pace', 'brutto') + ' min/km' });
|
|
310
|
+
});
|
|
311
|
+
resolve(body);
|
|
312
|
+
return [2 /*return*/];
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
}); })
|
|
316
|
+
.catch(function (reason) { return reject(reason); });
|
|
317
|
+
})];
|
|
318
|
+
});
|
|
319
|
+
});
|
|
320
|
+
};
|
|
321
|
+
Time2WinAPI.prototype.fetchParticipantInfos = function (event, raceId, dataExtra, gender, page) {
|
|
322
|
+
if (page === void 0) { page = 1; }
|
|
323
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
324
|
+
var _this = this;
|
|
325
|
+
return __generator(this, function (_a) {
|
|
326
|
+
return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
|
|
327
|
+
var queryParams;
|
|
328
|
+
var _this = this;
|
|
329
|
+
return __generator(this, function (_a) {
|
|
330
|
+
queryParams = {
|
|
331
|
+
'race_id': raceId || '',
|
|
332
|
+
'data_extra': (dataExtra === null || dataExtra === void 0 ? void 0 : dataExtra.join(',')) || '',
|
|
333
|
+
gender: gender || '',
|
|
334
|
+
page: page,
|
|
335
|
+
'page_size': this.pageSize
|
|
336
|
+
};
|
|
337
|
+
fetch(this.getUrl("/participants/".concat(event.event_id, "/individuals"), queryParams))
|
|
338
|
+
.then(function (response) { return __awaiter(_this, void 0, void 0, function () {
|
|
339
|
+
var body, _a, _b, _c;
|
|
340
|
+
var _d;
|
|
341
|
+
var _this = this;
|
|
342
|
+
return __generator(this, function (_e) {
|
|
343
|
+
switch (_e.label) {
|
|
344
|
+
case 0: return [4 /*yield*/, response.json()];
|
|
345
|
+
case 1:
|
|
346
|
+
body = _e.sent();
|
|
347
|
+
if (response.status === 403) {
|
|
348
|
+
reject(body);
|
|
349
|
+
return [2 /*return*/];
|
|
350
|
+
}
|
|
351
|
+
if (!body.page_more) return [3 /*break*/, 3];
|
|
352
|
+
_b = (_a = (_d = body.list).push).apply;
|
|
353
|
+
_c = [_d];
|
|
354
|
+
return [4 /*yield*/, this.fetchParticipantInfos(event, raceId, dataExtra, gender, body.page + 1)];
|
|
355
|
+
case 2:
|
|
356
|
+
_b.apply(_a, _c.concat([(_e.sent()).list]));
|
|
357
|
+
body.page_more = false;
|
|
358
|
+
body.page = Math.ceil(body.list.length / body.page_size);
|
|
359
|
+
resolve(body);
|
|
360
|
+
_e.label = 3;
|
|
361
|
+
case 3:
|
|
362
|
+
body.list = body.list.map(function (p) {
|
|
363
|
+
var race = event.races.find(function (r) { return r.race_id === p.race_id; });
|
|
364
|
+
return __assign(__assign({}, p), { birthdate: p.birthdate ? new Date(p.birthdate) : null, age: p.birthdate && race ? _this.calculateAge(new Date(p.birthdate), race.starttime) : null, year: p.birthdate ? new Date(p.birthdate).getFullYear() : null, order_date: p.order_date ? new Date(p.order_date) : null, racenumNumeric: _this.getNumericBib(p.racenum) });
|
|
365
|
+
});
|
|
366
|
+
resolve(body);
|
|
367
|
+
return [2 /*return*/];
|
|
368
|
+
}
|
|
369
|
+
});
|
|
370
|
+
}); })
|
|
371
|
+
.catch(function (reason) { return reject(reason); });
|
|
372
|
+
return [2 /*return*/];
|
|
373
|
+
});
|
|
374
|
+
}); })];
|
|
375
|
+
});
|
|
376
|
+
});
|
|
377
|
+
};
|
|
358
378
|
Time2WinAPI.prototype.getUrl = function (route, queryParams) {
|
|
359
379
|
var url = this.apiUrl.replace('{{route}}', route);
|
|
360
380
|
if (url.endsWith('/')) {
|
|
@@ -393,18 +413,19 @@ var Time2WinAPI = /** @class */ (function () {
|
|
|
393
413
|
var time = timeType === 'netto' ? p.finishtime_fromchip_ms : p.finishtime_fromgun_ms;
|
|
394
414
|
if (!race || !time)
|
|
395
415
|
return '-';
|
|
416
|
+
var distance = race.distance * (p.laps_count || 1);
|
|
396
417
|
// calculate speed in km/h
|
|
397
418
|
if (returnType === 'speed') {
|
|
398
419
|
// Convert time from milliseconds to hours
|
|
399
420
|
var timeHours = time / (1000 * 60 * 60);
|
|
400
421
|
// Convert distance from meters to kilometers
|
|
401
|
-
var distanceKm =
|
|
422
|
+
var distanceKm = distance / 1000;
|
|
402
423
|
// Calculate speed in km/h
|
|
403
424
|
return (distanceKm / timeHours).toFixed(2).replace('.00', '').replace('.', ',');
|
|
404
425
|
}
|
|
405
426
|
if (returnType === 'pace') {
|
|
406
427
|
// Calculate pace in seconds per km
|
|
407
|
-
var paceSecondsPerKm = (time / 1000) / (
|
|
428
|
+
var paceSecondsPerKm = (time / 1000) / (distance / 1000);
|
|
408
429
|
var paceMinutes = Math.floor(paceSecondsPerKm / 60);
|
|
409
430
|
var paceSeconds = Math.round(paceSecondsPerKm % 60);
|
|
410
431
|
// Format pace as mm:ss/km
|
package/package.json
CHANGED
package/test.js
CHANGED
|
@@ -5,4 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
var index_1 = __importDefault(require("./index"));
|
|
7
7
|
var api = new index_1.default('09f006ca-23ee-44da-bec5-4372580f4113');
|
|
8
|
-
api.getIndividualResults(38, 161).then(
|
|
8
|
+
api.getIndividualResults(38, 161).then(function (res) {
|
|
9
|
+
console.log(res.list[0]);
|
|
10
|
+
});
|