mobility-toolbox-js 2.0.0-beta.35 → 2.0.0-beta.38

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.
Files changed (98) hide show
  1. package/README.md +14 -8
  2. package/api/RealtimeAPI.test.d.ts +2 -0
  3. package/api/RealtimeAPI.test.d.ts.map +1 -0
  4. package/api/RealtimeAPI.test.js +67 -0
  5. package/api/RoutingAPI.d.ts +6 -2
  6. package/api/RoutingAPI.d.ts.map +1 -1
  7. package/api/RoutingAPI.test.d.ts +2 -0
  8. package/api/RoutingAPI.test.d.ts.map +1 -0
  9. package/api/RoutingAPI.test.js +29 -0
  10. package/api/StopsAPI.test.d.ts +2 -0
  11. package/api/StopsAPI.test.d.ts.map +1 -0
  12. package/api/StopsAPI.test.js +26 -0
  13. package/common/api/HttpAPI.d.ts +4 -4
  14. package/common/api/HttpAPI.d.ts.map +1 -1
  15. package/common/api/HttpAPI.test.d.ts +2 -0
  16. package/common/api/HttpAPI.test.d.ts.map +1 -0
  17. package/common/api/HttpAPI.test.js +54 -0
  18. package/common/api/WebSocketAPI.d.ts +6 -2
  19. package/common/api/WebSocketAPI.d.ts.map +1 -1
  20. package/common/api/WebSocketAPI.js +57 -31
  21. package/common/api/WebSocketAPI.test.d.ts +2 -0
  22. package/common/api/WebSocketAPI.test.d.ts.map +1 -0
  23. package/common/api/WebSocketAPI.test.js +380 -0
  24. package/common/controls/Control.test.d.ts +2 -0
  25. package/common/controls/Control.test.d.ts.map +1 -0
  26. package/common/controls/Control.test.js +89 -0
  27. package/common/layers/Layer.test.d.ts +2 -0
  28. package/common/layers/Layer.test.d.ts.map +1 -0
  29. package/common/layers/Layer.test.js +137 -0
  30. package/common/mixins/UserInteractionsLayerMixin.test.d.ts +2 -0
  31. package/common/mixins/UserInteractionsLayerMixin.test.d.ts.map +1 -0
  32. package/common/mixins/UserInteractionsLayerMixin.test.js +214 -0
  33. package/common/styles/realtimeDefaultStyle.d.ts.map +1 -1
  34. package/common/styles/realtimeDefaultStyle.js +2 -4
  35. package/common/styles/realtimeSimpleStyle.js +1 -1
  36. package/common/utils/createTrackerFilters.test.d.ts +2 -0
  37. package/common/utils/createTrackerFilters.test.d.ts.map +1 -0
  38. package/common/utils/createTrackerFilters.test.js +79 -0
  39. package/common/utils/getMapboxMapCopyrights.test.d.ts +2 -0
  40. package/common/utils/getMapboxMapCopyrights.test.d.ts.map +1 -0
  41. package/common/utils/getMapboxMapCopyrights.test.js +40 -0
  42. package/common/utils/removeDuplicate.test.d.ts +2 -0
  43. package/common/utils/removeDuplicate.test.d.ts.map +1 -0
  44. package/common/utils/removeDuplicate.test.js +19 -0
  45. package/common/utils/timeUtils.test.d.ts +2 -0
  46. package/common/utils/timeUtils.test.d.ts.map +1 -0
  47. package/common/utils/timeUtils.test.js +10 -0
  48. package/common/utils/trackerConfig.test.d.ts +2 -0
  49. package/common/utils/trackerConfig.test.d.ts.map +1 -0
  50. package/common/utils/trackerConfig.test.js +23 -0
  51. package/index.d.ts +4 -0
  52. package/mapbox/index.d.ts +1 -0
  53. package/mapbox/layers/Layer.test.d.ts +2 -0
  54. package/mapbox/layers/Layer.test.d.ts.map +1 -0
  55. package/mapbox/layers/Layer.test.js +204 -0
  56. package/mapbox/layers/RealtimeLayer.test.d.ts +2 -0
  57. package/mapbox/layers/RealtimeLayer.test.d.ts.map +1 -0
  58. package/mapbox/layers/RealtimeLayer.test.js +10 -0
  59. package/mbt.js +56 -32
  60. package/mbt.js.map +2 -2
  61. package/mbt.min.js +10 -10
  62. package/mbt.min.js.map +2 -2
  63. package/ol/controls/CopyrightControl.test.d.ts +2 -0
  64. package/ol/controls/CopyrightControl.test.d.ts.map +1 -0
  65. package/ol/controls/CopyrightControl.test.js +177 -0
  66. package/ol/controls/RoutingControl.d.ts +2 -1
  67. package/ol/controls/RoutingControl.d.ts.map +1 -1
  68. package/ol/controls/RoutingControl.test.d.ts +2 -0
  69. package/ol/controls/RoutingControl.test.d.ts.map +1 -0
  70. package/ol/controls/RoutingControl.test.js +150 -0
  71. package/ol/controls/StopFinderControl.test.d.ts +2 -0
  72. package/ol/controls/StopFinderControl.test.d.ts.map +1 -0
  73. package/ol/controls/StopFinderControl.test.js +49 -0
  74. package/ol/index.d.ts +1 -0
  75. package/ol/layers/Layer.test.d.ts +2 -0
  76. package/ol/layers/Layer.test.d.ts.map +1 -0
  77. package/ol/layers/Layer.test.js +196 -0
  78. package/ol/layers/MapboxLayer.d.ts.map +1 -1
  79. package/ol/layers/MapboxLayer.js +4 -0
  80. package/ol/layers/MapboxLayer.test.d.ts +2 -0
  81. package/ol/layers/MapboxLayer.test.d.ts.map +1 -0
  82. package/ol/layers/MapboxLayer.test.js +164 -0
  83. package/ol/layers/MapboxStyleLayer.test.d.ts +2 -0
  84. package/ol/layers/MapboxStyleLayer.test.d.ts.map +1 -0
  85. package/ol/layers/MapboxStyleLayer.test.js +232 -0
  86. package/ol/layers/RealtimeLayer.test.d.ts +2 -0
  87. package/ol/layers/RealtimeLayer.test.d.ts.map +1 -0
  88. package/ol/layers/RealtimeLayer.test.js +71 -0
  89. package/ol/layers/RoutingLayer.test.d.ts +2 -0
  90. package/ol/layers/RoutingLayer.test.d.ts.map +1 -0
  91. package/ol/layers/RoutingLayer.test.js +39 -0
  92. package/ol/layers/VectorLayer.test.d.ts +2 -0
  93. package/ol/layers/VectorLayer.test.d.ts.map +1 -0
  94. package/ol/layers/VectorLayer.test.js +87 -0
  95. package/ol/layers/WMSLayer.test.d.ts +2 -0
  96. package/ol/layers/WMSLayer.test.d.ts.map +1 -0
  97. package/ol/layers/WMSLayer.test.js +66 -0
  98. package/package.json +5 -2
