@its-c10/dis-codec 0.1.0
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 +86 -0
- package/dist/binary/BinaryReader.d.ts +21 -0
- package/dist/binary/BinaryReader.js +92 -0
- package/dist/binary/BinaryWriter.d.ts +24 -0
- package/dist/binary/BinaryWriter.js +88 -0
- package/dist/binary.d.ts +36 -0
- package/dist/binary.js +144 -0
- package/dist/codecs/common/decodeEntityId.d.ts +3 -0
- package/dist/codecs/common/decodeEntityId.js +7 -0
- package/dist/codecs/common/encodeEntityId.d.ts +3 -0
- package/dist/codecs/common/encodeEntityId.js +5 -0
- package/dist/codecs/entityId.d.ts +10 -0
- package/dist/codecs/entityId.js +12 -0
- package/dist/core/entityId.d.ts +14 -0
- package/dist/core/entityId.js +14 -0
- package/dist/core/eventId.d.ts +12 -0
- package/dist/core/eventId.js +14 -0
- package/dist/dis/clockTime.d.ts +14 -0
- package/dist/dis/clockTime.js +10 -0
- package/dist/dis7/constants.d.ts +41 -0
- package/dist/dis7/constants.js +41 -0
- package/dist/dis7/createEntityPdu.d.ts +13 -0
- package/dist/dis7/createEntityPdu.js +17 -0
- package/dist/dis7/electromagneticEmissionPdu.d.ts +72 -0
- package/dist/dis7/electromagneticEmissionPdu.js +133 -0
- package/dist/dis7/entityStatePdu.d.ts +80 -0
- package/dist/dis7/entityStatePdu.js +149 -0
- package/dist/dis7/index.d.ts +12 -0
- package/dist/dis7/index.js +12 -0
- package/dist/dis7/pduHeader.d.ts +18 -0
- package/dist/dis7/pduHeader.js +22 -0
- package/dist/dis7/removeEntityPdu.d.ts +13 -0
- package/dist/dis7/removeEntityPdu.js +17 -0
- package/dist/dis7/startResumePdu.d.ts +16 -0
- package/dist/dis7/startResumePdu.js +22 -0
- package/dist/dis7/stopFreezePdu.d.ts +21 -0
- package/dist/dis7/stopFreezePdu.js +26 -0
- package/dist/dis7/transmitterPdu.d.ts +110 -0
- package/dist/dis7/transmitterPdu.js +200 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +5 -0
- package/dist/types/EntityId.d.ts +6 -0
- package/dist/types/EntityId.js +1 -0
- package/package.json +32 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { decodeEntityId, encodeEntityId } from "../core/entityId.js";
|
|
2
|
+
import { decodeClockTime, encodeClockTime } from "../dis/clockTime.js";
|
|
3
|
+
import { decodePduHeader, encodePduHeader } from "./pduHeader.js";
|
|
4
|
+
export function decodeStopFreezePdu(reader) {
|
|
5
|
+
return {
|
|
6
|
+
header: decodePduHeader(reader),
|
|
7
|
+
originatingId: decodeEntityId(reader),
|
|
8
|
+
receivingId: decodeEntityId(reader),
|
|
9
|
+
realWorldTime: decodeClockTime(reader),
|
|
10
|
+
reason: reader.readUint8(),
|
|
11
|
+
frozenBehavior: reader.readUint8(),
|
|
12
|
+
padding: reader.readUint16(),
|
|
13
|
+
requestId: reader.readUint32(),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export function encodeStopFreezePdu(writer, pdu) {
|
|
17
|
+
encodePduHeader(writer, pdu.header);
|
|
18
|
+
encodeEntityId(writer, pdu.originatingId);
|
|
19
|
+
encodeEntityId(writer, pdu.receivingId);
|
|
20
|
+
encodeClockTime(writer, pdu.realWorldTime);
|
|
21
|
+
writer.writeUint8(pdu.reason);
|
|
22
|
+
writer.writeUint8(pdu.frozenBehavior);
|
|
23
|
+
writer.writeUint16(pdu.padding);
|
|
24
|
+
writer.writeUint32(pdu.requestId);
|
|
25
|
+
writer.patchUint16(8, writer.getOffset());
|
|
26
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { BinaryReader } from "../binary/BinaryReader.js";
|
|
2
|
+
import type { BinaryWriter } from "../binary/BinaryWriter.js";
|
|
3
|
+
import type { EntityId } from "../core/entityId.js";
|
|
4
|
+
import type { PduHeader } from "./pduHeader.js";
|
|
5
|
+
/** Antenna location (X, Y, Z float64). */
|
|
6
|
+
export interface Vector3Double {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
z: number;
|
|
10
|
+
}
|
|
11
|
+
/** Relative antenna location (x, y, z float32). */
|
|
12
|
+
export interface Vector3Float {
|
|
13
|
+
x: number;
|
|
14
|
+
y: number;
|
|
15
|
+
z: number;
|
|
16
|
+
}
|
|
17
|
+
/** Radio Type record (64 bits). Table 103. */
|
|
18
|
+
export interface RadioType {
|
|
19
|
+
/** 8-bit enumeration. */
|
|
20
|
+
entityKind: number;
|
|
21
|
+
/** 8-bit enumeration. */
|
|
22
|
+
domain: number;
|
|
23
|
+
/** 16-bit enumeration. */
|
|
24
|
+
country: number;
|
|
25
|
+
/** 8-bit enumeration. */
|
|
26
|
+
category: number;
|
|
27
|
+
/** 8-bit enumeration. */
|
|
28
|
+
subcategory: number;
|
|
29
|
+
/** 8-bit enumeration. */
|
|
30
|
+
specific: number;
|
|
31
|
+
/** 8-bit enumeration. */
|
|
32
|
+
extra: number;
|
|
33
|
+
}
|
|
34
|
+
/** Modulation type (64-bit record: 4 × 16-bit). */
|
|
35
|
+
export interface ModulationType {
|
|
36
|
+
spreadSpectrum: number;
|
|
37
|
+
majorModulation: number;
|
|
38
|
+
detail: number;
|
|
39
|
+
radioSystem: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Beam Antenna Pattern record (320 bits). Table 31.
|
|
43
|
+
*/
|
|
44
|
+
export interface BeamAntennaPattern {
|
|
45
|
+
/** Beam direction: psi, theta, phi (radians, float32). */
|
|
46
|
+
beamDirection: {
|
|
47
|
+
psi: number;
|
|
48
|
+
theta: number;
|
|
49
|
+
phi: number;
|
|
50
|
+
};
|
|
51
|
+
azimuthBeamwidth: number;
|
|
52
|
+
elevationBeamwidth: number;
|
|
53
|
+
/** 8-bit enumeration. */
|
|
54
|
+
referenceSystem: number;
|
|
55
|
+
eZ: number;
|
|
56
|
+
eX: number;
|
|
57
|
+
phase: number;
|
|
58
|
+
}
|
|
59
|
+
/** Antenna pattern length in octets for Beam Antenna Pattern. */
|
|
60
|
+
export declare const BEAM_ANTENNA_PATTERN_LENGTH = 40;
|
|
61
|
+
/** Variable Transmitter Parameters record (variable length). */
|
|
62
|
+
export interface VariableTransmitterParameter {
|
|
63
|
+
/** 32-bit enumeration. */
|
|
64
|
+
recordType: number;
|
|
65
|
+
/** Record length in octets (6 + K + P). */
|
|
66
|
+
recordLength: number;
|
|
67
|
+
/** Record-specific fields + padding (recordLength - 6 octets). */
|
|
68
|
+
data: Uint8Array;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Transmitter PDU (Table 176).
|
|
72
|
+
* Fixed part 832 bits (104 bytes), then M octets modulation parameters, A octets antenna pattern, then N variable transmitter parameter records.
|
|
73
|
+
*/
|
|
74
|
+
export interface TransmitterPdu {
|
|
75
|
+
header: PduHeader;
|
|
76
|
+
/** Radio Reference ID (same layout as EntityId). */
|
|
77
|
+
radioReferenceId: EntityId;
|
|
78
|
+
radioNumber: number;
|
|
79
|
+
/** Radio Type record (Table 103). */
|
|
80
|
+
radioType: RadioType;
|
|
81
|
+
/** 8-bit enumeration. */
|
|
82
|
+
transmitState: number;
|
|
83
|
+
/** 8-bit enumeration. */
|
|
84
|
+
inputSource: number;
|
|
85
|
+
numberOfVariableTransmitterParameterRecords: number;
|
|
86
|
+
antennaLocation: Vector3Double;
|
|
87
|
+
relativeAntennaLocation: Vector3Float;
|
|
88
|
+
/** 16-bit enumeration. */
|
|
89
|
+
antennaPatternType: number;
|
|
90
|
+
/** Antenna pattern length in octets (A). */
|
|
91
|
+
antennaPatternLength: number;
|
|
92
|
+
/** 64-bit unsigned integer (e.g. frequency in Hz). */
|
|
93
|
+
frequency: bigint;
|
|
94
|
+
transmitFrequencyBandwidth: number;
|
|
95
|
+
power: number;
|
|
96
|
+
modulationType: ModulationType;
|
|
97
|
+
/** 16-bit enumeration. */
|
|
98
|
+
cryptoSystem: number;
|
|
99
|
+
/** 16-bit record. */
|
|
100
|
+
cryptoKeyId: number;
|
|
101
|
+
/** Length of modulation parameters in octets (M). */
|
|
102
|
+
lengthOfModulationParameters: number;
|
|
103
|
+
/** Modulation parameters (M octets). */
|
|
104
|
+
modulationParameters: Uint8Array;
|
|
105
|
+
/** Antenna pattern (e.g. Beam Antenna Pattern, Table 31). */
|
|
106
|
+
antennaPattern: BeamAntennaPattern;
|
|
107
|
+
variableTransmitterParameters: VariableTransmitterParameter[];
|
|
108
|
+
}
|
|
109
|
+
export declare function decodeTransmitterPdu(reader: BinaryReader): TransmitterPdu;
|
|
110
|
+
export declare function encodeTransmitterPdu(writer: BinaryWriter, pdu: TransmitterPdu): void;
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { decodeEntityId, encodeEntityId } from "../core/entityId.js";
|
|
2
|
+
import { decodePduHeader, encodePduHeader } from "./pduHeader.js";
|
|
3
|
+
/** Antenna pattern length in octets for Beam Antenna Pattern. */
|
|
4
|
+
export const BEAM_ANTENNA_PATTERN_LENGTH = 40;
|
|
5
|
+
function decodeRadioType(reader) {
|
|
6
|
+
return {
|
|
7
|
+
entityKind: reader.readUint8(),
|
|
8
|
+
domain: reader.readUint8(),
|
|
9
|
+
country: reader.readUint16(),
|
|
10
|
+
category: reader.readUint8(),
|
|
11
|
+
subcategory: reader.readUint8(),
|
|
12
|
+
specific: reader.readUint8(),
|
|
13
|
+
extra: reader.readUint8(),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function encodeRadioType(writer, r) {
|
|
17
|
+
writer.writeUint8(r.entityKind);
|
|
18
|
+
writer.writeUint8(r.domain);
|
|
19
|
+
writer.writeUint16(r.country);
|
|
20
|
+
writer.writeUint8(r.category);
|
|
21
|
+
writer.writeUint8(r.subcategory);
|
|
22
|
+
writer.writeUint8(r.specific);
|
|
23
|
+
writer.writeUint8(r.extra);
|
|
24
|
+
}
|
|
25
|
+
function decodeVector3Double(reader) {
|
|
26
|
+
return {
|
|
27
|
+
x: reader.readFloat64(),
|
|
28
|
+
y: reader.readFloat64(),
|
|
29
|
+
z: reader.readFloat64(),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function encodeVector3Double(writer, v) {
|
|
33
|
+
writer.writeFloat64(v.x);
|
|
34
|
+
writer.writeFloat64(v.y);
|
|
35
|
+
writer.writeFloat64(v.z);
|
|
36
|
+
}
|
|
37
|
+
function decodeVector3Float(reader) {
|
|
38
|
+
return {
|
|
39
|
+
x: reader.readFloat32(),
|
|
40
|
+
y: reader.readFloat32(),
|
|
41
|
+
z: reader.readFloat32(),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function encodeVector3Float(writer, v) {
|
|
45
|
+
writer.writeFloat32(v.x);
|
|
46
|
+
writer.writeFloat32(v.y);
|
|
47
|
+
writer.writeFloat32(v.z);
|
|
48
|
+
}
|
|
49
|
+
function decodeModulationType(reader) {
|
|
50
|
+
return {
|
|
51
|
+
spreadSpectrum: reader.readUint16(),
|
|
52
|
+
majorModulation: reader.readUint16(),
|
|
53
|
+
detail: reader.readUint16(),
|
|
54
|
+
radioSystem: reader.readUint16(),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function encodeModulationType(writer, m) {
|
|
58
|
+
writer.writeUint16(m.spreadSpectrum);
|
|
59
|
+
writer.writeUint16(m.majorModulation);
|
|
60
|
+
writer.writeUint16(m.detail);
|
|
61
|
+
writer.writeUint16(m.radioSystem);
|
|
62
|
+
}
|
|
63
|
+
function decodeBeamAntennaPattern(reader) {
|
|
64
|
+
const beamDirection = {
|
|
65
|
+
psi: reader.readFloat32(),
|
|
66
|
+
theta: reader.readFloat32(),
|
|
67
|
+
phi: reader.readFloat32(),
|
|
68
|
+
};
|
|
69
|
+
const azimuthBeamwidth = reader.readFloat32();
|
|
70
|
+
const elevationBeamwidth = reader.readFloat32();
|
|
71
|
+
const referenceSystem = reader.readUint8();
|
|
72
|
+
reader.readUint8(); // padding 8
|
|
73
|
+
reader.readUint16(); // padding 16
|
|
74
|
+
const eZ = reader.readFloat32();
|
|
75
|
+
const eX = reader.readFloat32();
|
|
76
|
+
const phase = reader.readFloat32();
|
|
77
|
+
reader.readUint32(); // padding 32
|
|
78
|
+
return {
|
|
79
|
+
beamDirection,
|
|
80
|
+
azimuthBeamwidth,
|
|
81
|
+
elevationBeamwidth,
|
|
82
|
+
referenceSystem,
|
|
83
|
+
eZ,
|
|
84
|
+
eX,
|
|
85
|
+
phase,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function encodeBeamAntennaPattern(writer, a) {
|
|
89
|
+
writer.writeFloat32(a.beamDirection.psi);
|
|
90
|
+
writer.writeFloat32(a.beamDirection.theta);
|
|
91
|
+
writer.writeFloat32(a.beamDirection.phi);
|
|
92
|
+
writer.writeFloat32(a.azimuthBeamwidth);
|
|
93
|
+
writer.writeFloat32(a.elevationBeamwidth);
|
|
94
|
+
writer.writeUint8(a.referenceSystem);
|
|
95
|
+
writer.writeUint8(0); // padding 8
|
|
96
|
+
writer.writeUint16(0); // padding 16
|
|
97
|
+
writer.writeFloat32(a.eZ);
|
|
98
|
+
writer.writeFloat32(a.eX);
|
|
99
|
+
writer.writeFloat32(a.phase);
|
|
100
|
+
writer.writeUint32(0); // padding 32
|
|
101
|
+
}
|
|
102
|
+
function decodeVariableTransmitterParameter(reader) {
|
|
103
|
+
const recordType = reader.readUint32();
|
|
104
|
+
const recordLength = reader.readUint16();
|
|
105
|
+
const dataLength = recordLength - 6;
|
|
106
|
+
const data = dataLength > 0 ? reader.readBytes(dataLength) : new Uint8Array(0);
|
|
107
|
+
return {
|
|
108
|
+
recordType,
|
|
109
|
+
recordLength,
|
|
110
|
+
data,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function encodeVariableTransmitterParameter(writer, v) {
|
|
114
|
+
writer.writeUint32(v.recordType);
|
|
115
|
+
writer.writeUint16(v.recordLength);
|
|
116
|
+
if (v.data.length > 0) {
|
|
117
|
+
writer.writeBytes(v.data);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
export function decodeTransmitterPdu(reader) {
|
|
121
|
+
const header = decodePduHeader(reader);
|
|
122
|
+
const radioReferenceId = decodeEntityId(reader);
|
|
123
|
+
const radioNumber = reader.readUint16();
|
|
124
|
+
const radioType = decodeRadioType(reader);
|
|
125
|
+
const transmitState = reader.readUint8();
|
|
126
|
+
const inputSource = reader.readUint8();
|
|
127
|
+
const numberOfVariableTransmitterParameterRecords = reader.readUint16();
|
|
128
|
+
const antennaLocation = decodeVector3Double(reader);
|
|
129
|
+
const relativeAntennaLocation = decodeVector3Float(reader);
|
|
130
|
+
const antennaPatternType = reader.readUint16();
|
|
131
|
+
const antennaPatternLength = reader.readUint16();
|
|
132
|
+
const frequency = reader.readUint64();
|
|
133
|
+
const transmitFrequencyBandwidth = reader.readFloat32();
|
|
134
|
+
const power = reader.readFloat32();
|
|
135
|
+
const modulationType = decodeModulationType(reader);
|
|
136
|
+
const cryptoSystem = reader.readUint16();
|
|
137
|
+
const cryptoKeyId = reader.readUint16();
|
|
138
|
+
const lengthOfModulationParameters = reader.readUint8();
|
|
139
|
+
reader.readUint8(); // padding 8 bits
|
|
140
|
+
reader.readUint16(); // padding 16 bits
|
|
141
|
+
const modulationParameters = lengthOfModulationParameters > 0
|
|
142
|
+
? reader.readBytes(lengthOfModulationParameters)
|
|
143
|
+
: new Uint8Array(0);
|
|
144
|
+
const antennaPattern = decodeBeamAntennaPattern(reader);
|
|
145
|
+
const variableTransmitterParameters = [];
|
|
146
|
+
for (let i = 0; i < numberOfVariableTransmitterParameterRecords; i++) {
|
|
147
|
+
variableTransmitterParameters.push(decodeVariableTransmitterParameter(reader));
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
header,
|
|
151
|
+
radioReferenceId,
|
|
152
|
+
radioNumber,
|
|
153
|
+
radioType,
|
|
154
|
+
transmitState,
|
|
155
|
+
inputSource,
|
|
156
|
+
numberOfVariableTransmitterParameterRecords,
|
|
157
|
+
antennaLocation,
|
|
158
|
+
relativeAntennaLocation,
|
|
159
|
+
antennaPatternType,
|
|
160
|
+
antennaPatternLength,
|
|
161
|
+
frequency,
|
|
162
|
+
transmitFrequencyBandwidth,
|
|
163
|
+
power,
|
|
164
|
+
modulationType,
|
|
165
|
+
cryptoSystem,
|
|
166
|
+
cryptoKeyId,
|
|
167
|
+
lengthOfModulationParameters,
|
|
168
|
+
modulationParameters,
|
|
169
|
+
antennaPattern,
|
|
170
|
+
variableTransmitterParameters,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
export function encodeTransmitterPdu(writer, pdu) {
|
|
174
|
+
encodePduHeader(writer, pdu.header);
|
|
175
|
+
encodeEntityId(writer, pdu.radioReferenceId);
|
|
176
|
+
writer.writeUint16(pdu.radioNumber);
|
|
177
|
+
encodeRadioType(writer, pdu.radioType);
|
|
178
|
+
writer.writeUint8(pdu.transmitState);
|
|
179
|
+
writer.writeUint8(pdu.inputSource);
|
|
180
|
+
writer.writeUint16(pdu.numberOfVariableTransmitterParameterRecords);
|
|
181
|
+
encodeVector3Double(writer, pdu.antennaLocation);
|
|
182
|
+
encodeVector3Float(writer, pdu.relativeAntennaLocation);
|
|
183
|
+
writer.writeUint16(pdu.antennaPatternType);
|
|
184
|
+
writer.writeUint16(pdu.antennaPatternLength);
|
|
185
|
+
writer.writeUint64(pdu.frequency);
|
|
186
|
+
writer.writeFloat32(pdu.transmitFrequencyBandwidth);
|
|
187
|
+
writer.writeFloat32(pdu.power);
|
|
188
|
+
encodeModulationType(writer, pdu.modulationType);
|
|
189
|
+
writer.writeUint16(pdu.cryptoSystem);
|
|
190
|
+
writer.writeUint16(pdu.cryptoKeyId);
|
|
191
|
+
writer.writeUint8(pdu.lengthOfModulationParameters);
|
|
192
|
+
writer.writeUint8(0); // padding
|
|
193
|
+
writer.writeUint16(0); // padding
|
|
194
|
+
writer.writeBytes(pdu.modulationParameters);
|
|
195
|
+
encodeBeamAntennaPattern(writer, pdu.antennaPattern);
|
|
196
|
+
for (const v of pdu.variableTransmitterParameters) {
|
|
197
|
+
encodeVariableTransmitterParameter(writer, v);
|
|
198
|
+
}
|
|
199
|
+
writer.patchUint16(8, writer.getOffset());
|
|
200
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { BinaryReader } from "./binary/BinaryReader.js";
|
|
2
|
+
export { BinaryWriter } from "./binary/BinaryWriter.js";
|
|
3
|
+
export type { EntityId, SimulationAddress } from "./core/entityId.js";
|
|
4
|
+
export { decodeEntityId, encodeEntityId } from "./core/entityId.js";
|
|
5
|
+
export type { ClockTime } from "./dis/clockTime.js";
|
|
6
|
+
export { decodeClockTime, encodeClockTime } from "./dis/clockTime.js";
|
|
7
|
+
export * as dis7 from "./dis7/index.js";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { BinaryReader } from "./binary/BinaryReader.js";
|
|
2
|
+
export { BinaryWriter } from "./binary/BinaryWriter.js";
|
|
3
|
+
export { decodeEntityId, encodeEntityId } from "./core/entityId.js";
|
|
4
|
+
export { decodeClockTime, encodeClockTime } from "./dis/clockTime.js";
|
|
5
|
+
export * as dis7 from "./dis7/index.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@its-c10/dis-codec",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Spec-accurate Distributed Interactive Simulation (DIS) encode/decode library in TypeScript",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"dev": "tsc -w",
|
|
10
|
+
"test": "vitest",
|
|
11
|
+
"prepublishOnly": "npm run build"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"dis",
|
|
15
|
+
"distributed-interactive-simulation",
|
|
16
|
+
"ieee-1278",
|
|
17
|
+
"codec",
|
|
18
|
+
"pdu",
|
|
19
|
+
"udp",
|
|
20
|
+
"typescript"
|
|
21
|
+
],
|
|
22
|
+
"author": "Caleb Owens",
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"files": [
|
|
25
|
+
"dist",
|
|
26
|
+
"README.md"
|
|
27
|
+
],
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"typescript": "^5.9.3",
|
|
30
|
+
"vitest": "^4.1.0"
|
|
31
|
+
}
|
|
32
|
+
}
|