@elite-dangerous-plugin-framework/journal 0.20250914.0 → 0.20260201.1

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/README.md CHANGED
@@ -1,6 +1,84 @@
1
- # Elite Dangerous Journal Schemas
1
+ # edpf-journal
2
2
 
3
3
  This module contains autogenerated Type definitions for the Elite: Dangerous Journal.
4
4
  This uses https://jixxed.github.io/ed-journal-schemas/ as its source of Schemas.
5
5
 
6
6
  Besides the Type definitions, this module contains 2 helper functions which will parse the Journal Entry with either BigInts or regular IEEE 754 64-bit floats for integers.
7
+
8
+ This repository contains the conversion and generator code for https://www.npmjs.com/package/@elite-dangerous-plugin-framework/journal.
9
+
10
+ ## Installation
11
+
12
+ ```sh
13
+ npm install @elite-dangerous-plugin-framework/journal
14
+ pnpm install @elite-dangerous-plugin-framework/journal
15
+ bun install @elite-dangerous-plugin-framework/journal
16
+ # or your preferred package manager
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ ```ts
22
+ import {
23
+ parseWithBigInt,
24
+ parseWithLossyIntegers,
25
+ } from "@elite-dangerous-plugin-framework/journal";
26
+ // if you need type tree-shaking, you can directly import the events individually using their default export.
27
+ // This works for regular and "bi" (bigint) event variant.
28
+ import type SendText from "@elite-dangerous-plugin-framework/journal/events/SendText";
29
+ import type SendTextBI from "@elite-dangerous-plugin-framework/journal/events/bi/SendText";
30
+
31
+ const input = `
32
+ { "timestamp":"2026-02-01T01:08:59Z", "event":"RefuelAll", "Cost":79, "Amount":1.557032 }
33
+ { "timestamp":"2026-02-01T01:08:59Z", "event":"RepairAll", "Cost":23485 }
34
+ { "timestamp":"2026-02-01T01:09:12Z", "event":"Market", "MarketID":3701213952, "StationName":"V8V-86F", "StationType":"FleetCarrier", "CarrierDockingAccess":"all", "StarSystem":"Lysoorb NH-M d7-26" }
35
+ { "timestamp":"2026-02-01T01:12:50Z", "event":"Music", "MusicTrack":"SystemMap" }
36
+ { "timestamp":"2026-02-01T01:13:40Z", "event":"Music", "MusicTrack":"Exploration" }
37
+ { "timestamp":"2026-02-01T01:13:42Z", "event":"Music", "MusicTrack":"GalaxyMap" }
38
+ { "timestamp":"2026-02-01T01:14:05Z", "event":"Music", "MusicTrack":"Exploration" }
39
+ { "timestamp":"2026-02-01T01:14:19Z", "event":"Shutdown" }
40
+ `
41
+ .split("\n")
42
+ .map((e) => e.trim())
43
+ // removing empty lines
44
+ .filter(Boolean)
45
+
46
+ // All non-float numbers are converted to BigInts. Use this if
47
+ // you rely on IDs, as the regular number type is not precise enough
48
+ const parsedWithBigIntSupport = input.map((e) => parseWithBigInt(e)).forEach(e => {
49
+ switch(e.event) {
50
+ // parseWithBigInt / parseWithLossyIntegers returns a JournalEvent_BI / JournalEvent
51
+ // it's event property can be switched on, which will give you strong typing for the relevant event.
52
+ case "WingJoin": ...
53
+ case "WingLeave": ...
54
+ case "WingAdd": ...
55
+ case ...
56
+ ...
57
+ }
58
+ })
59
+ const parsedWithRegularNumbers = input.map((e) => parseWithLossyIntegers(e));
60
+
61
+ function someFunctionThatWantsAMessageSent(msg: SendText | SendTextBI) {
62
+ console.log(
63
+ `You wrote in channel ${msg.To} at ${msg.timestamp}: ${msg.Message} `,
64
+ );
65
+ }
66
+ ```
67
+
68
+ `JournalEvent` and `JournalEvent_BI` combine all events into one. It is essentially a huge Type union.
69
+ All events have two shared properties: `timestamp` and `event`. You can filter on the `event` field to expose the other properties.
70
+ ![Example image showing strong typing](README-src/strongTypingExample.png)
71
+ ![Second example detailling that you do get the event's structure](README-src/strongTypingExample2.png)
72
+
73
+ ## Versioning
74
+
75
+ Other than the other packages that reside in the `@elite-dangerous-plugin-framework` namespace, this package uses calendar-versioning.
76
+
77
+ The Version has the format `0.YYYYMMDD.X` where X is a counter starting at 0 for that specific day in UTC time.
78
+
79
+ ## Contributing
80
+
81
+ Are some journal items incorrect? Then [please contribute upstream](https://jixxed.github.io/ed-journal-schemas/).
82
+ Else, PRs are always welcome.
83
+
84
+ If you have any questions, please don't hesitate to get into contact. Do note you will get a quicker response by contacting via Discord. Ping `wdx` in the [EDCD Discord](https://discord.gg/zQjjutY) for support.
@@ -0,0 +1,24 @@
1
+ /**
2
+ * This file was automatically generated by json-schema-to-typescript.
3
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
4
+ * and run json-schema-to-typescript to regenerate this file.
5
+ */
6
+ type CancelledSquadronApplicationEvent_BI = Event & {
7
+ SquadronID: SquadronID;
8
+ SquadronName: SquadronName;
9
+ };
10
+ /**
11
+ * Timestamp in UTC, ISO 8601
12
+ */
13
+ type Timestamp = string;
14
+ type Event1 = "CancelledSquadronApplication";
15
+ type SquadronID = bigint;
16
+ type SquadronName = string;
17
+ /**
18
+ * Generic Event
19
+ */
20
+ interface Event {
21
+ timestamp: Timestamp;
22
+ event: Event1;
23
+ }
24
+ export default CancelledSquadronApplicationEvent_BI;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * This file was automatically generated by json-schema-to-typescript.
3
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
4
+ * and run json-schema-to-typescript to regenerate this file.
5
+ */
6
+ type CancelledSquadronApplicationEvent = Event & {
7
+ SquadronID: SquadronID;
8
+ SquadronName: SquadronName;
9
+ };
10
+ /**
11
+ * Timestamp in UTC, ISO 8601
12
+ */
13
+ type Timestamp = string;
14
+ type Event1 = "CancelledSquadronApplication";
15
+ type SquadronID = number;
16
+ type SquadronName = string;
17
+ /**
18
+ * Generic Event
19
+ */
20
+ interface Event {
21
+ timestamp: Timestamp;
22
+ event: Event1;
23
+ }
24
+ export default CancelledSquadronApplicationEvent;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * This file was automatically generated by json-schema-to-typescript.
3
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
4
+ * and run json-schema-to-typescript to regenerate this file.
5
+ */
6
+ /**
7
+ * When written: upon completing a colonisation construction
8
+ */
9
+ type CompleteConstructionEvent_BI = Event;
10
+ /**
11
+ * Timestamp in UTC, ISO 8601
12
+ */
13
+ type Timestamp = string;
14
+ type Event1 = "CompleteConstruction";
15
+ /**
16
+ * Generic Event
17
+ */
18
+ interface Event {
19
+ timestamp: Timestamp;
20
+ event: Event1;
21
+ }
22
+ export default CompleteConstructionEvent_BI;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * This file was automatically generated by json-schema-to-typescript.
3
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
4
+ * and run json-schema-to-typescript to regenerate this file.
5
+ */
6
+ /**
7
+ * When written: upon completing a colonisation construction
8
+ */
9
+ type CompleteConstructionEvent = Event;
10
+ /**
11
+ * Timestamp in UTC, ISO 8601
12
+ */
13
+ type Timestamp = string;
14
+ type Event1 = "CompleteConstruction";
15
+ /**
16
+ * Generic Event
17
+ */
18
+ interface Event {
19
+ timestamp: Timestamp;
20
+ event: Event1;
21
+ }
22
+ export default CompleteConstructionEvent;
@@ -15,7 +15,7 @@ type DockedEvent_BI = Event & {
15
15
  StarSystem: StarSystem;
16
16
  SystemAddress: SystemAddress;
17
17
  MarketID: MarketID;
18
- StationFaction: StationFaction;
18
+ StationFaction?: StationFaction;
19
19
  StationGovernment: StationGovernment;
20
20
  StationGovernment_Localised?: StationGovernment_Localised;
21
21
  StationServices: StationServices;
@@ -15,7 +15,7 @@ type DockedEvent = Event & {
15
15
  StarSystem: StarSystem;
16
16
  SystemAddress: SystemAddress;
17
17
  MarketID: MarketID;
18
- StationFaction: StationFaction;
18
+ StationFaction?: StationFaction;
19
19
  StationGovernment: StationGovernment;
20
20
  StationGovernment_Localised?: StationGovernment_Localised;
21
21
  StationServices: StationServices;
@@ -4,7 +4,7 @@
4
4
  * and run json-schema-to-typescript to regenerate this file.
5
5
  */
6
6
  /**
7
- * When written: when receiving salary payment from a power
7
+ * When written: when receiving merits from a power
8
8
  */
9
9
  type PowerplayMeritsEvent_BI = Event & {
10
10
  Power: Power;
@@ -4,7 +4,7 @@
4
4
  * and run json-schema-to-typescript to regenerate this file.
5
5
  */
6
6
  /**
7
- * When written: when receiving salary payment from a power
7
+ * When written: when receiving merits from a power
8
8
  */
9
9
  type PowerplayMeritsEvent = Event & {
10
10
  Power: Power;
@@ -4,7 +4,7 @@
4
4
  * and run json-schema-to-typescript to regenerate this file.
5
5
  */
6
6
  /**
7
- * When written: when receiving salary payment from a power
7
+ * When written: when ranking up with a power
8
8
  */
9
9
  type PowerplayRankEvent_BI = Event & {
10
10
  Power: Power;
@@ -4,7 +4,7 @@
4
4
  * and run json-schema-to-typescript to regenerate this file.
5
5
  */
6
6
  /**
7
- * When written: when receiving salary payment from a power
7
+ * When written: when ranking up with a power
8
8
  */
9
9
  type PowerplayRankEvent = Event & {
10
10
  Power: Power;
@@ -39,6 +39,7 @@ type ScanEvent_BI = Event & {
39
39
  AxialTilt?: AxialTilt;
40
40
  WasDiscovered: WasDiscovered;
41
41
  WasMapped: WasMapped;
42
+ WasFootfalled?: WasFootfalled;
42
43
  StarType?: StarType;
43
44
  Subclass?: Subclass;
44
45
  StellarMass?: StellarMass;
@@ -195,6 +196,7 @@ type WasDiscovered = boolean;
195
196
  * Written for Star/Planet/Moon
196
197
  */
197
198
  type WasMapped = boolean;
199
+ type WasFootfalled = boolean;
198
200
  /**
199
201
  * Written for Star
200
202
  */
@@ -39,6 +39,7 @@ type ScanEvent = Event & {
39
39
  AxialTilt?: AxialTilt;
40
40
  WasDiscovered: WasDiscovered;
41
41
  WasMapped: WasMapped;
42
+ WasFootfalled?: WasFootfalled;
42
43
  StarType?: StarType;
43
44
  Subclass?: Subclass;
44
45
  StellarMass?: StellarMass;
@@ -195,6 +196,7 @@ type WasDiscovered = boolean;
195
196
  * Written for Star/Planet/Moon
196
197
  */
197
198
  type WasMapped = boolean;
199
+ type WasFootfalled = boolean;
198
200
  /**
199
201
  * Written for Star
200
202
  */
@@ -14,6 +14,7 @@ type ScanOrganicEvent_BI = Event & {
14
14
  Species_Localised?: Species_Localised;
15
15
  Variant?: Variant;
16
16
  Variant_Localised?: Variant_Localised;
17
+ WasLogged?: WasLogged;
17
18
  SystemAddress: SystemAddress;
18
19
  Body: Body;
19
20
  };
@@ -29,6 +30,7 @@ type Species = string;
29
30
  type Species_Localised = string;
30
31
  type Variant = string;
31
32
  type Variant_Localised = string;
33
+ type WasLogged = boolean;
32
34
  type SystemAddress = bigint;
33
35
  type Body = bigint;
34
36
  /**
@@ -14,6 +14,7 @@ type ScanOrganicEvent = Event & {
14
14
  Species_Localised?: Species_Localised;
15
15
  Variant?: Variant;
16
16
  Variant_Localised?: Variant_Localised;
17
+ WasLogged?: WasLogged;
17
18
  SystemAddress: SystemAddress;
18
19
  Body: Body;
19
20
  };
@@ -29,6 +30,7 @@ type Species = string;
29
30
  type Species_Localised = string;
30
31
  type Variant = string;
31
32
  type Variant_Localised = string;
33
+ type WasLogged = boolean;
32
34
  type SystemAddress = number;
33
35
  type Body = number;
34
36
  /**
@@ -8,6 +8,7 @@
8
8
  */
9
9
  type SendTextEvent_BI = Event & {
10
10
  To: To;
11
+ To_Localised?: To_Localised;
11
12
  Message: Message;
12
13
  Sent: Sent;
13
14
  };
@@ -17,6 +18,10 @@ type SendTextEvent_BI = Event & {
17
18
  type Timestamp = string;
18
19
  type Event1 = "SendText";
19
20
  type To = string;
21
+ /**
22
+ * Unclear under which conditions this field is present, but it sometimes is.
23
+ */
24
+ type To_Localised = string;
20
25
  type Message = string;
21
26
  type Sent = boolean;
22
27
  /**
@@ -8,6 +8,7 @@
8
8
  */
9
9
  type SendTextEvent = Event & {
10
10
  To: To;
11
+ To_Localised?: To_Localised;
11
12
  Message: Message;
12
13
  Sent: Sent;
13
14
  };
@@ -17,6 +18,10 @@ type SendTextEvent = Event & {
17
18
  type Timestamp = string;
18
19
  type Event1 = "SendText";
19
20
  type To = string;
21
+ /**
22
+ * Unclear under which conditions this field is present, but it sometimes is.
23
+ */
24
+ type To_Localised = string;
20
25
  type Message = string;
21
26
  type Sent = boolean;
22
27
  /**
@@ -0,0 +1,24 @@
1
+ /**
2
+ * This file was automatically generated by json-schema-to-typescript.
3
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
4
+ * and run json-schema-to-typescript to regenerate this file.
5
+ */
6
+ type SquadronApplicationApprovedEvent_BI = Event & {
7
+ SquadronID: SquadronID;
8
+ SquadronName: SquadronName;
9
+ };
10
+ /**
11
+ * Timestamp in UTC, ISO 8601
12
+ */
13
+ type Timestamp = string;
14
+ type Event1 = "SquadronApplicationApproved";
15
+ type SquadronID = bigint;
16
+ type SquadronName = string;
17
+ /**
18
+ * Generic Event
19
+ */
20
+ interface Event {
21
+ timestamp: Timestamp;
22
+ event: Event1;
23
+ }
24
+ export default SquadronApplicationApprovedEvent_BI;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * This file was automatically generated by json-schema-to-typescript.
3
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
4
+ * and run json-schema-to-typescript to regenerate this file.
5
+ */
6
+ type SquadronApplicationApprovedEvent = Event & {
7
+ SquadronID: SquadronID;
8
+ SquadronName: SquadronName;
9
+ };
10
+ /**
11
+ * Timestamp in UTC, ISO 8601
12
+ */
13
+ type Timestamp = string;
14
+ type Event1 = "SquadronApplicationApproved";
15
+ type SquadronID = number;
16
+ type SquadronName = string;
17
+ /**
18
+ * Generic Event
19
+ */
20
+ interface Event {
21
+ timestamp: Timestamp;
22
+ event: Event1;
23
+ }
24
+ export default SquadronApplicationApprovedEvent;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * This file was automatically generated by json-schema-to-typescript.
3
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
4
+ * and run json-schema-to-typescript to regenerate this file.
5
+ */
6
+ type SquadronApplicationRejectedEvent_BI = Event & {
7
+ SquadronID: SquadronID;
8
+ SquadronName: SquadronName;
9
+ };
10
+ /**
11
+ * Timestamp in UTC, ISO 8601
12
+ */
13
+ type Timestamp = string;
14
+ type Event1 = "SquadronApplicationRejected";
15
+ type SquadronID = bigint;
16
+ type SquadronName = string;
17
+ /**
18
+ * Generic Event
19
+ */
20
+ interface Event {
21
+ timestamp: Timestamp;
22
+ event: Event1;
23
+ }
24
+ export default SquadronApplicationRejectedEvent_BI;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * This file was automatically generated by json-schema-to-typescript.
3
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
4
+ * and run json-schema-to-typescript to regenerate this file.
5
+ */
6
+ type SquadronApplicationRejectedEvent = Event & {
7
+ SquadronID: SquadronID;
8
+ SquadronName: SquadronName;
9
+ };
10
+ /**
11
+ * Timestamp in UTC, ISO 8601
12
+ */
13
+ type Timestamp = string;
14
+ type Event1 = "SquadronApplicationRejected";
15
+ type SquadronID = number;
16
+ type SquadronName = string;
17
+ /**
18
+ * Generic Event
19
+ */
20
+ interface Event {
21
+ timestamp: Timestamp;
22
+ event: Event1;
23
+ }
24
+ export default SquadronApplicationRejectedEvent;
@@ -35,21 +35,116 @@ type StatusEvent_BI = Event & {
35
35
  */
36
36
  type Timestamp = string;
37
37
  type Event1 = "Status";
38
+ /**
39
+ * Flags:
40
+ * Bit Value Hex Meaning
41
+ * 0 1 0000 0001 Docked, (on a landing pad)
42
+ * 1 2 0000 0002 Landed, (on planet surface)
43
+ * 2 4 0000 0004 Landing Gear Down
44
+ * 3 8 0000 0008 Shields Up
45
+ * 4 16 0000 0010 Supercruise
46
+ * 5 32 0000 0020 FlightAssist Off
47
+ * 6 64 0000 0040 Hardpoints Deployed
48
+ * 7 128 0000 0080 In Wing
49
+ * 8 256 0000 0100 LightsOn
50
+ * 9 512 0000 0200 Cargo Scoop Deployed
51
+ * 10 1024 0000 0400 Silent Running,
52
+ * 11 2048 0000 0800 Scooping Fuel
53
+ * 12 4096 0000 1000 Srv Handbrake
54
+ * 13 8192 0000 2000 Srv using Turret view
55
+ * 14 16384 0000 4000 Srv Turret retracted (close to ship)
56
+ * 15 32768 0000 8000 Srv DriveAssist
57
+ * 16 65536 0001 0000 Fsd MassLocked
58
+ * 17 131072 0002 0000 Fsd Charging
59
+ * 18 262144 0004 0000 Fsd Cooldown
60
+ * 19 524288 0008 0000 Low Fuel ( < 25% )
61
+ * 20 1048576 0010 0000 Over Heating ( > 100% )
62
+ * 21 2097152 0020 0000 Has Lat Long
63
+ * 22 4194304 0040 0000 IsInDanger
64
+ * 23 8388608 0080 0000 Being Interdicted
65
+ * 24 16777216 0100 0000 In MainShip
66
+ * 25 33554432 0200 0000 In Fighter
67
+ * 26 67108864 0400 0000 In SRV
68
+ * 27 134217728 0800 0000 Hud in Analysis mode
69
+ * 28 268435456 1000 0000 Night Vision
70
+ * 29 536870912 2000 0000 Altitude from Average radius
71
+ * 30 1073741824 4000 0000 fsdJump
72
+ * 31 2147483648 8000 0000 srvHighBeam
73
+ */
38
74
  type Flags = bigint;
75
+ /**
76
+ * an array of 3 integers representing energy distribution (in half-pips)
77
+ */
39
78
  type Pips = number[];
40
79
  type FireGroup = bigint;
41
80
  type FuelMain = number;
42
81
  type FuelReservoir = number;
82
+ /**
83
+ * the selected GUI screen
84
+ * 0 NoFocus
85
+ * 1 InternalPanel (right hand side)
86
+ * 2 ExternalPanel (left hand side)
87
+ * 3 CommsPanel (top)
88
+ * 4 RolePanel (bottom)
89
+ * 5 StationServices
90
+ * 6 GalaxyMap
91
+ * 7 SystemMap
92
+ * 8 Orrery
93
+ * 9 FSS mode
94
+ * 10 SAA mode
95
+ * 11 Codex
96
+ */
43
97
  type GuiFocus = bigint;
98
+ /**
99
+ * if on or near a planet
100
+ * The latitude or longitude need to change by 0.02 degrees to trigger an update when flying, or by 0.0005 degrees when in the SRV. If the bit29 is set, the altitude value is based on the planet’s average radius (used at higher altitudes). If the bit29 is not set, the Altitude value is based on a raycast to the actual surface below the ship/srv
101
+ */
44
102
  type Latitude = number;
103
+ /**
104
+ * if on or near a planet
105
+ * The latitude or longitude need to change by 0.02 degrees to trigger an update when flying, or by 0.0005 degrees when in the SRV. If the bit29 is set, the altitude value is based on the planet’s average radius (used at higher altitudes). If the bit29 is not set, the Altitude value is based on a raycast to the actual surface below the ship/srv
106
+ */
45
107
  type Longitude = number;
46
108
  type Heading = bigint;
47
109
  type Altitude = bigint;
110
+ /**
111
+ * Flags2:
112
+ * Bit Value Hex Meaning
113
+ * 0 1 0000 0001 OnFoot
114
+ * 1 2 0000 0002 InTaxi (or dropship/shuttle)
115
+ * 2 4 0000 0004 InMulticrew (ie in someone else’s ship)
116
+ * 3 8 0000 0008 OnFootInStation
117
+ * 4 16 0000 0010 OnFootOnPlanet
118
+ * 5 32 0000 0020 AimDownSight
119
+ * 6 64 0000 0040 LowOxygen
120
+ * 7 128 0000 0080 LowHealth
121
+ * 8 256 0000 0100 Cold
122
+ * 9 512 0000 0200 Hot
123
+ * 10 1024 0000 0400 VeryCold
124
+ * 11 2048 0000 0800 VeryHot
125
+ * 12 4096 0000 1000 Glide Mode
126
+ * 13 8192 0000 2000 OnFootInHangar
127
+ * 14 16384 0000 4000 OnFootSocialSpace
128
+ * 15 32768 0000 8000 OnFootExterior
129
+ * 16 65536 0001 0001 BreathableAtmosphere
130
+ * 17 131072 0002 0000 Telepresence Multicrew
131
+ * 18 262144 0004 0000 Physical Multicrew
132
+ * 19 524288 0008 0000 Fsd hyperdrive charging
133
+ * 20 1048576 0010 0000 Supercruise Overcharge
134
+ * 21 2097152 0020 0000 Supercruise Assist
135
+ * 22 4194304 0040 0000 NPC Crew Active
136
+ */
48
137
  type Flags2 = bigint;
49
138
  type Cargo = number;
50
139
  type LegalState = string;
51
140
  type Balance = bigint;
141
+ /**
142
+ * value range: 0.0 - 1.0
143
+ */
52
144
  type Oxygen = number;
145
+ /**
146
+ * value range: 0.0 - 1.0
147
+ */
53
148
  type Health = number;
54
149
  type Temperature = number;
55
150
  type SelectedWeapon = string;
@@ -60,6 +155,9 @@ type Name = string;
60
155
  type Name_Localised = string;
61
156
  type PlanetRadius = number;
62
157
  type SelectedWeapon_Localised = string;
158
+ /**
159
+ * relative to 1G
160
+ */
63
161
  type Gravity = number;
64
162
  /**
65
163
  * Generic Event