@waterloorocketry/omnibus-ts 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/dist/data/canMessage.js +2 -0
- package/dist/data/canMessage.js.map +1 -0
- package/dist/data/daqMessage.js +2 -0
- package/dist/data/daqMessage.js.map +1 -0
- package/dist/helpers.js +12 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/message.js +63 -0
- package/dist/message.js.map +1 -0
- package/dist/types/data/canMessage.d.ts +26 -0
- package/dist/types/data/canMessage.d.ts.map +1 -0
- package/dist/types/data/daqMessage.d.ts +10 -0
- package/dist/types/data/daqMessage.d.ts.map +1 -0
- package/dist/types/helpers.d.ts +12 -0
- package/dist/types/helpers.d.ts.map +1 -0
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/message.d.ts +31 -0
- package/dist/types/message.d.ts.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canMessage.js","sourceRoot":"","sources":["../../src/data/canMessage.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daqMessage.js","sourceRoot":"","sources":["../../src/data/daqMessage.ts"],"names":[],"mappings":""}
|
package/dist/helpers.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
export const toSnakeCase = (obj) => _.transform(obj, (result, value, key) => {
|
|
3
|
+
const snakeKey = _.snakeCase(String(key));
|
|
4
|
+
result[snakeKey] =
|
|
5
|
+
_.isObject(value) && !_.isArray(value) ? toSnakeCase(value) : value;
|
|
6
|
+
});
|
|
7
|
+
export const toCamelCase = (obj) => _.transform(obj, (result, value, key) => {
|
|
8
|
+
const camelKey = _.camelCase(String(key));
|
|
9
|
+
result[camelKey] =
|
|
10
|
+
_.isObject(value) && !_.isArray(value) ? toCamelCase(value) : value;
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,QAAQ,CAAA;AAoBtB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAmB,GAAM,EAAE,EAAE,CACpD,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,MAAwB,EAAE,KAAU,EAAE,GAAG,EAAE,EAAE;IAC3D,MAAM,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAA2B,CAAA;IACnE,MAAM,CAAC,QAAQ,CAAC;QACZ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;AAC3E,CAAC,CAAC,CAAA;AAEN,MAAM,CAAC,MAAM,WAAW,GAAG,CAAmB,GAAM,EAAE,EAAE,CACpD,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,MAAwB,EAAE,KAAU,EAAE,GAAG,EAAE,EAAE;IAC3D,MAAM,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAA2B,CAAA;IACnE,MAAM,CAAC,QAAQ,CAAC;QACZ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;AAC3E,CAAC,CAAC,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { getOmnibusSenderReceiver } from './message.js';
|
|
2
|
+
const communicator = ({ serverURL, allowUnsafe = false, allowExposeSocket = false, }) => {
|
|
3
|
+
const fns = getOmnibusSenderReceiver(serverURL);
|
|
4
|
+
const res = {
|
|
5
|
+
sender: fns.sender,
|
|
6
|
+
receiver: fns.receiver,
|
|
7
|
+
disconnect: fns.disconnect,
|
|
8
|
+
};
|
|
9
|
+
if (allowUnsafe) {
|
|
10
|
+
res.unsafeReceiveGenericMessage = fns.unsafeReceiveGenericMessage;
|
|
11
|
+
}
|
|
12
|
+
if (allowExposeSocket) {
|
|
13
|
+
res.socket = fns.socket;
|
|
14
|
+
}
|
|
15
|
+
return res;
|
|
16
|
+
};
|
|
17
|
+
export { communicator };
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAA;AAEvD,MAAM,YAAY,GAAG,CAAC,EAClB,SAAS,EACT,WAAW,GAAG,KAAK,EACnB,iBAAiB,GAAG,KAAK,GAK5B,EAAE,EAAE;IACD,MAAM,GAAG,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAA;IAC/C,MAAM,GAAG,GAML;QACA,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,UAAU,EAAE,GAAG,CAAC,UAAU;KAC7B,CAAA;IACD,IAAI,WAAW,EAAE,CAAC;QACd,GAAG,CAAC,2BAA2B,GAAG,GAAG,CAAC,2BAA2B,CAAA;IACrE,CAAC;IACD,IAAI,iBAAiB,EAAE,CAAC;QACpB,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;IAC3B,CAAC;IAED,OAAO,GAAG,CAAA;AACd,CAAC,CAAA;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/message.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { io } from 'socket.io-client';
|
|
2
|
+
import msgpackParser from 'socket.io-msgpack-parser';
|
|
3
|
+
import { toCamelCase, toSnakeCase } from './helpers.js';
|
|
4
|
+
export const socketCallbackBuilder = (channel, afterMessageReceived) => {
|
|
5
|
+
const buildMessageObject = (channel, timestamp, payload) => {
|
|
6
|
+
return {
|
|
7
|
+
channel: channel,
|
|
8
|
+
timestamp: timestamp,
|
|
9
|
+
payload: toCamelCase(payload),
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
return (event, timestamp, payload) => {
|
|
13
|
+
if (typeof timestamp !== 'number' ||
|
|
14
|
+
typeof payload !== 'object' ||
|
|
15
|
+
!payload) {
|
|
16
|
+
console.warn(`[Omnibus] Malformed Message! ${[event, timestamp, payload]}`);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (event.toLowerCase().startsWith(channel.toLowerCase()) ||
|
|
20
|
+
channel === '') {
|
|
21
|
+
afterMessageReceived(buildMessageObject(event, timestamp, payload));
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
export function getOmnibusSenderReceiver(serverURL) {
|
|
26
|
+
const socket = io(serverURL, {
|
|
27
|
+
parser: msgpackParser,
|
|
28
|
+
transports: ['websocket'],
|
|
29
|
+
upgrade: false,
|
|
30
|
+
});
|
|
31
|
+
const send = (msg) => {
|
|
32
|
+
socket.emit(msg.channel, msg.timestamp, toSnakeCase(msg.payload));
|
|
33
|
+
};
|
|
34
|
+
const _attachReceiver = (channel, callback) => {
|
|
35
|
+
socket.onAny(socketCallbackBuilder(channel, callback));
|
|
36
|
+
};
|
|
37
|
+
const receive = (channel, callback) => {
|
|
38
|
+
_attachReceiver(channel, callback);
|
|
39
|
+
};
|
|
40
|
+
const receiveAll = (callback) => {
|
|
41
|
+
_attachReceiver('', callback);
|
|
42
|
+
};
|
|
43
|
+
// No static type checking or runtime sanity checks
|
|
44
|
+
const unsafeReceiveGenericMessage = (callback) => {
|
|
45
|
+
socket.onAny((event, timestamp, payload) => {
|
|
46
|
+
callback({ channel: event, timestamp, payload });
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
const disconnect = () => {
|
|
50
|
+
socket.disconnect();
|
|
51
|
+
};
|
|
52
|
+
return {
|
|
53
|
+
socket,
|
|
54
|
+
sender: { send },
|
|
55
|
+
receiver: {
|
|
56
|
+
receive,
|
|
57
|
+
receiveAll,
|
|
58
|
+
},
|
|
59
|
+
unsafeReceiveGenericMessage,
|
|
60
|
+
disconnect,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACrC,OAAO,aAAa,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAmCvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACjC,OAAe,EACf,oBAA+C,EACjD,EAAE;IACA,MAAM,kBAAkB,GAAG,CACvB,OAAe,EACf,SAAiB,EACjB,OAAe,EACjB,EAAE;QACA,OAAO;YACH,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,WAAW,CAAC,OAAO,CAAM;SACrC,CAAA;IACL,CAAC,CAAA;IACD,OAAO,CAAC,KAAa,EAAE,SAAiB,EAAE,OAAe,EAAE,EAAE;QACzD,IACI,OAAO,SAAS,KAAK,QAAQ;YAC7B,OAAO,OAAO,KAAK,QAAQ;YAC3B,CAAC,OAAO,EACV,CAAC;YACC,OAAO,CAAC,IAAI,CACR,gCAAgC,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,CAChE,CAAA;YACD,OAAM;QACV,CAAC;QAED,IACI,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACrD,OAAO,KAAK,EAAE,EAChB,CAAC;YACC,oBAAoB,CAAC,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA;QACvE,CAAC;IACL,CAAC,CAAA;AACL,CAAC,CAAA;AAED,MAAM,UAAU,wBAAwB,CAAC,SAAiB;IACtD,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,EAAE;QACzB,MAAM,EAAE,aAAa;QACrB,UAAU,EAAE,CAAC,WAAW,CAAC;QACzB,OAAO,EAAE,KAAK;KACjB,CAAC,CAAA;IAEF,MAAM,IAAI,GAAG,CAAuB,GAAqB,EAAE,EAAE;QACzD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;IACrE,CAAC,CAAA;IAED,MAAM,eAAe,GAAG,CACpB,OAAoB,EACpB,QAAmC,EACrC,EAAE;QACA,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAI,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC7D,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,CACZ,OAAuC,EACvC,QAAmC,EACrC,EAAE;QACA,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IACtC,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,CAAC,QAA4C,EAAE,EAAE;QAChE,eAAe,CAAa,EAAE,EAAE,QAAQ,CAAC,CAAA;IAC7C,CAAC,CAAA;IAED,mDAAmD;IACnD,MAAM,2BAA2B,GAAG,CAChC,QAQU,EACZ,EAAE;QACA,MAAM,CAAC,KAAK,CAAC,CAAC,KAAa,EAAE,SAAiB,EAAE,OAAU,EAAE,EAAE;YAC1D,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAA;QACpD,CAAC,CAAC,CAAA;IACN,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,GAAG,EAAE;QACpB,MAAM,CAAC,UAAU,EAAE,CAAA;IACvB,CAAC,CAAA;IAED,OAAO;QACH,MAAM;QACN,MAAM,EAAE,EAAE,IAAI,EAAE;QAChB,QAAQ,EAAE;YACN,OAAO;YACP,UAAU;SACb;QACD,2BAA2B;QAC3B,UAAU;KACb,CAAA;AACL,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface ParsleyMessage<T = unknown> {
|
|
2
|
+
boardTypeId: string;
|
|
3
|
+
boardInstId: string;
|
|
4
|
+
msgPrio: 'LOW' | 'MEDIUM' | 'HIGH' | 'HIGHEST';
|
|
5
|
+
msgType: string;
|
|
6
|
+
data: T | null;
|
|
7
|
+
parsley: string;
|
|
8
|
+
messageVersion: number;
|
|
9
|
+
}
|
|
10
|
+
export interface CANCommandMessage<T = unknown> {
|
|
11
|
+
boardTypeId: string;
|
|
12
|
+
boardInstId: string;
|
|
13
|
+
msgPrio: 'LOW' | 'MEDIUM' | 'HIGH' | 'HIGHEST';
|
|
14
|
+
msgType: string;
|
|
15
|
+
canMsg: T | null;
|
|
16
|
+
parsley: string;
|
|
17
|
+
messageVersion: number;
|
|
18
|
+
}
|
|
19
|
+
type RLCSSensorName = string;
|
|
20
|
+
export type RLCSv3Message = Map<RLCSSensorName, number | string>;
|
|
21
|
+
export interface ParsleyHeartbeatMessage {
|
|
22
|
+
id: string;
|
|
23
|
+
health: string;
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=canMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canMessage.d.ts","sourceRoot":"","sources":["../../../src/data/canMessage.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACvC,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAA;IAC9C,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,CAAC,GAAG,IAAI,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC1C,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAA;IAC9C,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,CAAC,GAAG,IAAI,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;CACzB;AAGD,KAAK,cAAc,GAAG,MAAM,CAAA;AAC5B,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;AAEhE,MAAM,WAAW,uBAAuB;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;CACjB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type SensorName = string;
|
|
2
|
+
export interface DAQMessage extends Record<string, unknown> {
|
|
3
|
+
timestamp: number;
|
|
4
|
+
data: Record<SensorName, number[]>;
|
|
5
|
+
relativeTimestamps: number[];
|
|
6
|
+
sampleRate: number;
|
|
7
|
+
messageVersion: number;
|
|
8
|
+
}
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=daqMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daqMessage.d.ts","sourceRoot":"","sources":["../../../src/data/daqMessage.ts"],"names":[],"mappings":"AAAA,KAAK,UAAU,GAAG,MAAM,CAAA;AAExB,MAAM,WAAW,UAAW,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvD,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;IAClC,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;CACzB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type SnakeToCamelCase<S extends string> = S extends `${infer T}_${infer U}` ? `${T}${Capitalize<SnakeToCamelCase<U>>}` : S;
|
|
2
|
+
type CamelToSnakeCase<S extends string> = S extends `${infer First}${infer Rest}` ? `${First extends Lowercase<First> ? First : `_${Lowercase<First>}`}${CamelToSnakeCase<Rest>}` : S;
|
|
3
|
+
type CamelCaseKeys<T extends object> = {
|
|
4
|
+
[K in keyof T as K extends string ? SnakeToCamelCase<K> : K]: T[K];
|
|
5
|
+
};
|
|
6
|
+
type SnakeCaseKeys<T extends object> = {
|
|
7
|
+
[K in keyof T as K extends string ? CamelToSnakeCase<K> : K]: T[K];
|
|
8
|
+
};
|
|
9
|
+
export declare const toSnakeCase: <T extends object>(obj: T) => SnakeCaseKeys<T>;
|
|
10
|
+
export declare const toCamelCase: <T extends object>(obj: T) => CamelCaseKeys<T>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAGA,KAAK,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAClC,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,GACxE,CAAC,CAAA;AAET,KAAK,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAClC,CAAC,SAAS,GAAG,MAAM,KAAK,GAAG,MAAM,IAAI,EAAE,GACnC,GAAG,KAAK,SAAS,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAC7F,CAAC,CAAA;AAET,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,IAAI;KAClC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACrE,CAAA;AAED,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,IAAI;KAClC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACrE,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,qBAK9C,CAAA;AAEN,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,qBAK9C,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
declare const communicator: ({ serverURL, allowUnsafe, allowExposeSocket, }: {
|
|
2
|
+
serverURL: string;
|
|
3
|
+
allowUnsafe?: boolean;
|
|
4
|
+
allowExposeSocket?: boolean;
|
|
5
|
+
}) => {
|
|
6
|
+
socket?: import("socket.io-client").Socket<import("@socket.io/component-emitter").DefaultEventsMap, import("@socket.io/component-emitter").DefaultEventsMap>;
|
|
7
|
+
sender: {
|
|
8
|
+
send: <T extends import("./message.js").AnyPayload>(msg: import("./message.js").MessageToSend<T>) => void;
|
|
9
|
+
};
|
|
10
|
+
receiver: {
|
|
11
|
+
receive: <T extends import("./message.js").AnyPayload>(channel: T extends import("./data/daqMessage.js").DAQMessage ? `DAQ${string}` : T extends import("./data/canMessage.js").ParsleyMessage<unknown> ? `CAN/Parsley${string}` : T extends import("./data/canMessage.js").CANCommandMessage<unknown> ? `CAN/Commands${string}` : T extends import("./data/canMessage.js").ParsleyHeartbeatMessage ? `Parsley/Health${string}` : T extends import("./data/canMessage.js").RLCSv3Message ? `RLCS${string}` : never, callback: (msg: import("./message.js").Message<T>) => void) => void;
|
|
12
|
+
receiveAll: (callback: (msg: import("./message.js").Message<import("./message.js").AnyPayload>) => void) => void;
|
|
13
|
+
};
|
|
14
|
+
unsafeReceiveGenericMessage?: <T = unknown>(callback: ({ channel, timestamp, payload, }: {
|
|
15
|
+
channel: string;
|
|
16
|
+
timestamp: number;
|
|
17
|
+
payload: T;
|
|
18
|
+
}) => void) => void;
|
|
19
|
+
disconnect: () => void;
|
|
20
|
+
};
|
|
21
|
+
export { communicator };
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,YAAY,GAAI,gDAInB;IACC,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC9B;;;;;;;;;;;;;;;CAqBA,CAAA;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { DAQMessage } from './data/daqMessage.ts';
|
|
2
|
+
import type { ParsleyMessage, CANCommandMessage, RLCSv3Message, ParsleyHeartbeatMessage } from './data/canMessage.ts';
|
|
3
|
+
export type AnyPayload = DAQMessage | ParsleyMessage | CANCommandMessage | RLCSv3Message | ParsleyHeartbeatMessage;
|
|
4
|
+
type ChannelLiteralToPayloadType<T extends AnyPayload> = T extends DAQMessage ? `DAQ${string}` : T extends ParsleyMessage ? `CAN/Parsley${string}` : T extends CANCommandMessage ? `CAN/Commands${string}` : T extends ParsleyHeartbeatMessage ? `Parsley/Health${string}` : T extends RLCSv3Message ? `RLCS${string}` : never;
|
|
5
|
+
export interface Message<T extends AnyPayload> {
|
|
6
|
+
channel: string;
|
|
7
|
+
timestamp: number;
|
|
8
|
+
payload: T;
|
|
9
|
+
}
|
|
10
|
+
export interface MessageToSend<T extends AnyPayload> extends Message<T> {
|
|
11
|
+
channel: ChannelLiteralToPayloadType<T>;
|
|
12
|
+
}
|
|
13
|
+
export declare const socketCallbackBuilder: <T extends AnyPayload>(channel: string, afterMessageReceived: (msg: Message<T>) => void) => (event: string, timestamp: number, payload: object) => void;
|
|
14
|
+
export declare function getOmnibusSenderReceiver(serverURL: string): {
|
|
15
|
+
socket: import("socket.io-client").Socket<import("@socket.io/component-emitter").DefaultEventsMap, import("@socket.io/component-emitter").DefaultEventsMap>;
|
|
16
|
+
sender: {
|
|
17
|
+
send: <T extends AnyPayload>(msg: MessageToSend<T>) => void;
|
|
18
|
+
};
|
|
19
|
+
receiver: {
|
|
20
|
+
receive: <T extends AnyPayload>(channel: ChannelLiteralToPayloadType<T>, callback: (msg: Message<T>) => void) => void;
|
|
21
|
+
receiveAll: (callback: (msg: Message<AnyPayload>) => void) => void;
|
|
22
|
+
};
|
|
23
|
+
unsafeReceiveGenericMessage: <T = unknown>(callback: ({ channel, timestamp, payload, }: {
|
|
24
|
+
channel: string;
|
|
25
|
+
timestamp: number;
|
|
26
|
+
payload: T;
|
|
27
|
+
}) => void) => void;
|
|
28
|
+
disconnect: () => void;
|
|
29
|
+
};
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/message.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EACR,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EAC1B,MAAM,sBAAsB,CAAA;AAE7B,MAAM,MAAM,UAAU,GAChB,UAAU,GACV,cAAc,GACd,iBAAiB,GACjB,aAAa,GACb,uBAAuB,CAAA;AAE7B,KAAK,2BAA2B,CAAC,CAAC,SAAS,UAAU,IACjD,CAAC,SAAS,UAAU,GAAG,MAAM,MAAM,EAAE,GACnC,CAAC,SAAS,cAAc,GAAG,cAAc,MAAM,EAAE,GACjD,CAAC,SAAS,iBAAiB,GAAG,eAAe,MAAM,EAAE,GACrD,CAAC,SAAS,uBAAuB,GAAG,iBAAiB,MAAM,EAAE,GAC7D,CAAC,SAAS,aAAa,GAAG,OAAO,MAAM,EAAE,GACzC,KAAK,CAAA;AAEX,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,UAAU;IACzC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,CAAC,CAAA;CACb;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,UAAU,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IACnE,OAAO,EAAE,2BAA2B,CAAC,CAAC,CAAC,CAAA;CAC1C;AAED,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,UAAU,EACtD,SAAS,MAAM,EACf,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,MAavC,OAAO,MAAM,EAAE,WAAW,MAAM,EAAE,SAAS,MAAM,SAmB5D,CAAA;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM;;;eAOxC,CAAC,SAAS,UAAU,OAAO,aAAa,CAAC,CAAC,CAAC;;;kBAWxC,CAAC,SAAS,UAAU,WACxB,2BAA2B,CAAC,CAAC,CAAC,YAC7B,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI;+BAKT,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI;;kCAK3B,CAAC,sBACxB,CAAC,EACP,OAAO,EACP,SAAS,EACT,OAAO,GACV,EAAE;QACC,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,CAAC,CAAA;KACb,KAAK,IAAI;;EAqBjB"}
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@waterloorocketry/omnibus-ts",
|
|
3
|
+
"public": true,
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"description": "Omnibus Message bindings for TypeScript and SocketIO",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Waterloo Rocketry",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"types": "./dist/types/index.d.ts",
|
|
11
|
+
"scripts": {
|
|
12
|
+
"test": "vitest",
|
|
13
|
+
"build": "tsc",
|
|
14
|
+
"format": "prettier --write .",
|
|
15
|
+
"lint": "eslint . --ext .ts",
|
|
16
|
+
"coverage": "vitest run --coverage"
|
|
17
|
+
},
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"@eslint/js": "^9.39.0",
|
|
20
|
+
"@eslint/json": "^0.13.2",
|
|
21
|
+
"@types/express": "^5.0.5",
|
|
22
|
+
"@types/lodash": "^4.17.20",
|
|
23
|
+
"@types/node": "^24.9.2",
|
|
24
|
+
"@vitest/coverage-v8": "^4.0.6",
|
|
25
|
+
"eslint": "^9.39.0",
|
|
26
|
+
"express": "^4.21.2",
|
|
27
|
+
"globals": "^16.5.0",
|
|
28
|
+
"jiti": "^2.6.1",
|
|
29
|
+
"prettier": "^3.6.2",
|
|
30
|
+
"socket.io": "^4.8.1",
|
|
31
|
+
"typescript": "^5.9.3",
|
|
32
|
+
"typescript-eslint": "^8.46.2",
|
|
33
|
+
"vitest": "^4.0.6"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"lodash": "^4.17.21",
|
|
37
|
+
"socket.io-client": "^4.8.1",
|
|
38
|
+
"socket.io-msgpack-parser": "^3.0.2"
|
|
39
|
+
},
|
|
40
|
+
"files": [
|
|
41
|
+
"dist/**/*"
|
|
42
|
+
]
|
|
43
|
+
}
|