@@ -0,0 +1,204 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { Map } from 'maplibre-gl';
11
+ import { toLonLat } from 'ol/proj';
12
+ import Layer from './Layer';
13
+ let map;
14
+ let mapElement;
15
+ describe('Layer', () => {
16
+ beforeEach(() => {
17
+ mapElement = document.createElement('div');
18
+ const { style } = mapElement;
19
+ style.position = 'absolute';
20
+ style.left = '0px';
21
+ style.top = '0px';
22
+ style.width = '400px';
23
+ style.height = '400px';
24
+ mapElement.setAttribute('id', 'map');
25
+ document.body.appendChild(mapElement);
26
+ map = new Map({
27
+ container: document.getElementById('map'),
28
+ style: `path/to/style`,
29
+ center: toLonLat([831634, 5933959]),
30
+ zoom: 9,
31
+ });
32
+ });
33
+ afterEach(() => {
34
+ document.body.removeChild(mapElement);
35
+ });
36
+ test('should initialize.', () => {
37
+ const layer = new Layer({ name: 'Layer' });
38
+ expect(layer).toBeInstanceOf(Layer);
39
+ });
40
+ test('should be visible by default.', () => {
41
+ const layer = new Layer({ name: 'Layer' });
42
+ expect(layer.visible).toBe(true);
43
+ });
44
+ test('should be invisible if defined.', () => {
45
+ const layer = new Layer({ name: 'Layer', visible: false });
46
+ expect(layer.visible).toBe(false);
47
+ });
48
+ test('should be invisible if set.', () => {
49
+ const layer = new Layer({ name: 'Layer' });
50
+ layer.visible = false;
51
+ expect(layer.visible).toBe(false);
52
+ });
53
+ test('should visibility stay unchanged', () => {
54
+ const layer = new Layer({ name: 'Layer', visible: false });
55
+ layer.visible = false;
56
+ expect(layer.visible).toBe(false);
57
+ });
58
+ test('should return its name.', () => {
59
+ const layer = new Layer({ name: 'Layer', visible: false });
60
+ expect(layer.name).toEqual('Layer');
61
+ });
62
+ test('should call terminate on initialization.', () => {
63
+ const layer = new Layer({ name: 'Layer' });
64
+ const spy = jest.spyOn(layer, 'detachFromMap');
65
+ layer.attachToMap(map);
66
+ expect(spy).toHaveBeenCalledTimes(1);
67
+ });
68
+ test('should listen for click/hover events when layer is visible by default then should not when hidden.', () => __awaiter(void 0, void 0, void 0, function* () {
69
+ global.console.error = jest.fn();
70
+ const layer = new Layer({ name: 'Layer' });
71
+ expect(layer.visible).toBe(true);
72
+ const spy = jest.fn();
73
+ const spy2 = jest.fn();
74
+ layer.onHover(spy);
75
+ layer.onClick(spy2);
76
+ layer.attachToMap(map);
77
+ expect(spy).toHaveBeenCalledTimes(0);
78
+ expect(spy2).toHaveBeenCalledTimes(0);
79
+ yield map.fire('mousemove', {
80
+ type: 'mousemove',
81
+ lngLat: { toArray: () => [0, 0] },
82
+ coordinate: [0, 0],
83
+ });
84
+ yield map.fire('click', {
85
+ type: 'click',
86
+ lngLat: { toArray: () => [0, 0] },
87
+ });
88
+ expect(spy).toHaveBeenCalledTimes(1);
89
+ expect(spy2).toHaveBeenCalledTimes(1);
90
+ spy.mockReset();
91
+ spy2.mockReset();
92
+ layer.visible = false;
93
+ yield map.fire('mousemove', {
94
+ type: 'mousemove',
95
+ lngLat: { toArray: () => [0, 0] },
96
+ });
97
+ yield map.fire('click', {
98
+ type: 'click',
99
+ lngLat: { toArray: () => [0, 0] },
100
+ });
101
+ expect(spy).toHaveBeenCalledTimes(0);
102
+ expect(spy2).toHaveBeenCalledTimes(0);
103
+ global.console.error.mockRestore();
104
+ }));
105
+ test('should not listen for click/hover events when layer is not visible by default then should not when visible.', () => __awaiter(void 0, void 0, void 0, function* () {
106
+ global.console.error = jest.fn();
107
+ const layer = new Layer({ name: 'Layer', visible: false });
108
+ expect(layer.visible).toBe(false);
109
+ const spy = jest.fn();
110
+ const spy2 = jest.fn();
111
+ layer.onHover(spy);
112
+ layer.onClick(spy2);
113
+ layer.attachToMap(map);
114
+ expect(spy).toHaveBeenCalledTimes(0);
115
+ expect(spy2).toHaveBeenCalledTimes(0);
116
+ yield map.fire('mousemove', {
117
+ type: 'mousemove',
118
+ lngLat: { toArray: () => [0, 0] },
119
+ coordinate: [0, 0],
120
+ });
121
+ yield map.fire('click', {
122
+ type: 'click',
123
+ lngLat: { toArray: () => [0, 0] },
124
+ });
125
+ expect(spy).toHaveBeenCalledTimes(0);
126
+ expect(spy2).toHaveBeenCalledTimes(0);
127
+ spy.mockReset();
128
+ spy2.mockReset();
129
+ layer.visible = true;
130
+ yield map.fire('mousemove', {
131
+ type: 'mousemove',
132
+ lngLat: { toArray: () => [0, 0] },
133
+ coordinate: [0, 0],
134
+ });
135
+ yield map.fire('click', {
136
+ type: 'click',
137
+ lngLat: { toArray: () => [0, 0] },
138
+ });
139
+ expect(spy).toHaveBeenCalledTimes(1);
140
+ expect(spy2).toHaveBeenCalledTimes(1);
141
+ global.console.error.mockRestore();
142
+ }));
143
+ test('should not listen for click/hover events after layer.detachFromMap()', () => __awaiter(void 0, void 0, void 0, function* () {
144
+ global.console.error = jest.fn();
145
+ const layer = new Layer({ name: 'Layer', visible: true });
146
+ expect(layer.visible).toBe(true);
147
+ const spy = jest.fn();
148
+ const spy2 = jest.fn();
149
+ const spy3 = jest.fn();
150
+ const spy4 = jest.fn();
151
+ layer.onHover(spy);
152
+ layer.onClick(spy2);
153
+ layer.attachToMap(map);
154
+ // Test event after attached to map
155
+ layer.onHover(spy3);
156
+ layer.onClick(spy4);
157
+ expect(spy).toHaveBeenCalledTimes(0);
158
+ expect(spy2).toHaveBeenCalledTimes(0);
159
+ expect(spy3).toHaveBeenCalledTimes(0);
160
+ expect(spy4).toHaveBeenCalledTimes(0);
161
+ yield map.fire('mousemove', {
162
+ type: 'mousemove',
163
+ lngLat: { toArray: () => [0, 0] },
164
+ coordinate: [0, 0],
165
+ });
166
+ yield map.fire('click', {
167
+ type: 'click',
168
+ lngLat: { toArray: () => [0, 0] },
169
+ });
170
+ expect(spy).toHaveBeenCalledTimes(1);
171
+ expect(spy2).toHaveBeenCalledTimes(1);
172
+ expect(spy3).toHaveBeenCalledTimes(1);
173
+ expect(spy4).toHaveBeenCalledTimes(1);
174
+ spy.mockReset();
175
+ spy2.mockReset();
176
+ spy3.mockReset();
177
+ spy4.mockReset();
178
+ layer.detachFromMap();
179
+ yield map.fire('mousemove', {
180
+ type: 'mousemove',
181
+ lngLat: { toArray: () => [0, 0] },
182
+ coordinate: [0, 0],
183
+ });
184
+ yield map.fire('click', {
185
+ type: 'click',
186
+ lngLat: { toArray: () => [0, 0] },
187
+ });
188
+ expect(spy).toHaveBeenCalledTimes(0);
189
+ expect(spy2).toHaveBeenCalledTimes(0);
190
+ expect(spy3).toHaveBeenCalledTimes(0);
191
+ expect(spy4).toHaveBeenCalledTimes(0);
192
+ global.console.error.mockRestore();
193
+ }));
194
+ test('should clone', () => {
195
+ const layer = new Layer({
196
+ name: 'Layer',
197
+ copyrights: ['bar'],
198
+ });
199
+ const clone = layer.clone({ name: 'clone' });
200
+ expect(clone).not.toBe(layer);
201
+ expect(clone.name).toBe('clone');
202
+ expect(clone).toBeInstanceOf(Layer);
203
+ });
204
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RealtimeLayer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RealtimeLayer.test.d.ts","sourceRoot":"","sources":["../../../src/mapbox/layers/RealtimeLayer.test.js"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import RealtimeLayer from './RealtimeLayer';
2
+ let layer;
3
+ describe('RealtimeLayer', () => {
4
+ beforeEach(() => {
5
+ layer = new RealtimeLayer();
6
+ });
7
+ test('should be instanced.', () => {
8
+ expect(layer).toBeInstanceOf(RealtimeLayer);
9
+ });
10
+ });
package/mbt.js CHANGED
@@ -33492,8 +33492,26 @@ uniform ${i3} ${o3} u_${a3};
33492
33492
  send();
33493
33493
  }
33494
33494
  }
