@2702rebels/wpidata 1.0.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.
Files changed (80) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +5 -0
  3. package/dist/abstractions.cjs +0 -0
  4. package/dist/abstractions.d.cts +246 -0
  5. package/dist/abstractions.d.cts.map +1 -0
  6. package/dist/abstractions.d.mts +246 -0
  7. package/dist/abstractions.d.mts.map +1 -0
  8. package/dist/abstractions.mjs +1 -0
  9. package/dist/formats/json.cjs +32 -0
  10. package/dist/formats/json.d.cts +14 -0
  11. package/dist/formats/json.d.cts.map +1 -0
  12. package/dist/formats/json.d.mts +14 -0
  13. package/dist/formats/json.d.mts.map +1 -0
  14. package/dist/formats/json.mjs +33 -0
  15. package/dist/formats/json.mjs.map +1 -0
  16. package/dist/formats/msgpack.cjs +30 -0
  17. package/dist/formats/msgpack.d.cts +14 -0
  18. package/dist/formats/msgpack.d.cts.map +1 -0
  19. package/dist/formats/msgpack.d.mts +14 -0
  20. package/dist/formats/msgpack.d.mts.map +1 -0
  21. package/dist/formats/msgpack.mjs +31 -0
  22. package/dist/formats/msgpack.mjs.map +1 -0
  23. package/dist/formats/protobuf.cjs +130 -0
  24. package/dist/formats/protobuf.d.cts +68 -0
  25. package/dist/formats/protobuf.d.cts.map +1 -0
  26. package/dist/formats/protobuf.d.mts +68 -0
  27. package/dist/formats/protobuf.d.mts.map +1 -0
  28. package/dist/formats/protobuf.mjs +128 -0
  29. package/dist/formats/protobuf.mjs.map +1 -0
  30. package/dist/formats/struct.cjs +593 -0
  31. package/dist/formats/struct.d.cts +134 -0
  32. package/dist/formats/struct.d.cts.map +1 -0
  33. package/dist/formats/struct.d.mts +134 -0
  34. package/dist/formats/struct.d.mts.map +1 -0
  35. package/dist/formats/struct.mjs +591 -0
  36. package/dist/formats/struct.mjs.map +1 -0
  37. package/dist/sink.cjs +360 -0
  38. package/dist/sink.d.cts +93 -0
  39. package/dist/sink.d.cts.map +1 -0
  40. package/dist/sink.d.mts +93 -0
  41. package/dist/sink.d.mts.map +1 -0
  42. package/dist/sink.mjs +361 -0
  43. package/dist/sink.mjs.map +1 -0
  44. package/dist/types/protobuf.cjs +0 -0
  45. package/dist/types/protobuf.d.cts +302 -0
  46. package/dist/types/protobuf.d.cts.map +1 -0
  47. package/dist/types/protobuf.d.mts +302 -0
  48. package/dist/types/protobuf.d.mts.map +1 -0
  49. package/dist/types/protobuf.mjs +1 -0
  50. package/dist/types/sendable.cjs +0 -0
  51. package/dist/types/sendable.d.cts +225 -0
  52. package/dist/types/sendable.d.cts.map +1 -0
  53. package/dist/types/sendable.d.mts +225 -0
  54. package/dist/types/sendable.d.mts.map +1 -0
  55. package/dist/types/sendable.mjs +1 -0
  56. package/dist/types/struct.cjs +0 -0
  57. package/dist/types/struct.d.cts +304 -0
  58. package/dist/types/struct.d.cts.map +1 -0
  59. package/dist/types/struct.d.mts +304 -0
  60. package/dist/types/struct.d.mts.map +1 -0
  61. package/dist/types/struct.mjs +1 -0
  62. package/dist/utils.cjs +140 -0
  63. package/dist/utils.d.cts +40 -0
  64. package/dist/utils.d.cts.map +1 -0
  65. package/dist/utils.d.mts +40 -0
  66. package/dist/utils.d.mts.map +1 -0
  67. package/dist/utils.mjs +135 -0
  68. package/dist/utils.mjs.map +1 -0
  69. package/package.json +51 -0
  70. package/src/abstractions.ts +308 -0
  71. package/src/formats/json.ts +53 -0
  72. package/src/formats/msgpack.ts +42 -0
  73. package/src/formats/protobuf.ts +213 -0
  74. package/src/formats/struct.test.ts +814 -0
  75. package/src/formats/struct.ts +992 -0
  76. package/src/sink.ts +611 -0
  77. package/src/types/protobuf.ts +334 -0
  78. package/src/types/sendable.ts +244 -0
  79. package/src/types/struct.ts +333 -0
  80. package/src/utils.ts +241 -0
