incyclist-services 1.7.26 → 1.7.28

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.
@@ -218,7 +218,8 @@ let DevicesPageService = (() => {
218
218
  enableInterface(i) { }
219
219
  disableInterface(i) { }
220
220
  reconnectInterface(i) { }
221
- refreshInterface(i) { }
221
+ refreshInterface(i) {
222
+ }
222
223
  closeInterfaceSettings() {
223
224
  this.openedInterfaceSettings = undefined;
224
225
  this.interfaceSettingsObserver?.stop();
@@ -310,7 +310,6 @@ const getTotalDistance = (route) => {
310
310
  };
311
311
  exports.getTotalDistance = getTotalDistance;
312
312
  const getRouteHash = (route) => {
313
- console.log('# getRouteHash', 'crypto binding:', getCryptoBinding());
314
313
  const cryptoImpl = getCryptoBinding() ?? require('crypto');
315
314
  let json;
316
315
  if (!route?.points) {
@@ -11,7 +11,7 @@ const route_1 = require("../../base/model/route");
11
11
  const route_2 = require("../../base/utils/route");
12
12
  const db_1 = require("./db");
13
13
  const types_1 = require("./types");
14
- const utils_1 = require("../../../utils");
14
+ const sleep_1 = require("../../../utils/sleep");
15
15
  const valid = (v) => (v !== undefined && v !== null);
16
16
  class ApiError extends Error {
17
17
  _type;
@@ -67,10 +67,12 @@ class RoutesApiLoader extends types_1.Loader {
67
67
  await this.processRouteFromApi(p.value[j], loadDetailRequired);
68
68
  }
69
69
  }
70
- if (loadDetailRequired.length > 0)
70
+ this.loadObserver.emit('loaded');
71
+ if (loadDetailRequired.length > 0) {
71
72
  await this.loadDetails(loadDetailRequired, true);
73
+ }
72
74
  this.loadObserver.emit('done');
73
- await (0, utils_1.waitNextTick)();
75
+ await (0, sleep_1.sleep)(1);
74
76
  this.loadObserver.stop();
75
77
  delete this.loadObserver;
76
78
  }
@@ -111,10 +113,11 @@ class RoutesApiLoader extends types_1.Loader {
111
113
  this.verifyRouteHash(route);
112
114
  }
113
115
  if (!existing) {
114
- if (isComplete)
115
- this.emitRouteAdded(route);
116
- else
117
- items.push({ route, added: true });
116
+ this.emitRouteAdded(route);
117
+ items.push({ route, added: true });
118
+ if (isComplete) {
119
+ this.save(route, false);
120
+ }
118
121
  }
119
122
  else {
120
123
  this.save(route, true);
@@ -123,6 +126,7 @@ class RoutesApiLoader extends types_1.Loader {
123
126
  }
124
127
  }
125
128
  stopLoad() {
129
+ this.loadObserver?.stop();
126
130
  delete this.loadObserver;
127
131
  }
128
132
  getDescriptionFromDB(id) {
@@ -182,7 +186,7 @@ class RoutesApiLoader extends types_1.Loader {
182
186
  });
183
187
  for (const element of success) {
184
188
  const item = element;
185
- this.emitRouteEvents(!item.added, item.route);
189
+ this.emitRouteEvents(item.added === true, item.route);
186
190
  await this.verifyCountry(item.route);
187
191
  this.verifyRouteHash(item.route);
188
192
  if (save)
@@ -67,6 +67,8 @@ const appstate_1 = require("../../appstate");
67
67
  const i18n_1 = require("../../i18n");
68
68
  const clone_1 = __importDefault(require("../../utils/clone"));
69
69
  const SYNC_INTERVAL = 5 * 60 * 1000;
70
+ const PRELOAD_DESKTOP = 20;
71
+ const PRELOAD_MOBILE = 10;
70
72
  let RouteListService = (() => {
71
73
  let _classDecorators = [types_1.Singleton];
72
74
  let _classDescriptor;
@@ -79,6 +81,7 @@ let RouteListService = (() => {
79
81
  let _getAppState_decorators;
80
82
  let _getAppsService_decorators;
81
83
  let _getUnitConverter_decorators;
84
+ let _getBindings_decorators;
82
85
  var RouteListService = class extends _classSuper {
83
86
  static { _classThis = this; }
84
87
  static {
@@ -88,11 +91,13 @@ let RouteListService = (() => {
88
91
  _getAppState_decorators = [decorators_1.Injectable];
89
92
  _getAppsService_decorators = [decorators_1.Injectable];
90
93
  _getUnitConverter_decorators = [decorators_1.Injectable];
94
+ _getBindings_decorators = [decorators_1.Injectable];
91
95
  __esDecorate(this, null, _getUserSettings_decorators, { kind: "method", name: "getUserSettings", static: false, private: false, access: { has: obj => "getUserSettings" in obj, get: obj => obj.getUserSettings }, metadata: _metadata }, null, _instanceExtraInitializers);
92
96
  __esDecorate(this, null, _getRouteSyncFactory_decorators, { kind: "method", name: "getRouteSyncFactory", static: false, private: false, access: { has: obj => "getRouteSyncFactory" in obj, get: obj => obj.getRouteSyncFactory }, metadata: _metadata }, null, _instanceExtraInitializers);
93
97
  __esDecorate(this, null, _getAppState_decorators, { kind: "method", name: "getAppState", static: false, private: false, access: { has: obj => "getAppState" in obj, get: obj => obj.getAppState }, metadata: _metadata }, null, _instanceExtraInitializers);
94
98
  __esDecorate(this, null, _getAppsService_decorators, { kind: "method", name: "getAppsService", static: false, private: false, access: { has: obj => "getAppsService" in obj, get: obj => obj.getAppsService }, metadata: _metadata }, null, _instanceExtraInitializers);
95
99
  __esDecorate(this, null, _getUnitConverter_decorators, { kind: "method", name: "getUnitConverter", static: false, private: false, access: { has: obj => "getUnitConverter" in obj, get: obj => obj.getUnitConverter }, metadata: _metadata }, null, _instanceExtraInitializers);
100
+ __esDecorate(this, null, _getBindings_decorators, { kind: "method", name: "getBindings", static: false, private: false, access: { has: obj => "getBindings" in obj, get: obj => obj.getBindings }, metadata: _metadata }, null, _instanceExtraInitializers);
96
101
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
97
102
  RouteListService = _classThis = _classDescriptor.value;
98
103
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
@@ -321,7 +326,8 @@ let RouteListService = (() => {
321
326
  routes.sort((a, b) => a.title > b.title ? 1 : -1);
322
327
  const units = this.getUnitConverter().getDefaultUnits();
323
328
  if (!filters) {
324
- return { routes, filters, observer: this.observer, units };
329
+ const cards = routes.map(r => this.getCard(r.id));
330
+ return { routes, cards, filters, observer: this.observer, units };
325
331
  }
326
332
  if (!filters.includeDeleted)
327
333
  routes = routes.filter(r => !r?.isDeleted);
@@ -494,6 +500,9 @@ let RouteListService = (() => {
494
500
  }
495
501
  }
496
502
  preload() {
503
+ if (this.preloadObserver) {
504
+ return this.preloadObserver;
505
+ }
497
506
  try {
498
507
  this.logEvent({ message: 'preload route list' });
499
508
  if (!this.isStillLoading()) {
@@ -504,23 +513,26 @@ let RouteListService = (() => {
504
513
  this.initialized = true;
505
514
  this.logEvent({ message: 'preload route list completed' });
506
515
  this.updateRepoStats();
507
- this.emitLists('loaded', { log: true });
508
- process.nextTick(() => { delete this.preloadObserver; });
516
+ (0, sleep_1.sleep)(0).then(() => {
517
+ delete this.preloadObserver;
518
+ this.emit('load-done');
519
+ this.emitLists('loaded', { log: true });
520
+ });
509
521
  })
510
522
  .catch((err) => {
511
523
  this.logError(err, 'preload');
512
524
  this.preloadObserver?.stop();
513
- process.nextTick(() => { delete this.preloadObserver; });
514
- })
515
- .finally(() => {
516
- this.emit('load-done');
525
+ (0, sleep_1.sleep)(0).then(() => {
526
+ delete this.preloadObserver;
527
+ this.emit('load-done');
528
+ });
517
529
  });
518
530
  }
519
531
  }
520
532
  catch (err) {
521
533
  this.logError(err, 'preload');
522
534
  this.preloadObserver?.stop();
523
- process.nextTick(() => { delete this.preloadObserver; });
535
+ (0, sleep_1.sleep)(0).then(() => { delete this.preloadObserver; });
524
536
  }
525
537
  return this.preloadObserver;
526
538
  }
@@ -780,8 +792,9 @@ let RouteListService = (() => {
780
792
  }
781
793
  addRoute(route, source = 'system') {
782
794
  this.routes.push(route);
783
- if (route.description?.isDeleted)
795
+ if (route.description?.isDeleted) {
784
796
  return;
797
+ }
785
798
  if (!route.description?.isDeleted) {
786
799
  if (source === 'user') {
787
800
  this.logEvent({ message: 'route added', route: route.description.title, source: route.description.source });
@@ -845,8 +858,9 @@ let RouteListService = (() => {
845
858
  .catch(() => {
846
859
  });
847
860
  };
861
+ const maxPreload = this.isMobile() ? PRELOAD_MOBILE : PRELOAD_DESKTOP;
848
862
  cards.forEach(card => {
849
- if (!card || promises.length > 19)
863
+ if (!card || promises.length > maxPreload)
850
864
  return;
851
865
  if (!card.getRouteData()) {
852
866
  promises.push(loadDetails(card));
@@ -977,6 +991,7 @@ let RouteListService = (() => {
977
991
  const update = this.update.bind(this);
978
992
  observer.on('route.added', add);
979
993
  observer.on('route.updated', update);
994
+ observer.on('loaded', done);
980
995
  observer.on('done', done);
981
996
  });
982
997
  }
@@ -1256,6 +1271,14 @@ let RouteListService = (() => {
1256
1271
  }
1257
1272
  }
1258
1273
  }
1274
+ isMobile() {
1275
+ const { appInfo } = this.getBindings();
1276
+ if (!appInfo) {
1277
+ return false;
1278
+ }
1279
+ const channel = appInfo?.getChannel();
1280
+ return channel === 'mobile';
1281
+ }
1259
1282
  getUserSettings() {
1260
1283
  return (0, settings_1.useUserSettings)();
1261
1284
  }
@@ -1271,6 +1294,9 @@ let RouteListService = (() => {
1271
1294
  getUnitConverter() {
1272
1295
  return (0, i18n_1.useUnitConverter)();
1273
1296
  }
1297
+ getBindings() {
1298
+ return (0, api_1.getBindings)();
1299
+ }
1274
1300
  reset() {
1275
1301
  super.reset();
1276
1302
  if (this.syncInfo?.iv) {
@@ -94,13 +94,13 @@ let RoutesPageService = (() => {
94
94
  if (this.serviceState.observer) {
95
95
  this.startEventListener();
96
96
  }
97
+ (0, sleep_1.sleep)(5).then(() => {
98
+ this.updatePageDisplay();
99
+ });
97
100
  };
98
101
  if (service.isStillLoading()) {
99
102
  service.once('load-done', () => {
100
103
  start();
101
- (0, sleep_1.sleep)(5).then(() => {
102
- this.updatePageDisplay();
103
- });
104
104
  });
105
105
  }
106
106
  else {
@@ -215,7 +215,8 @@ let DevicesPageService = (() => {
215
215
  enableInterface(i) { }
216
216
  disableInterface(i) { }
217
217
  reconnectInterface(i) { }
218
- refreshInterface(i) { }
218
+ refreshInterface(i) {
219
+ }
219
220
  closeInterfaceSettings() {
220
221
  this.openedInterfaceSettings = undefined;
221
222
  this.interfaceSettingsObserver?.stop();
@@ -291,7 +291,6 @@ export const getTotalDistance = (route) => {
291
291
  return route.points[route.points.length - 1].routeDistance;
292
292
  };
293
293
  export const getRouteHash = (route) => {
294
- console.log('# getRouteHash', 'crypto binding:', getCryptoBinding());
295
294
  const cryptoImpl = getCryptoBinding() ?? require('crypto');
296
295
  let json;
297
296
  if (!route?.points) {
@@ -5,7 +5,7 @@ import { Route } from "../../base/model/route";
5
5
  import { addDetails } from "../../base/utils/route";
6
6
  import { RoutesDbLoader } from "./db";
7
7
  import { Loader } from "./types";
8
- import { waitNextTick } from "../../../utils";
8
+ import { sleep } from "../../../utils/sleep";
9
9
  const valid = (v) => (v !== undefined && v !== null);
10
10
  class ApiError extends Error {
11
11
  _type;
@@ -61,10 +61,12 @@ export class RoutesApiLoader extends Loader {
61
61
  await this.processRouteFromApi(p.value[j], loadDetailRequired);
62
62
  }
63
63
  }
64
- if (loadDetailRequired.length > 0)
64
+ this.loadObserver.emit('loaded');
65
+ if (loadDetailRequired.length > 0) {
65
66
  await this.loadDetails(loadDetailRequired, true);
67
+ }
66
68
  this.loadObserver.emit('done');
67
- await waitNextTick();
69
+ await sleep(1);
68
70
  this.loadObserver.stop();
69
71
  delete this.loadObserver;
70
72
  }
@@ -105,10 +107,11 @@ export class RoutesApiLoader extends Loader {
105
107
  this.verifyRouteHash(route);
106
108
  }
107
109
  if (!existing) {
108
- if (isComplete)
109
- this.emitRouteAdded(route);
110
- else
111
- items.push({ route, added: true });
110
+ this.emitRouteAdded(route);
111
+ items.push({ route, added: true });
112
+ if (isComplete) {
113
+ this.save(route, false);
114
+ }
112
115
  }
113
116
  else {
114
117
  this.save(route, true);
@@ -117,6 +120,7 @@ export class RoutesApiLoader extends Loader {
117
120
  }
118
121
  }
119
122
  stopLoad() {
123
+ this.loadObserver?.stop();
120
124
  delete this.loadObserver;
121
125
  }
122
126
  getDescriptionFromDB(id) {
@@ -176,7 +180,7 @@ export class RoutesApiLoader extends Loader {
176
180
  });
177
181
  for (const element of success) {
178
182
  const item = element;
179
- this.emitRouteEvents(!item.added, item.route);
183
+ this.emitRouteEvents(item.added === true, item.route);
180
184
  await this.verifyCountry(item.route);
181
185
  this.verifyRouteHash(item.route);
182
186
  if (save)
@@ -61,6 +61,8 @@ import { useAppState } from "../../appstate";
61
61
  import { useUnitConverter } from "../../i18n";
62
62
  import clone from "../../utils/clone";
63
63
  const SYNC_INTERVAL = 5 * 60 * 1000;
64
+ const PRELOAD_DESKTOP = 20;
65
+ const PRELOAD_MOBILE = 10;
64
66
  let RouteListService = (() => {
65
67
  let _classDecorators = [Singleton];
66
68
  let _classDescriptor;
@@ -73,6 +75,7 @@ let RouteListService = (() => {
73
75
  let _getAppState_decorators;
74
76
  let _getAppsService_decorators;
75
77
  let _getUnitConverter_decorators;
78
+ let _getBindings_decorators;
76
79
  var RouteListService = class extends _classSuper {
77
80
  static { _classThis = this; }
78
81
  static {
@@ -82,11 +85,13 @@ let RouteListService = (() => {
82
85
  _getAppState_decorators = [Injectable];
83
86
  _getAppsService_decorators = [Injectable];
84
87
  _getUnitConverter_decorators = [Injectable];
88
+ _getBindings_decorators = [Injectable];
85
89
  __esDecorate(this, null, _getUserSettings_decorators, { kind: "method", name: "getUserSettings", static: false, private: false, access: { has: obj => "getUserSettings" in obj, get: obj => obj.getUserSettings }, metadata: _metadata }, null, _instanceExtraInitializers);
86
90
  __esDecorate(this, null, _getRouteSyncFactory_decorators, { kind: "method", name: "getRouteSyncFactory", static: false, private: false, access: { has: obj => "getRouteSyncFactory" in obj, get: obj => obj.getRouteSyncFactory }, metadata: _metadata }, null, _instanceExtraInitializers);
87
91
  __esDecorate(this, null, _getAppState_decorators, { kind: "method", name: "getAppState", static: false, private: false, access: { has: obj => "getAppState" in obj, get: obj => obj.getAppState }, metadata: _metadata }, null, _instanceExtraInitializers);
88
92
  __esDecorate(this, null, _getAppsService_decorators, { kind: "method", name: "getAppsService", static: false, private: false, access: { has: obj => "getAppsService" in obj, get: obj => obj.getAppsService }, metadata: _metadata }, null, _instanceExtraInitializers);
89
93
  __esDecorate(this, null, _getUnitConverter_decorators, { kind: "method", name: "getUnitConverter", static: false, private: false, access: { has: obj => "getUnitConverter" in obj, get: obj => obj.getUnitConverter }, metadata: _metadata }, null, _instanceExtraInitializers);
94
+ __esDecorate(this, null, _getBindings_decorators, { kind: "method", name: "getBindings", static: false, private: false, access: { has: obj => "getBindings" in obj, get: obj => obj.getBindings }, metadata: _metadata }, null, _instanceExtraInitializers);
90
95
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
91
96
  RouteListService = _classThis = _classDescriptor.value;
92
97
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
@@ -315,7 +320,8 @@ let RouteListService = (() => {
315
320
  routes.sort((a, b) => a.title > b.title ? 1 : -1);
316
321
  const units = this.getUnitConverter().getDefaultUnits();
317
322
  if (!filters) {
318
- return { routes, filters, observer: this.observer, units };
323
+ const cards = routes.map(r => this.getCard(r.id));
324
+ return { routes, cards, filters, observer: this.observer, units };
319
325
  }
320
326
  if (!filters.includeDeleted)
321
327
  routes = routes.filter(r => !r?.isDeleted);
@@ -488,6 +494,9 @@ let RouteListService = (() => {
488
494
  }
489
495
  }
490
496
  preload() {
497
+ if (this.preloadObserver) {
498
+ return this.preloadObserver;
499
+ }
491
500
  try {
492
501
  this.logEvent({ message: 'preload route list' });
493
502
  if (!this.isStillLoading()) {
@@ -498,23 +507,26 @@ let RouteListService = (() => {
498
507
  this.initialized = true;
499
508
  this.logEvent({ message: 'preload route list completed' });
500
509
  this.updateRepoStats();
501
- this.emitLists('loaded', { log: true });
502
- process.nextTick(() => { delete this.preloadObserver; });
510
+ sleep(0).then(() => {
511
+ delete this.preloadObserver;
512
+ this.emit('load-done');
513
+ this.emitLists('loaded', { log: true });
514
+ });
503
515
  })
504
516
  .catch((err) => {
505
517
  this.logError(err, 'preload');
506
518
  this.preloadObserver?.stop();
507
- process.nextTick(() => { delete this.preloadObserver; });
508
- })
509
- .finally(() => {
510
- this.emit('load-done');
519
+ sleep(0).then(() => {
520
+ delete this.preloadObserver;
521
+ this.emit('load-done');
522
+ });
511
523
  });
512
524
  }
513
525
  }
514
526
  catch (err) {
515
527
  this.logError(err, 'preload');
516
528
  this.preloadObserver?.stop();
517
- process.nextTick(() => { delete this.preloadObserver; });
529
+ sleep(0).then(() => { delete this.preloadObserver; });
518
530
  }
519
531
  return this.preloadObserver;
520
532
  }
@@ -774,8 +786,9 @@ let RouteListService = (() => {
774
786
  }
775
787
  addRoute(route, source = 'system') {
776
788
  this.routes.push(route);
777
- if (route.description?.isDeleted)
789
+ if (route.description?.isDeleted) {
778
790
  return;
791
+ }
779
792
  if (!route.description?.isDeleted) {
780
793
  if (source === 'user') {
781
794
  this.logEvent({ message: 'route added', route: route.description.title, source: route.description.source });
@@ -839,8 +852,9 @@ let RouteListService = (() => {
839
852
  .catch(() => {
840
853
  });
841
854
  };
855
+ const maxPreload = this.isMobile() ? PRELOAD_MOBILE : PRELOAD_DESKTOP;
842
856
  cards.forEach(card => {
843
- if (!card || promises.length > 19)
857
+ if (!card || promises.length > maxPreload)
844
858
  return;
845
859
  if (!card.getRouteData()) {
846
860
  promises.push(loadDetails(card));
@@ -971,6 +985,7 @@ let RouteListService = (() => {
971
985
  const update = this.update.bind(this);
972
986
  observer.on('route.added', add);
973
987
  observer.on('route.updated', update);
988
+ observer.on('loaded', done);
974
989
  observer.on('done', done);
975
990
  });
976
991
  }
@@ -1250,6 +1265,14 @@ let RouteListService = (() => {
1250
1265
  }
1251
1266
  }
1252
1267
  }
1268
+ isMobile() {
1269
+ const { appInfo } = this.getBindings();
1270
+ if (!appInfo) {
1271
+ return false;
1272
+ }
1273
+ const channel = appInfo?.getChannel();
1274
+ return channel === 'mobile';
1275
+ }
1253
1276
  getUserSettings() {
1254
1277
  return useUserSettings();
1255
1278
  }
@@ -1265,6 +1288,9 @@ let RouteListService = (() => {
1265
1288
  getUnitConverter() {
1266
1289
  return useUnitConverter();
1267
1290
  }
1291
+ getBindings() {
1292
+ return getBindings();
1293
+ }
1268
1294
  reset() {
1269
1295
  super.reset();
1270
1296
  if (this.syncInfo?.iv) {
@@ -91,13 +91,13 @@ let RoutesPageService = (() => {
91
91
  if (this.serviceState.observer) {
92
92
  this.startEventListener();
93
93
  }
94
+ sleep(5).then(() => {
95
+ this.updatePageDisplay();
96
+ });
94
97
  };
95
98
  if (service.isStillLoading()) {
96
99
  service.once('load-done', () => {
97
100
  start();
98
- sleep(5).then(() => {
99
- this.updatePageDisplay();
100
- });
101
101
  });
102
102
  }
103
103
  else {
@@ -151,11 +151,13 @@ export declare class RouteListService extends IncyclistService implements IRoute
151
151
  protected getAllSearchCards(): RouteCard[];
152
152
  protected handleConfigChanges(): void;
153
153
  protected onRouteStatsUpdate(stats: ActiveRideCount[]): void;
154
+ protected isMobile(): boolean;
154
155
  protected getUserSettings(): import("../../settings").UserSettingsService;
155
156
  protected getRouteSyncFactory(): RouteSyncFactory;
156
157
  protected getAppState(): import("../../appstate").AppStateService;
157
- getAppsService(): import("../../apps").AppsService;
158
- getUnitConverter(): import("../../i18n").UnitConverterService;
158
+ protected getAppsService(): import("../../apps").AppsService;
159
+ protected getUnitConverter(): import("../../i18n").UnitConverterService;
160
+ protected getBindings(): import("../../api").IncyclistBindings;
159
161
  reset(): void;
160
162
  }
161
163
  export declare const useRouteList: () => RouteListService;
@@ -1,5 +1,6 @@
1
1
  export type * from './page/types';
2
2
  export type * from './list/types';
3
+ export type * from './list/cards/types';
3
4
  export type * from './base/api/types';
4
5
  export type * from './base/types';
5
6
  export type RouteImportStatus = 'idle' | 'parsing' | 'error' | 'success';
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "incyclist-services",
3
- "version": "1.7.26",
3
+ "version": "1.7.28",
4
4
  "peerDependencies": {
5
5
  "gd-eventlog": "^0.1.27"
6
6
  },
7
7
  "dependencies": {
8
- "axios": "^1.13.5",
9
- "incyclist-devices": "^3.0.9",
8
+ "axios": "^1.13.6",
9
+ "incyclist-devices": "^3.0.10",
10
10
  "promise.any": "^2.0.6",
11
11
  "semver": "^7.7.4",
12
12
  "tcx-builder": "^1.1.1",
@@ -17,13 +17,13 @@
17
17
  "@serialport/binding-mock": "^10.2.2",
18
18
  "@serialport/bindings-interface": "^1.2.2",
19
19
  "@types/jest": "^30.0.0",
20
- "@types/node": "^25.3.0",
21
- "@typescript-eslint/eslint-plugin": "^8.56.0",
22
- "@typescript-eslint/parser": "^8.56.0",
20
+ "@types/node": "^25.5.0",
21
+ "@typescript-eslint/eslint-plugin": "^8.57.0",
22
+ "@typescript-eslint/parser": "^8.57.0",
23
23
  "dotenv": "^17.3.1",
24
- "eslint": "^10.0.1",
24
+ "eslint": "^10.0.3",
25
25
  "formdata-node": "^6.0.3",
26
- "jest": "^30.2.0",
26
+ "jest": "^30.3.0",
27
27
  "jsdoc": "^4.0.5",
28
28
  "ts-jest": "^29.4.6",
29
29
  "typedoc": "^0.28.17",