@robotical/raftjs 2.0.3 → 2.0.4

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.
@@ -12,118 +12,152 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.structUnpack = structUnpack;
13
13
  exports.structSizeOf = structSizeOf;
14
14
  exports.structPack = structPack;
15
+ function parseFormatInstructions(format) {
16
+ const instructions = [];
17
+ let idx = 0;
18
+ while (idx < format.length) {
19
+ const char = format[idx];
20
+ // Endianness specifiers
21
+ if (char === "<" || char === ">") {
22
+ instructions.push({ kind: "endian", littleEndian: char === "<" });
23
+ idx++;
24
+ continue;
25
+ }
26
+ // Ignore whitespace
27
+ if (/\s/.test(char)) {
28
+ idx++;
29
+ continue;
30
+ }
31
+ // Attribute code
32
+ const code = char;
33
+ idx++;
34
+ // Check for repeat count using [N] syntax
35
+ let repeat = 1;
36
+ if (idx < format.length && format[idx] === "[") {
37
+ const endIdx = format.indexOf("]", idx + 1);
38
+ if (endIdx === -1) {
39
+ throw new Error(`Invalid format string: missing closing ] in "${format}"`);
40
+ }
41
+ const repeatStr = format.slice(idx + 1, endIdx);
42
+ repeat = parseInt(repeatStr, 10);
43
+ if (!Number.isFinite(repeat) || repeat <= 0) {
44
+ throw new Error(`Invalid repeat count "${repeatStr}" in format string "${format}"`);
45
+ }
46
+ idx = endIdx + 1;
47
+ }
48
+ instructions.push({ kind: "spec", code, repeat });
49
+ }
50
+ return instructions;
51
+ }
15
52
  function structUnpack(format, data) {
16
53
  const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
17
54
  const results = [];
18
55
  let offset = 0;
19
56
  let littleEndian = false;
20
- for (const char of format) {
21
- switch (char) {
22
- case "<":
23
- littleEndian = true;
24
- break;
25
- case ">":
26
- littleEndian = false;
27
- break;
28
- case "x": // Padding byte
29
- offset += 1;
30
- break;
31
- case "c": // Char
32
- results.push(view.getUint8(offset));
33
- offset += 1;
34
- break;
35
- case "b": // Signed 8-bit integer
36
- results.push(view.getInt8(offset));
37
- offset += 1;
38
- break;
39
- case "B": // Unsigned 8-bit integer
40
- results.push(view.getUint8(offset));
41
- offset += 1;
42
- break;
43
- case "h": // Signed 16-bit integer
44
- results.push(view.getInt16(offset, littleEndian));
45
- offset += 2;
46
- break;
47
- case "H": // Unsigned 16-bit integer (big-endian)
48
- results.push(view.getUint16(offset, littleEndian));
49
- offset += 2;
50
- break;
51
- case "i": // Signed 32-bit integer (big-endian)
52
- results.push(view.getInt32(offset, littleEndian));
53
- offset += 4;
54
- break;
55
- case "I": // Unsigned 32-bit integer (big-endian)
56
- results.push(view.getUint32(offset, littleEndian));
57
- offset += 4;
58
- break;
59
- case "l": // Signed 32-bit integer (big-endian)
60
- results.push(view.getInt32(offset, littleEndian));
61
- offset += 4;
62
- break;
63
- case "L": // Unsigned 32-bit integer (big-endian)
64
- results.push(view.getUint32(offset, littleEndian));
65
- offset += 4;
66
- break;
67
- // case "q": // Signed 64-bit integer (big-endian)
68
- // results.push(view.getBigInt64(offset, littleEndian));
69
- // offset += 8;
70
- // break;
71
- // case "Q": // Unsigned 64-bit integer (big-endian)
72
- // results.push(view.getBigUint64(offset, littleEndian));
73
- // offset += 8;
74
- // break;
75
- case "f": // 32-bit float (big-endian)
76
- results.push(view.getFloat32(offset, littleEndian));
77
- offset += 4;
78
- break;
79
- case "d": // 64-bit float (big-endian)
80
- results.push(view.getFloat64(offset, littleEndian));
81
- offset += 8;
82
- break;
83
- default:
84
- throw new Error(`Unknown format character: ${char}`);
57
+ const instructions = parseFormatInstructions(format);
58
+ for (const instruction of instructions) {
59
+ if (instruction.kind === "endian") {
60
+ littleEndian = instruction.littleEndian;
61
+ continue;
62
+ }
63
+ const { code, repeat } = instruction;
64
+ for (let count = 0; count < repeat; count++) {
65
+ switch (code) {
66
+ case "x": // Padding byte
67
+ offset += 1;
68
+ break;
69
+ case "c": // Char
70
+ case "B": // Unsigned 8-bit integer
71
+ case "?": // Boolean (stored as uint8)
72
+ results.push(view.getUint8(offset));
73
+ offset += 1;
74
+ break;
75
+ case "b": // Signed 8-bit integer
76
+ results.push(view.getInt8(offset));
77
+ offset += 1;
78
+ break;
79
+ case "h": // Signed 16-bit integer
80
+ results.push(view.getInt16(offset, littleEndian));
81
+ offset += 2;
82
+ break;
83
+ case "H": // Unsigned 16-bit integer
84
+ results.push(view.getUint16(offset, littleEndian));
85
+ offset += 2;
86
+ break;
87
+ case "i": // Signed 32-bit integer
88
+ case "l": // Signed 32-bit integer
89
+ results.push(view.getInt32(offset, littleEndian));
90
+ offset += 4;
91
+ break;
92
+ case "I": // Unsigned 32-bit integer
93
+ case "L": // Unsigned 32-bit integer
94
+ results.push(view.getUint32(offset, littleEndian));
95
+ offset += 4;
96
+ break;
97
+ // case "q": // Signed 64-bit integer
98
+ // results.push(Number(view.getBigInt64(offset, littleEndian)));
99
+ // offset += 8;
100
+ // break;
101
+ // case "Q": // Unsigned 64-bit integer
102
+ // results.push(Number(view.getBigUint64(offset, littleEndian)));
103
+ // offset += 8;
104
+ // break;
105
+ case "f": // 32-bit float
106
+ results.push(view.getFloat32(offset, littleEndian));
107
+ offset += 4;
108
+ break;
109
+ case "d": // 64-bit float
110
+ results.push(view.getFloat64(offset, littleEndian));
111
+ offset += 8;
112
+ break;
113
+ default:
114
+ throw new Error(`Unknown format character: ${code}`);
115
+ }
85
116
  }
86
117
  }
87
118
  return results;
88
119
  }
89
120
  function structSizeOf(format) {
90
121
  let size = 0;
91
- for (const char of format) {
92
- switch (char) {
93
- case "<":
94
- case ">":
95
- break;
122
+ const instructions = parseFormatInstructions(format);
123
+ for (const instruction of instructions) {
124
+ if (instruction.kind === "endian") {
125
+ continue;
126
+ }
127
+ const { code, repeat } = instruction;
128
+ let unitSize;
129
+ switch (code) {
96
130
  case "x": // Padding byte
97
- size += 1;
98
- break;
99
131
  case "c": // Char
100
132
  case "b": // Signed 8-bit integer
101
133
  case "B": // Unsigned 8-bit integer
102
- size += 1;
134
+ case "?": // Boolean (uint8)
135
+ unitSize = 1;
103
136
  break;
104
137
  case "h": // Signed 16-bit integer
105
138
  case "H": // Unsigned 16-bit integer
106
- size += 2;
139
+ unitSize = 2;
107
140
  break;
108
141
  case "i": // Signed 32-bit integer
109
142
  case "I": // Unsigned 32-bit integer
110
143
  case "l": // Signed 32-bit integer
111
144
  case "L": // Unsigned 32-bit integer
112
- size += 4;
145
+ unitSize = 4;
113
146
  break;
114
147
  // case "q": // Signed 64-bit integer
115
148
  // case "Q": // Unsigned 64-bit integer
116
- // size += 8;
149
+ // unitSize = 8;
117
150
  // break;
118
151
  case "f": // 32-bit float
119
- size += 4;
152
+ unitSize = 4;
120
153
  break;
121
154
  case "d": // 64-bit float
122
- size += 8;
155
+ unitSize = 8;
123
156
  break;
124
157
  default:
125
- throw new Error(`Unknown format character: ${char}`);
158
+ throw new Error(`Unknown format character: ${code}`);
126
159
  }
160
+ size += unitSize * repeat;
127
161
  }
128
162
  return size;
129
163
  }
@@ -133,74 +167,90 @@ function structPack(format, values) {
133
167
  const view = new DataView(buffer);
134
168
  let offset = 0;
135
169
  let littleEndian = false;
136
- const valIdx = 0;
137
- for (let i = 0; i < format.length; i++) {
138
- const char = format[i];
139
- const value = values[valIdx];
140
- switch (char) {
141
- case "<":
142
- littleEndian = true;
143
- break;
144
- case ">":
145
- littleEndian = false;
146
- break;
147
- case "x": // Padding byte
148
- offset += 1;
149
- break;
150
- case "c": // Char
151
- view.setInt8(offset, value);
152
- offset += 1;
153
- break;
154
- case "b": // Signed 8-bit integer
155
- view.setInt8(offset, value);
156
- offset += 1;
157
- break;
158
- case "B": // Unsigned 8-bit integer
159
- view.setUint8(offset, value);
160
- offset += 1;
161
- break;
162
- case "h": // Signed 16-bit integer
163
- view.setInt16(offset, value, littleEndian);
164
- offset += 2;
165
- break;
166
- case "H": // Unsigned 16-bit integer
167
- view.setUint16(offset, value, littleEndian);
168
- offset += 2;
169
- break;
170
- case "i": // Signed 32-bit integer
171
- view.setInt32(offset, value, littleEndian);
172
- offset += 4;
173
- break;
174
- case "I": // Unsigned 32-bit integer
175
- view.setUint32(offset, value, littleEndian);
176
- offset += 4;
177
- break;
178
- case "l": // Signed 32-bit integer
179
- view.setInt32(offset, value, littleEndian);
180
- offset += 4;
181
- break;
182
- case "L": // Unsigned 32-bit integer
183
- view.setUint32(offset, value, littleEndian);
184
- offset += 4;
185
- break;
186
- // case "q": // Signed 64-bit integer
187
- // view.setBigInt64(offset, BigInt(value), littleEndian);
188
- // offset += 8;
189
- // break;
190
- // case "Q": // Unsigned 64-bit integer
191
- // view.setBigUint64(offset, BigInt(value), littleEndian);
192
- // offset += 8;
193
- // break;
194
- case "f": // 32-bit float
195
- view.setFloat32(offset, value, littleEndian);
196
- offset += 4;
197
- break;
198
- case "d": // 64-bit float
199
- view.setFloat64(offset, value, littleEndian);
200
- offset += 8;
201
- break;
202
- default:
203
- throw new Error(`Unknown format character: ${char}`);
170
+ const instructions = parseFormatInstructions(format);
171
+ let valueIdx = 0;
172
+ for (const instruction of instructions) {
173
+ if (instruction.kind === "endian") {
174
+ littleEndian = instruction.littleEndian;
175
+ continue;
176
+ }
177
+ const { code, repeat } = instruction;
178
+ for (let count = 0; count < repeat; count++) {
179
+ switch (code) {
180
+ case "x": // Padding byte
181
+ offset += 1;
182
+ break;
183
+ case "c": // Char
184
+ case "b": // Signed 8-bit integer
185
+ if (valueIdx >= values.length) {
186
+ throw new Error("Insufficient values provided for structPack");
187
+ }
188
+ view.setInt8(offset, values[valueIdx++]);
189
+ offset += 1;
190
+ break;
191
+ case "B": // Unsigned 8-bit integer
192
+ case "?": // Boolean (uint8)
193
+ if (valueIdx >= values.length) {
194
+ throw new Error("Insufficient values provided for structPack");
195
+ }
196
+ view.setUint8(offset, values[valueIdx++]);
197
+ offset += 1;
198
+ break;
199
+ case "h": // Signed 16-bit integer
200
+ if (valueIdx >= values.length) {
201
+ throw new Error("Insufficient values provided for structPack");
202
+ }
203
+ view.setInt16(offset, values[valueIdx++], littleEndian);
204
+ offset += 2;
205
+ break;
206
+ case "H": // Unsigned 16-bit integer
207
+ if (valueIdx >= values.length) {
208
+ throw new Error("Insufficient values provided for structPack");
209
+ }
210
+ view.setUint16(offset, values[valueIdx++], littleEndian);
211
+ offset += 2;
212
+ break;
213
+ case "i": // Signed 32-bit integer
214
+ case "l": // Signed 32-bit integer
215
+ if (valueIdx >= values.length) {
216
+ throw new Error("Insufficient values provided for structPack");
217
+ }
218
+ view.setInt32(offset, values[valueIdx++], littleEndian);
219
+ offset += 4;
220
+ break;
221
+ case "I": // Unsigned 32-bit integer
222
+ case "L": // Unsigned 32-bit integer
223
+ if (valueIdx >= values.length) {
224
+ throw new Error("Insufficient values provided for structPack");
225
+ }
226
+ view.setUint32(offset, values[valueIdx++], littleEndian);
227
+ offset += 4;
228
+ break;
229
+ // case "q": // Signed 64-bit integer
230
+ // view.setBigInt64(offset, BigInt(values[valueIdx++]), littleEndian);
231
+ // offset += 8;
232
+ // break;
233
+ // case "Q": // Unsigned 64-bit integer
234
+ // view.setBigUint64(offset, BigInt(values[valueIdx++]), littleEndian);
235
+ // offset += 8;
236
+ // break;
237
+ case "f": // 32-bit float
238
+ if (valueIdx >= values.length) {
239
+ throw new Error("Insufficient values provided for structPack");
240
+ }
241
+ view.setFloat32(offset, values[valueIdx++], littleEndian);
242
+ offset += 4;
243
+ break;
244
+ case "d": // 64-bit float
245
+ if (valueIdx >= values.length) {
246
+ throw new Error("Insufficient values provided for structPack");
247
+ }
248
+ view.setFloat64(offset, values[valueIdx++], littleEndian);
249
+ offset += 8;
250
+ break;
251
+ default:
252
+ throw new Error(`Unknown format character: ${code}`);
253
+ }
204
254
  }
205
255
  }
206
256
  return new Uint8Array(buffer);
@@ -1 +1 @@
1
- {"version":3,"file":"RaftStruct.js","sourceRoot":"","sources":["../../src/RaftStruct.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RaftStruct.js","sourceRoot":"","sources":["../../src/RaftStruct.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robotical/raftjs",
3
- "version": "2.0.3",
3
+ "version": "2.0.4",
4
4
  "description": "Javascript/TS library for Raft library",
5
5
  "main": "dist/web/main.js",
6
6
  "types": "dist/web/main.d.ts",
@@ -17,10 +17,26 @@ const attrTypeBits: { [key: string]: number } = {
17
17
  };
18
18
 
19
19
  export function getAttrTypeBits(attrType: string): number {
20
- if (attrType in attrTypeBits) {
21
- return attrTypeBits[attrType];
20
+ let repeat = 1;
21
+ let baseAttrType = attrType;
22
+
23
+ const repeatStartIdx = attrType.indexOf("[");
24
+ if (repeatStartIdx >= 0) {
25
+ const repeatEndIdx = attrType.indexOf("]", repeatStartIdx + 1);
26
+ if (repeatEndIdx > repeatStartIdx) {
27
+ const repeatStr = attrType.slice(repeatStartIdx + 1, repeatEndIdx);
28
+ const parsedRepeat = parseInt(repeatStr, 10);
29
+ if (Number.isFinite(parsedRepeat) && parsedRepeat > 0) {
30
+ repeat = parsedRepeat;
31
+ }
32
+ baseAttrType = attrType.slice(0, repeatStartIdx);
33
+ }
34
+ }
35
+
36
+ if (baseAttrType in attrTypeBits) {
37
+ return attrTypeBits[baseAttrType] * repeat;
22
38
  }
23
- return 8;
39
+ return 8 * repeat;
24
40
  }
25
41
 
26
42
  export function isAttrTypeSigned(attrType: string): boolean {