@@ -0,0 +1,134 @@
1
+ import { DataChannel, DataTransformer, DataTypeImpl, StructuredTypeDescriptor } from "../abstractions.cjs";
2
+
3
+ //#region src/formats/struct.d.ts
4
+ type StructFieldType = "ref" | "bool" | "char" | "int8" | "int16" | "int32" | "int64" | "uint8" | "uint16" | "uint32" | "uint64" | "float" | "double";
5
+ /** Describes individual field in {@link StructDescriptor}. */
6
+ type StructFieldDescriptor = {
7
+ /** Field identifier */
8
+ identifier: string;
9
+ /** Field value type */
10
+ type: StructFieldType;
11
+ /** Reference for complex (nested) type */
12
+ typeRef?: StructDescriptor | string;
13
+ /** Offset to the packed field data in bytes */
14
+ offset: number;
15
+ /** Size of the packed field data in bytes */
16
+ size: number;
17
+ /** Fixed array size */
18
+ arraySize?: number;
19
+ /** Bit width of the field data (bit-field only) */
20
+ bitWidth?: number;
21
+ /** Bit shift for the field data (bit-field only) */
22
+ bitShift?: number;
23
+ /** Enum specification */
24
+ enum?: Map<number, string>;
25
+ };
26
+ /** Describes named struct type. */
27
+ type StructDescriptor = {
28
+ /** Struct type name */
29
+ name: string;
30
+ /** Struct fields in packed order */
31
+ fields: ReadonlyArray<StructFieldDescriptor>;
32
+ /** Total packed size in bytes */
33
+ size: number;
34
+ /** Missing dependencies */
35
+ unresolved?: Set<string>;
36
+ };
37
+ type UnpackStructOptions = {
38
+ /**
39
+ * Indicates that integer numeric values with enum specification should be converted
40
+ * to the corresponding enum string value if possible.
41
+ */
42
+ useEnum?: boolean;
43
+ };
44
+ /**
45
+ * Unpacks serialized struct data into JSON object.
46
+ *
47
+ * Implementation of WPILiB packed struct serialization protocol
48
+ * https://github.com/wpilibsuite/allwpilib/blob/main/wpiutil/doc/struct.adoc
49
+ *
50
+ * @param name struct type name
51
+ * @param data serialized binary data
52
+ * @param repository repository of available descriptors
53
+ * @param options additional options
54
+ */
55
+ declare function unpack(name: string, data: DataView<ArrayBufferLike> | Uint8Array<ArrayBufferLike>, repository: StructRepository, options?: UnpackStructOptions): Record<string, unknown>;
56
+ /**
57
+ * Packs JSON object into serialized struct data.
58
+ *
59
+ * @param name struct type name
60
+ * @param value JSON object to pack
61
+ * @param repository repository of available descriptors
62
+ * @returns ArrayBuffer containing serialized data
63
+ */
64
+ declare function pack(name: string, value: Record<string, unknown>, repository: StructRepository): Uint8Array<ArrayBuffer>;
65
+ /** Repository of struct descriptors. */
66
+ declare class StructRepository {
67
+ private readonly unresolved;
68
+ /** Descriptors in the repository. */
69
+ readonly descriptors: Map<string, StructDescriptor>;
70
+ /**
71
+ * Computes field bte offsets and returns total packed size in bytes.
72
+ *
73
+ * This method assumes that all fields have resolved external dependencies
74
+ * and will compute byte offsets and bit shifts for bit-field packed fields.
75
+ */
76
+ private static computeFieldOffsets;
77
+ /**
78
+ * Attempts to finalize any unresolved descriptors with the recently resolved one.
79
+ */
80
+ private resolve;
81
+ /**
82
+ * Determines whether type can be transformed, indicating that
83
+ * the parsed type descriptor is present.
84
+ *
85
+ * @param name struct type name
86
+ */
87
+ canTransform(name: string): boolean;
88
+ /**
89
+ * Gets the struct type serialized size in bytes.
90
+ *
91
+ * @param name struct type name
92
+ */
93
+ getSize(name: string): number;
94
+ /**
95
+ * Unpacks serialized struct data into JSON object.
96
+ *
97
+ * @param name struct type name
98
+ * @param data serialized binary data
99
+ * @param options additional options
100
+ */
101
+ unpack(name: string, data: DataView<ArrayBufferLike> | Uint8Array<ArrayBufferLike>, options?: UnpackStructOptions): Record<string, unknown>;
102
+ /**
103
+ * Packs JSON object into serialized struct data.
104
+ *
105
+ * @param name struct type name
106
+ * @param value JSON object to pack
107
+ */
108
+ pack(name: string, value: Record<string, unknown>): Uint8Array<ArrayBuffer>;
109
+ /**
110
+ * Parses struct schema and adds the resulting descriptor to the repository.
111
+ *
112
+ * The descriptor may not be fully processed if it references other structs that
113
+ * we have not seen yet. Such pending descriptors will be processed automatically,
114
+ * once corresponding structs have been added. This code checks for circular
115
+ * dependencies and will fail when one is detected.
116
+ *
117
+ * @param name struct type name
118
+ * @param data struct schema in UTF-8 encoded binary representation
119
+ * @returns parsed descriptor or `null` if the operation failed
120
+ */
121
+ add(name: string, data: DataView<ArrayBufferLike> | Uint8Array<ArrayBufferLike>): StructDescriptor | null;
122
+ }
123
+ /** Implements {@link DataTransformer} interface for the `struct` serialization protocol. */
124
+ declare class StructDataTransformer implements DataTransformer {
125
+ private readonly repo;
126
+ inspect(source: string, name: string, type: string, metadata?: string | Record<string, unknown>): DataChannel | string | undefined;
127
+ schema(typeName: string, value: unknown): void;
128
+ deserialize(value: unknown, type?: StructuredTypeDescriptor): DataTypeImpl | undefined;
129
+ serialize(value: unknown, type?: StructuredTypeDescriptor): Uint8Array;
130
+ canTransform(type: string): boolean;
131
+ }
132
+ //#endregion
133
+ export { StructDataTransformer, StructDescriptor, StructFieldDescriptor, StructFieldType, StructRepository, UnpackStructOptions, pack, unpack };
134
+ //# sourceMappingURL=struct.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"struct.d.cts","names":[],"sources":["../../src/formats/struct.ts"],"sourcesContent":[],"mappings":";;;KAQY,eAAA;;AAAA,KAgBA,qBAAA,GAhBe;EAgBf;EAIJ,UAAA,EAAA,MAAA;EAEI;EAYH,IAAA,EAdD,eAcC;EAAG;EAIA,OAAA,CAAA,EAhBA,gBAgBgB,GAAA,MAAA;EAIJ;EAAd,MAAA,EAAA,MAAA;EAIK;EAAG,IAAA,EAAA,MAAA;EAUN;EAmBI,SAAM,CAAA,EAAA,MAAA;EAEL;EAAT,QAAA,CAAA,EAAA,MAAA;EAAuC;EAAX,QAAA,CAAA,EAAA,MAAA;EACtB;EACF,IAAA,CAAA,EA7CH,GA6CG,CAAA,MAAA,EAAA,MAAA,CAAA;CAAmB;;AAyBf,KAlEJ,gBAAA,GAkEQ;EAAsB;EAAqC,IAAA,EAAA,MAAA;EAAgB;EAAA,MAAA,EA9DrF,aA8DqF,CA9DvE,qBA8DuE,CAAA;EAAA;EAkclF,IAAA,EAAA,MAAA;EAIgB;EAAA,UAAA,CAAA,EAhgBd,GAggBc,CAAA,MAAA,CAAA;CAyHV;AAAT,KA/mBE,mBAAA,GA+mBF;EAAuC;;;;EAYd,OAAA,CAAA,EAAA,OAAA;CAAuB;;;;;;;;AAsL1D;;;;AA0CuE,iBAx0BvD,MAAA,CAw0BuD,IAAA,EAAA,MAAA,EAAA,IAAA,EAt0B/D,QAs0B+D,CAt0BtD,eAs0BsD,CAAA,GAt0BnC,UAs0BmC,CAt0BxB,eAs0BwB,CAAA,EAAA,UAAA,EAr0BzD,gBAq0ByD,EAAA,OAAA,CAAA,EAp0B3D,mBAo0B2D,CAAA,EAp0BxC,MAo0BwC,CAAA,MAAA,EAAA,OAAA,CAAA;;;;;;;;;iBA3yBvD,IAAA,sBAA0B,qCAAqC,mBAAgB,WAAA;;cAkclF,gBAAA;;;wBAIgB,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAyHnB,SAAS,mBAAmB,WAAW,4BACnC,sBAAmB;;;;;;;4BAWE,0BAAuB,WAAA;;;;;;;;;;;;;0BAgBzB,SAAS,mBAAmB,WAAW,mBAAmB;;;cAsK9E,qBAAA,YAAiC;;0EAOtB,0BACnB;;qCAkCuC,2BAA2B;mCAkC7B,2BAA2B"}
@@ -0,0 +1,134 @@
1
+ import { DataChannel, DataTransformer, DataTypeImpl, StructuredTypeDescriptor } from "../abstractions.mjs";
2
+
3
+ //#region src/formats/struct.d.ts
4
+ type StructFieldType = "ref" | "bool" | "char" | "int8" | "int16" | "int32" | "int64" | "uint8" | "uint16" | "uint32" | "uint64" | "float" | "double";
5
+ /** Describes individual field in {@link StructDescriptor}. */
6
+ type StructFieldDescriptor = {
7
+ /** Field identifier */
8
+ identifier: string;
9
+ /** Field value type */
10
+ type: StructFieldType;
11
+ /** Reference for complex (nested) type */
12
+ typeRef?: StructDescriptor | string;
13
+ /** Offset to the packed field data in bytes */
14
+ offset: number;
15
+ /** Size of the packed field data in bytes */
16
+ size: number;
17
+ /** Fixed array size */
18
+ arraySize?: number;
19
+ /** Bit width of the field data (bit-field only) */
20
+ bitWidth?: number;
21
+ /** Bit shift for the field data (bit-field only) */
22
+ bitShift?: number;
23
+ /** Enum specification */
24
+ enum?: Map<number, string>;
25
+ };
26
+ /** Describes named struct type. */
27
+ type StructDescriptor = {
28
+ /** Struct type name */
29
+ name: string;
30
+ /** Struct fields in packed order */
31
+ fields: ReadonlyArray<StructFieldDescriptor>;
32
+ /** Total packed size in bytes */
33
+ size: number;
34
+ /** Missing dependencies */
35
+ unresolved?: Set<string>;
36
+ };
37
+ type UnpackStructOptions = {
38
+ /**
39
+ * Indicates that integer numeric values with enum specification should be converted
40
+ * to the corresponding enum string value if possible.
41
+ */
42
+ useEnum?: boolean;
43
+ };
44
+ /**
45
+ * Unpacks serialized struct data into JSON object.
46
+ *
47
+ * Implementation of WPILiB packed struct serialization protocol
48
+ * https://github.com/wpilibsuite/allwpilib/blob/main/wpiutil/doc/struct.adoc
49
+ *
50
+ * @param name struct type name
51
+ * @param data serialized binary data
52
+ * @param repository repository of available descriptors
53
+ * @param options additional options
54
+ */
55
+ declare function unpack(name: string, data: DataView<ArrayBufferLike> | Uint8Array<ArrayBufferLike>, repository: StructRepository, options?: UnpackStructOptions): Record<string, unknown>;
56
+ /**
57
+ * Packs JSON object into serialized struct data.
58
+ *
59
+ * @param name struct type name
60
+ * @param value JSON object to pack
61
+ * @param repository repository of available descriptors
62
+ * @returns ArrayBuffer containing serialized data
63
+ */
64
+ declare function pack(name: string, value: Record<string, unknown>, repository: StructRepository): Uint8Array<ArrayBuffer>;
65
+ /** Repository of struct descriptors. */
66
+ declare class StructRepository {
67
+ private readonly unresolved;
68
+ /** Descriptors in the repository. */
69
+ readonly descriptors: Map<string, StructDescriptor>;
70
+ /**
71
+ * Computes field bte offsets and returns total packed size in bytes.
72
+ *
73
+ * This method assumes that all fields have resolved external dependencies
74
+ * and will compute byte offsets and bit shifts for bit-field packed fields.
75
+ */
76
+ private static computeFieldOffsets;
77
+ /**
78
+ * Attempts to finalize any unresolved descriptors with the recently resolved one.
79
+ */
80
+ private resolve;
81
+ /**
82
+ * Determines whether type can be transformed, indicating that
83
+ * the parsed type descriptor is present.
84
+ *
85
+ * @param name struct type name
86
+ */
87
+ canTransform(name: string): boolean;
88
+ /**
89
+ * Gets the struct type serialized size in bytes.
90
+ *
91
+ * @param name struct type name
92
+ */
93
+ getSize(name: string): number;
94
+ /**
95
+ * Unpacks serialized struct data into JSON object.
96
+ *
97
+ * @param name struct type name
98
+ * @param data serialized binary data
99
+ * @param options additional options
100
+ */
101
+ unpack(name: string, data: DataView<ArrayBufferLike> | Uint8Array<ArrayBufferLike>, options?: UnpackStructOptions): Record<string, unknown>;
102
+ /**
103
+ * Packs JSON object into serialized struct data.
104
+ *
105
+ * @param name struct type name
106
+ * @param value JSON object to pack
107
+ */
108
+ pack(name: string, value: Record<string, unknown>): Uint8Array<ArrayBuffer>;
109
+ /**
110
+ * Parses struct schema and adds the resulting descriptor to the repository.
111
+ *
112
+ * The descriptor may not be fully processed if it references other structs that
113
+ * we have not seen yet. Such pending descriptors will be processed automatically,
114
+ * once corresponding structs have been added. This code checks for circular
115
+ * dependencies and will fail when one is detected.
116
+ *
117
+ * @param name struct type name
118
+ * @param data struct schema in UTF-8 encoded binary representation
119
+ * @returns parsed descriptor or `null` if the operation failed
120
+ */
121
+ add(name: string, data: DataView<ArrayBufferLike> | Uint8Array<ArrayBufferLike>): StructDescriptor | null;
122
+ }
123
+ /** Implements {@link DataTransformer} interface for the `struct` serialization protocol. */
124
+ declare class StructDataTransformer implements DataTransformer {
125
+ private readonly repo;
126
+ inspect(source: string, name: string, type: string, metadata?: string | Record<string, unknown>): DataChannel | string | undefined;
127
+ schema(typeName: string, value: unknown): void;
128
+ deserialize(value: unknown, type?: StructuredTypeDescriptor): DataTypeImpl | undefined;
129
+ serialize(value: unknown, type?: StructuredTypeDescriptor): Uint8Array;
130
+ canTransform(type: string): boolean;
131
+ }
132
+ //#endregion
133
+ export { StructDataTransformer, StructDescriptor, StructFieldDescriptor, StructFieldType, StructRepository, UnpackStructOptions, pack, unpack };
134
+ //# sourceMappingURL=struct.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"struct.d.mts","names":[],"sources":["../../src/formats/struct.ts"],"sourcesContent":[],"mappings":";;;KAQY,eAAA;;AAAA,KAgBA,qBAAA,GAhBe;EAgBf;EAIJ,UAAA,EAAA,MAAA;EAEI;EAYH,IAAA,EAdD,eAcC;EAAG;EAIA,OAAA,CAAA,EAhBA,gBAgBgB,GAAA,MAAA;EAIJ;EAAd,MAAA,EAAA,MAAA;EAIK;EAAG,IAAA,EAAA,MAAA;EAUN;EAmBI,SAAM,CAAA,EAAA,MAAA;EAEL;EAAT,QAAA,CAAA,EAAA,MAAA;EAAuC;EAAX,QAAA,CAAA,EAAA,MAAA;EACtB;EACF,IAAA,CAAA,EA7CH,GA6CG,CAAA,MAAA,EAAA,MAAA,CAAA;CAAmB;;AAyBf,KAlEJ,gBAAA,GAkEQ;EAAsB;EAAqC,IAAA,EAAA,MAAA;EAAgB;EAAA,MAAA,EA9DrF,aA8DqF,CA9DvE,qBA8DuE,CAAA;EAAA;EAkclF,IAAA,EAAA,MAAA;EAIgB;EAAA,UAAA,CAAA,EAhgBd,GAggBc,CAAA,MAAA,CAAA;CAyHV;AAAT,KA/mBE,mBAAA,GA+mBF;EAAuC;;;;EAYd,OAAA,CAAA,EAAA,OAAA;CAAuB;;;;;;;;AAsL1D;;;;AA0CuE,iBAx0BvD,MAAA,CAw0BuD,IAAA,EAAA,MAAA,EAAA,IAAA,EAt0B/D,QAs0B+D,CAt0BtD,eAs0BsD,CAAA,GAt0BnC,UAs0BmC,CAt0BxB,eAs0BwB,CAAA,EAAA,UAAA,EAr0BzD,gBAq0ByD,EAAA,OAAA,CAAA,EAp0B3D,mBAo0B2D,CAAA,EAp0BxC,MAo0BwC,CAAA,MAAA,EAAA,OAAA,CAAA;;;;;;;;;iBA3yBvD,IAAA,sBAA0B,qCAAqC,mBAAgB,WAAA;;cAkclF,gBAAA;;;wBAIgB,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAyHnB,SAAS,mBAAmB,WAAW,4BACnC,sBAAmB;;;;;;;4BAWE,0BAAuB,WAAA;;;;;;;;;;;;;0BAgBzB,SAAS,mBAAmB,WAAW,mBAAmB;;;cAsK9E,qBAAA,YAAiC;;0EAOtB,0BACnB;;qCAkCuC,2BAA2B;mCAkC7B,2BAA2B"}