33495
+ addEvents(onMessage, onError) {
33496
+ if (this.websocket) {
33497
+ this.websocket.addEventListener("message", onMessage);
33498
+ if (onError) {
33499
+ this.websocket.addEventListener("error", onError);
33500
+ this.websocket.addEventListener("close", onError);
33501
+ }
33502
+ }
33503
+ }
33504
+ removeEvents(onMessage, onError) {
33505
+ if (this.websocket) {
33506
+ this.websocket.removeEventListener("message", onMessage);
33507
+ if (onError) {
33508
+ this.websocket.removeEventListener("error", onError);
33509
+ this.websocket.removeEventListener("close", onError);
33510
+ }
33511
+ }
33512
+ }
33495
33513
  listen(params, cb, errorCb) {
33496
- this.unlisten(params, cb);
33514
+ this.unlisten(params, cb, errorCb);
33497
33515
  const onMessage = (evt) => {
33498
33516
  let data = {};
33499
33517
  try {
@@ -33510,33 +33528,42 @@ uniform ${i3} ${o3} u_${a3};
33510
33528
  }
33511
33529
  });
33512
33530
  };
33513
- if (this.websocket) {
33514
- this.websocket.addEventListener("message", onMessage);
33515
- if (errorCb) {
33516
- this.websocket.addEventListener("error", errorCb);
33517
- this.websocket.addEventListener("close", errorCb);
33518
- }
33519
- }
33531
+ this.addEvents(onMessage, errorCb);
33520
33532
  return { onMessageCb: onMessage, onErrorCb: errorCb };
