build(deps-dev): apply updates
[e-mobility-charging-stations-simulator.git] / src / utils / MessageChannelUtils.ts
1 import type { CircularBuffer } from 'mnemonist'
2
3 import type { ChargingStation } from '../charging-station/index.js'
4 import {
5 type ChargingStationData,
6 type ChargingStationWorkerMessage,
7 ChargingStationWorkerMessageEvents,
8 type Statistics,
9 type TimestampedData
10 } from '../types/index.js'
11 import {
12 buildChargingStationAutomaticTransactionGeneratorConfiguration,
13 buildConnectorsStatus,
14 buildEvsesStatus,
15 OutputFormat
16 } from './ChargingStationConfigurationUtils.js'
17
18 export const buildAddedMessage = (
19 chargingStation: ChargingStation
20 ): ChargingStationWorkerMessage<ChargingStationData> => {
21 return {
22 event: ChargingStationWorkerMessageEvents.added,
23 data: buildChargingStationDataPayload(chargingStation)
24 }
25 }
26
27 export const buildDeletedMessage = (
28 chargingStation: ChargingStation
29 ): ChargingStationWorkerMessage<ChargingStationData> => {
30 return {
31 event: ChargingStationWorkerMessageEvents.deleted,
32 data: buildChargingStationDataPayload(chargingStation)
33 }
34 }
35
36 export const buildStartedMessage = (
37 chargingStation: ChargingStation
38 ): ChargingStationWorkerMessage<ChargingStationData> => {
39 return {
40 event: ChargingStationWorkerMessageEvents.started,
41 data: buildChargingStationDataPayload(chargingStation)
42 }
43 }
44
45 export const buildStoppedMessage = (
46 chargingStation: ChargingStation
47 ): ChargingStationWorkerMessage<ChargingStationData> => {
48 return {
49 event: ChargingStationWorkerMessageEvents.stopped,
50 data: buildChargingStationDataPayload(chargingStation)
51 }
52 }
53
54 export const buildUpdatedMessage = (
55 chargingStation: ChargingStation
56 ): ChargingStationWorkerMessage<ChargingStationData> => {
57 return {
58 event: ChargingStationWorkerMessageEvents.updated,
59 data: buildChargingStationDataPayload(chargingStation)
60 }
61 }
62
63 export const buildPerformanceStatisticsMessage = (
64 statistics: Statistics
65 ): ChargingStationWorkerMessage<Statistics> => {
66 const statisticsData = [...statistics.statisticsData].map(([key, value]) => {
67 value.measurementTimeSeries = (
68 value.measurementTimeSeries as CircularBuffer<TimestampedData>
69 ).toArray() as TimestampedData[]
70 return [key, value]
71 })
72 return {
73 event: ChargingStationWorkerMessageEvents.performanceStatistics,
74 data: {
75 id: statistics.id,
76 name: statistics.name,
77 uri: statistics.uri,
78 createdAt: statistics.createdAt,
79 updatedAt: statistics.updatedAt,
80 statisticsData
81 }
82 }
83 }
84
85 const buildChargingStationDataPayload = (chargingStation: ChargingStation): ChargingStationData => {
86 return {
87 started: chargingStation.started,
88 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
89 stationInfo: chargingStation.stationInfo!,
90 connectors: buildConnectorsStatus(chargingStation),
91 evses: buildEvsesStatus(chargingStation, OutputFormat.worker),
92 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
93 ocppConfiguration: chargingStation.ocppConfiguration!,
94 supervisionUrl: chargingStation.wsConnectionUrl.href,
95 wsState: chargingStation.wsConnection?.readyState,
96 bootNotificationResponse: chargingStation.bootNotificationResponse,
97 ...(chargingStation.automaticTransactionGenerator != null && {
98 automaticTransactionGenerator:
99 buildChargingStationAutomaticTransactionGeneratorConfiguration(chargingStation)
100 })
101 }
102 }