33521
33533
  }
33522
33534
  unlisten(params, cb) {
33523
- if (!this.websocket) {
33524
- return;
33525
- }
33526
- this.subscriptions.filter((s) => s.params.channel === params.channel && (!cb || s.cb === cb)).forEach(({ onMessageCb, onErrorCb }) => {
33527
- if (this.websocket) {
33528
- this.websocket.removeEventListener("message", onMessageCb);
33529
- if (onErrorCb) {
33530
- this.websocket.removeEventListener("error", onErrorCb);
33531
- this.websocket.removeEventListener("close", onErrorCb);
33532
- }
33533
- }
33535
+ [...this.subscriptions || [], ...this.requests || []].filter((s) => s.params.channel === params.channel && (!cb || s.cb === cb)).forEach(({ onMessageCb, onErrorCb }) => {
33536
+ this.removeEvents(onMessageCb, onErrorCb);
33534
33537
  });
33535
33538
  }
33536
33539
  get(params, cb, errorCb) {
33537
- const reqStr = WebSocketAPI.getRequestString("GET", params);
33538
- this.send(reqStr);
33539
- this.listen(params, cb, errorCb);
33540
+ const requestString = WebSocketAPI.getRequestString("GET", params);
33541
+ this.send(requestString);
33542
+ const once = (callback) => (...args) => {
33543
+ callback(...args);
33544
+ const index2 = this.requests.findIndex((request) => requestString === request.requestString && cb === request.cb);
33545
+ const { onMessageCb: onMessageCb2, onErrorCb: onErrorCb2 } = this.requests[index2];
33546
+ this.removeEvents(onMessageCb2, onErrorCb2);
33547
+ this.requests.splice(index2, 1);
33548
+ };
33549
+ const { onMessageCb, onErrorCb } = this.listen(params, once(cb), once(errorCb));
33550
+ if (!this.requests) {
33551
+ this.requests = [];
33552
+ }
33553
+ const index = this.requests.findIndex((request) => requestString === request.requestString && cb === request.cb);
33554
+ const newReq = {
33555
+ params,
33556
+ requestString,
33557
+ cb,
33558
+ errorCb,
33559
+ onMessageCb,
33560
+ onErrorCb
33561
+ };
33562
+ if (index > -1) {
33563
+ this.requests[index] = newReq;
33564
+ } else {
33565
+ this.requests.push(newReq);
33566
+ }
33540
33567
  }
33541
33568
  subscribe(params, cb, errorCb, quiet = false) {
33542
33569
  const { onMessageCb, onErrorCb } = this.listen(params, cb, errorCb);
@@ -33559,13 +33586,7 @@ uniform ${i3} ${o3} u_${a3};
33559
33586
  unsubscribe(source, cb) {
33560
33587
  const toRemove = this.subscriptions.filter((s) => s.params.channel === source && (!cb || s.cb === cb));
33561
33588
  toRemove.forEach(({ onMessageCb, onErrorCb }) => {
33562
- if (this.websocket) {
33563
- this.websocket.removeEventListener("message", onMessageCb);
33564
- if (onErrorCb) {
33565
- this.websocket.removeEventListener("error", onErrorCb);
33566
- this.websocket.removeEventListener("close", onErrorCb);
33567
- }
33568
- }
33589
+ this.removeEvents(onMessageCb, onErrorCb);
33569
33590
  });
33570
33591
  this.subscriptions = this.subscriptions.filter((s) => s.params.channel !== source || cb && s.cb !== cb);
33571
33592
  if (source && this.subscribed[source] && !this.subscriptions.find((s) => s.params.channel === source) && toRemove.find((subscr) => !subscr.quiet)) {
@@ -35649,7 +35670,7 @@ uniform ${i3} ${o3} u_${a3};
35649
35670
  getTextSize: getTextSize2
35650
35671
  } = options;
35651
35672
  const { zoom, pixelRatio } = viewState;
35652
- let { type, cancelled } = trajectory.properties;
35673
+ let { type } = trajectory.properties;
35653
35674
  const {
35654
35675
  train_id: id,
35655
35676
  line,
@@ -35658,7 +35679,7 @@ uniform ${i3} ${o3} u_${a3};
35658
35679
  operator_provides_realtime_journey: operatorProvidesRealtime
35659
35680
  } = trajectory.properties;
35660
35681
  let { name, text_color: textColor, color } = line || {};
35661
- cancelled = cancelled === true || state === "JOURNEY_CANCELLED";
35682
+ const cancelled = state === "JOURNEY_CANCELLED";
35662
35683
  if (!type) {
35663
35684
  type = "Rail";
35664
35685
  }
@@ -35756,7 +35777,7 @@ uniform ${i3} ${o3} u_${a3};
35756
35777
  var canvas;
35757
35778
  var realtimeSimpleStyle = () => {
35758
35779
  if (!canvas) {
35759
- document.createElement("canvas");
35780
+ canvas = document.createElement("canvas");
35760
35781
  canvas.width = 15;
35761
35782
  canvas.height = 15;
35762
35783
  const ctx = canvas.getContext("2d");
@@ -48271,6 +48292,9 @@ uniform ${i3} ${o3} u_${a3};
48271
48292
  size: [0, 0]
48272
48293
  };
48273
48294
  super.loadMbMap();
48295
+ if (!this.mbMap) {
48296
+ return;
48297
+ }
48274
48298
  this.mbMap.once("load", () => {
48275
48299
  this.mbMap.resize();
48276
48300
  this.copyrights = getMapboxMapCopyrights_default(this.mbMap) || [];