omegga 1.2.4 → 1.2.5

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.
@@ -1 +1 @@
1
- {"root":["../src/index.ts","../src/logger.ts","../src/main.ts","../src/plugin.ts","../src/softconfig.ts","../src/version.ts","../src/brickadia/config.ts","../src/brickadia/presets.ts","../src/brickadia/server.ts","../src/brickadia/types.ts","../src/cli/auth.ts","../src/cli/config.ts","../src/cli/index.ts","../src/cli/installer.ts","../src/cli/plugin.ts","../src/cli/terminal.ts","../src/config/authorizer.ts","../src/config/index.ts","../src/config/reader.ts","../src/config/types.ts","../src/config/validator.ts","../src/config/writer.ts","../src/config/formats/format_js.ts","../src/config/formats/format_yml.ts","../src/omegga/auth.ts","../src/omegga/commandInjector.ts","../src/omegga/index.ts","../src/omegga/logWrangler.ts","../src/omegga/player.ts","../src/omegga/plugin.ts","../src/omegga/server.ts","../src/omegga/types.ts","../src/omegga/wrapper.ts","../src/omegga/matchers/auth.ts","../src/omegga/matchers/chat.ts","../src/omegga/matchers/command.ts","../src/omegga/matchers/exit.ts","../src/omegga/matchers/index.ts","../src/omegga/matchers/init.ts","../src/omegga/matchers/interact.ts","../src/omegga/matchers/join.ts","../src/omegga/matchers/leave.ts","../src/omegga/matchers/mapChange.ts","../src/omegga/matchers/minigameJoin.ts","../src/omegga/matchers/types.ts","../src/omegga/matchers/version.ts","../src/omegga/plugin/disrequire.d.ts","../src/omegga/plugin/interface.ts","../src/omegga/plugin/plugin_jsonrpc_stdio.ts","../src/omegga/plugin/plugin_node_safe.ts","../src/omegga/plugin/plugin_node_unsafe.ts","../src/omegga/plugin/plugin_node_safe/proxyOmegga.ts","../src/omegga/plugin/plugin_node_safe/worker.ts","../src/updater/index.ts","../src/updater/steam-acf2json.d.ts","../src/updater/steam.ts","../src/util/chat.ts","../src/util/color.ts","../src/util/file.ts","../src/util/index.ts","../src/util/map.ts","../src/util/pattern.ts","../src/util/time.ts","../src/util/uuid.ts","../src/util/wsl.ts","../src/util/brick/checkBounds.ts","../src/util/brick/constants.ts","../src/util/brick/displayName.ts","../src/util/brick/getBounds.ts","../src/util/brick/getBrickSize.ts","../src/util/brick/getScaleAxis.ts","../src/util/brick/index.ts","../src/util/brick/rotate.ts","../src/util/brick/setOwnership.ts","../src/webserver/index.ts","../src/webserver/backend/api.ts","../src/webserver/backend/calendar.ts","../src/webserver/backend/database.ts","../src/webserver/backend/index.ts","../src/webserver/backend/metrics.ts","../src/webserver/backend/types.d.ts","../src/webserver/backend/util.ts"],"version":"5.8.3"}
1
+ {"root":["../src/index.ts","../src/logger.ts","../src/main.ts","../src/plugin.ts","../src/softconfig.ts","../src/version.ts","../src/brickadia/config.ts","../src/brickadia/presets.ts","../src/brickadia/server.ts","../src/brickadia/types.ts","../src/cli/auth.ts","../src/cli/config.ts","../src/cli/index.ts","../src/cli/installer.ts","../src/cli/plugin.ts","../src/cli/terminal.ts","../src/config/authorizer.ts","../src/config/index.ts","../src/config/reader.ts","../src/config/types.ts","../src/config/validator.ts","../src/config/writer.ts","../src/config/formats/format_js.ts","../src/config/formats/format_yml.ts","../src/omegga/auth.ts","../src/omegga/commandInjector.ts","../src/omegga/index.ts","../src/omegga/logWrangler.ts","../src/omegga/player.ts","../src/omegga/plugin.ts","../src/omegga/server.ts","../src/omegga/types.ts","../src/omegga/wrapper.ts","../src/omegga/matchers/auth.ts","../src/omegga/matchers/chat.ts","../src/omegga/matchers/command.ts","../src/omegga/matchers/exit.ts","../src/omegga/matchers/index.ts","../src/omegga/matchers/init.ts","../src/omegga/matchers/interact.ts","../src/omegga/matchers/join.ts","../src/omegga/matchers/leave.ts","../src/omegga/matchers/mapChange.ts","../src/omegga/matchers/minigameJoin.ts","../src/omegga/matchers/types.ts","../src/omegga/matchers/version.ts","../src/omegga/plugin/disrequire.d.ts","../src/omegga/plugin/interface.ts","../src/omegga/plugin/plugin_jsonrpc_stdio.ts","../src/omegga/plugin/plugin_node_safe.ts","../src/omegga/plugin/plugin_node_unsafe.ts","../src/omegga/plugin/plugin_node_safe/proxyOmegga.ts","../src/omegga/plugin/plugin_node_safe/worker.ts","../src/updater/index.ts","../src/updater/steam-acf2json.d.ts","../src/updater/steam.ts","../src/util/brdb.ts","../src/util/chat.ts","../src/util/color.ts","../src/util/file.ts","../src/util/index.ts","../src/util/map.ts","../src/util/pattern.ts","../src/util/time.ts","../src/util/uuid.ts","../src/util/wsl.ts","../src/util/brick/checkBounds.ts","../src/util/brick/constants.ts","../src/util/brick/displayName.ts","../src/util/brick/getBounds.ts","../src/util/brick/getBrickSize.ts","../src/util/brick/getScaleAxis.ts","../src/util/brick/index.ts","../src/util/brick/rotate.ts","../src/util/brick/setOwnership.ts","../src/webserver/index.ts","../src/webserver/backend/api.ts","../src/webserver/backend/calendar.ts","../src/webserver/backend/database.ts","../src/webserver/backend/index.ts","../src/webserver/backend/metrics.ts","../src/webserver/backend/types.d.ts","../src/webserver/backend/util.ts"],"version":"5.8.3"}
@@ -0,0 +1,31 @@
1
+ /** read the meta and owner data from a brdb file */
2
+ export declare function readBrdbMeta(path: string): {
3
+ meta: {
4
+ world: {
5
+ environment: string;
6
+ };
7
+ bundle: {
8
+ type: "World";
9
+ iD: string;
10
+ name: string;
11
+ version: string;
12
+ tags: string[];
13
+ authors: string[];
14
+ createdAt: string;
15
+ updatedAt: string;
16
+ description: string;
17
+ dependencies: string[];
18
+ };
19
+ };
20
+ owners: {
21
+ id: string;
22
+ name: string;
23
+ display_name: string;
24
+ entity_count: number;
25
+ brick_count: number;
26
+ component_count: number;
27
+ wire_count: number;
28
+ }[];
29
+ };
30
+ /** read the screenshot from a brdb file */
31
+ export declare function readBrdbScreenshot(path: string): Buffer | null;
@@ -0,0 +1,567 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.readBrdbMeta = readBrdbMeta;
7
+ exports.readBrdbScreenshot = readBrdbScreenshot;
8
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
9
+ const fs_1 = require("fs");
10
+ const zlib_1 = require("zlib");
11
+ /** Open a brdb file if it exists */
12
+ function openBrdb(path) {
13
+ if (!(0, fs_1.existsSync)(path))
14
+ return null;
15
+ try {
16
+ return new better_sqlite3_1.default(path, { readonly: true, fileMustExist: true });
17
+ }
18
+ catch (err) {
19
+ console.error(`Error reading BRDB metadata from ${path}:`, err);
20
+ return null;
21
+ }
22
+ }
23
+ /** Unsafely read a file from the BRDB database */
24
+ function readFile(db, name) {
25
+ const row = db
26
+ .prepare(`SELECT compression, size_uncompressed, size_compressed, content
27
+ FROM files
28
+ LEFT JOIN blobs ON files.content_id = blobs.blob_id
29
+ WHERE name = ? AND deleted_at IS NULL;`)
30
+ .get(name);
31
+ if (!row)
32
+ return null;
33
+ if (row.content === null)
34
+ return null;
35
+ if (!row.compression || row.size_compressed >= row.size_uncompressed)
36
+ return row.content;
37
+ return (0, zlib_1.zstdDecompressSync)(row.content, {
38
+ maxOutputLength: row.size_uncompressed,
39
+ params: {},
40
+ });
41
+ }
42
+ /** read the meta and owner data from a brdb file */
43
+ // TODO: specify a create/delete time range for the reading the owner data to allow "browsing" of revisions
44
+ function readBrdbMeta(path) {
45
+ const db = openBrdb(path);
46
+ if (!db)
47
+ return null;
48
+ try {
49
+ const worldJson = JSON.parse(readFile(db, 'World.json').toString('utf8'));
50
+ const bundleJson = JSON.parse(readFile(db, 'Bundle.json').toString('utf8'));
51
+ // parse the owner schema and its data
52
+ const ownersSchemaBuf = readFile(db, 'Owners.schema');
53
+ const ownersBuf = readFile(db, 'Owners.mps');
54
+ // Convert the struct of arrays into an array of structs
55
+ const owners = [];
56
+ if (ownersBuf && ownersSchemaBuf) {
57
+ const ownersSchema = readBrdbSchema(ownersSchemaBuf);
58
+ const { value: ownersMps } = readBrdbType(ownersBuf, 0, ownersSchema, 'BRSavedOwnerTableSoA');
59
+ for (let i = 0; i < ownersMps['UserIds'].length; i++) {
60
+ const id = guidToUuid(ownersMps['UserIds'][i]);
61
+ const name = ownersMps['UserNames'][i];
62
+ const display_name = ownersMps['DisplayNames'][i];
63
+ const entity_count = ownersMps['EntityCounts'][i];
64
+ const brick_count = ownersMps['BrickCounts'][i];
65
+ const component_count = ownersMps['ComponentCounts'][i];
66
+ const wire_count = ownersMps['WireCounts'][i];
67
+ owners.push({
68
+ id,
69
+ name,
70
+ display_name,
71
+ entity_count,
72
+ brick_count,
73
+ component_count,
74
+ wire_count,
75
+ });
76
+ }
77
+ }
78
+ db.close();
79
+ return {
80
+ meta: { world: worldJson, bundle: bundleJson },
81
+ owners,
82
+ };
83
+ }
84
+ catch (err) {
85
+ console.error(`Error reading BRDB metadata from ${path}:`, err);
86
+ db.close();
87
+ return null;
88
+ }
89
+ }
90
+ /** read the screenshot from a brdb file */
91
+ function readBrdbScreenshot(path) {
92
+ const db = openBrdb(path);
93
+ if (!db)
94
+ return null;
95
+ try {
96
+ const file = readFile(db, 'Screenshot.jpg');
97
+ db.close();
98
+ return file;
99
+ }
100
+ catch (err) {
101
+ console.error(`Error reading BRDB screenshot from ${path}:`, err);
102
+ db.close();
103
+ }
104
+ }
105
+ /** get the msgpack format from a byte */
106
+ function mpMarker(byte) {
107
+ if ((byte & 128) === 0)
108
+ return ['fixpos', byte & 63];
109
+ if ((byte & 240) === 128)
110
+ return ['fixmap', byte & 15];
111
+ if ((byte & 240) === 144)
112
+ return ['fixarray', byte & 15];
113
+ if ((byte & 224) === 160)
114
+ return ['fixstr', byte & 31];
115
+ if ((byte & 224) === 224)
116
+ return ['fixneg', -(byte & 31)];
117
+ switch (byte) {
118
+ case 192:
119
+ return ['nil', null];
120
+ case 194:
121
+ return ['false', null];
122
+ case 195:
123
+ return ['true', null];
124
+ case 196:
125
+ return ['bin8', null];
126
+ case 197:
127
+ return ['bin16', null];
128
+ case 198:
129
+ return ['bin32', null];
130
+ case 199:
131
+ return ['ext8', null];
132
+ case 200:
133
+ return ['ext16', null];
134
+ case 201:
135
+ return ['ext32', null];
136
+ case 202:
137
+ return ['float32', null];
138
+ case 203:
139
+ return ['float64', null];
140
+ case 204:
141
+ return ['uint8', null];
142
+ case 205:
143
+ return ['uint16', null];
144
+ case 206:
145
+ return ['uint32', null];
146
+ case 207:
147
+ return ['uint64', null];
148
+ case 208:
149
+ return ['int8', null];
150
+ case 209:
151
+ return ['int16', null];
152
+ case 210:
153
+ return ['int32', null];
154
+ case 211:
155
+ return ['int64', null];
156
+ case 212:
157
+ return ['fixext1', null];
158
+ case 213:
159
+ return ['fixext2', null];
160
+ case 214:
161
+ return ['fixext4', null];
162
+ case 215:
163
+ return ['fixext8', null];
164
+ case 216:
165
+ return ['fixext16', null];
166
+ case 217:
167
+ return ['str8', null];
168
+ case 218:
169
+ return ['str16', null];
170
+ case 219:
171
+ return ['str32', null];
172
+ case 220:
173
+ return ['array16', null];
174
+ case 221:
175
+ return ['array32', null];
176
+ case 222:
177
+ return ['map16', null];
178
+ case 223:
179
+ return ['map32', null];
180
+ default:
181
+ return null;
182
+ }
183
+ }
184
+ function mpString(buf, offset) {
185
+ const byte = buf[offset];
186
+ const marker = mpMarker(byte);
187
+ if (!marker) {
188
+ throw new Error(`Invalid msgpack format byte: ${byte.toString(16)}`);
189
+ }
190
+ return mpStringContent(buf, marker, offset + 1);
191
+ }
192
+ function mpStringContent(buf, marker, offset) {
193
+ const [m, size] = marker;
194
+ if (m !== 'fixstr' && m !== 'str8' && m !== 'str16' && m !== 'str32') {
195
+ throw new Error(`Expected string format, got ${m}`);
196
+ }
197
+ let strSize = 0;
198
+ if (m === 'fixstr') {
199
+ strSize = size;
200
+ }
201
+ else if (m === 'str8') {
202
+ strSize = buf[offset];
203
+ offset++;
204
+ }
205
+ else if (m === 'str16') {
206
+ strSize = buf.readUInt16BE(offset);
207
+ offset += 2;
208
+ }
209
+ else if (m === 'str32') {
210
+ strSize = buf.readUInt32BE(offset);
211
+ offset += 4;
212
+ }
213
+ if (!strSize)
214
+ return { str: '', offset };
215
+ const str = buf.toString('utf8', offset, offset + strSize);
216
+ offset += strSize;
217
+ return { str, offset };
218
+ }
219
+ function mpInt(buf, offset) {
220
+ const [marker, num] = mpMarker(buf[offset]);
221
+ offset++;
222
+ if (!marker)
223
+ throw new Error(`Invalid msgpack format byte: ${buf[offset - 1].toString(16)}`);
224
+ if (marker === 'fixpos')
225
+ return { num, offset };
226
+ if (marker === 'fixneg')
227
+ return { num, offset };
228
+ if (marker === 'uint8')
229
+ return {
230
+ num: buf.readUInt8(offset++),
231
+ offset,
232
+ };
233
+ if (marker === 'uint16') {
234
+ const num = buf.readUInt16BE(offset);
235
+ offset += 2;
236
+ return { num, offset };
237
+ }
238
+ if (marker === 'uint32') {
239
+ const num = buf.readUInt32BE(offset);
240
+ offset += 4;
241
+ return { num, offset };
242
+ }
243
+ if (marker === 'uint64') {
244
+ const num = BigInt.asUintN(64, BigInt(buf.readBigUInt64BE(offset)));
245
+ offset += 8;
246
+ return { num: Number(num), offset };
247
+ }
248
+ if (marker === 'int8') {
249
+ const num = buf.readInt8(offset);
250
+ offset++;
251
+ return { num, offset };
252
+ }
253
+ if (marker === 'int16') {
254
+ const num = buf.readInt16BE(offset);
255
+ offset += 2;
256
+ return { num, offset };
257
+ }
258
+ if (marker === 'int32') {
259
+ const num = buf.readInt32BE(offset);
260
+ offset += 4;
261
+ return { num, offset };
262
+ }
263
+ if (marker === 'int64') {
264
+ const num = BigInt.asIntN(64, BigInt(buf.readBigInt64BE(offset)));
265
+ offset += 8;
266
+ return { num: Number(num), offset };
267
+ }
268
+ throw new Error(`Expected integer format, got ${marker}`);
269
+ }
270
+ function readBrdbSchema(buf) {
271
+ const enums = {};
272
+ const structs = {};
273
+ let offset = 0;
274
+ const next = () => {
275
+ const byte = buf[offset];
276
+ offset++;
277
+ return byte;
278
+ };
279
+ const nextMarker = () => {
280
+ const byte = next();
281
+ const kind = mpMarker(byte);
282
+ if (!kind) {
283
+ throw new Error(`Invalid msgpack format byte: ${byte.toString(16)}`);
284
+ }
285
+ return kind;
286
+ };
287
+ const mapLen = (name) => {
288
+ const [kind, val] = nextMarker();
289
+ let len = 0;
290
+ switch (kind) {
291
+ case 'fixmap':
292
+ len = val;
293
+ break;
294
+ case 'map16':
295
+ len = buf.readUInt16BE(offset);
296
+ offset += 2;
297
+ break;
298
+ case 'map32':
299
+ len = buf.readUInt32BE(offset);
300
+ offset += 4;
301
+ break;
302
+ default:
303
+ throw new Error(`Expected ${name !== null && name !== void 0 ? name : 'unknown'} map len, got ${kind}`);
304
+ }
305
+ return len;
306
+ };
307
+ const header = nextMarker();
308
+ if (header[0] !== 'fixarray' && header[1] !== 2) {
309
+ throw new Error(`Expected schema header to be fixarray of length 2, got ${header[0]} ${header[1]}`);
310
+ }
311
+ const numEnums = mapLen('enums');
312
+ for (let i = 0; i < numEnums; i++) {
313
+ let name;
314
+ ({ str: name, offset } = mpString(buf, offset));
315
+ enums[name] = {};
316
+ const values = mapLen(`enum ${name} values`);
317
+ for (let j = 0; j < values; j++) {
318
+ let key;
319
+ ({ str: key, offset } = mpString(buf, offset));
320
+ let value;
321
+ ({ num: value, offset } = mpInt(buf, offset));
322
+ enums[name][key] = value;
323
+ enums[name][value] = key;
324
+ }
325
+ }
326
+ const numStructs = mapLen('structs');
327
+ for (let i = 0; i < numStructs; i++) {
328
+ let name;
329
+ ({ str: name, offset } = mpString(buf, offset));
330
+ const props = {};
331
+ const numProps = mapLen(`struct ${name} properties`);
332
+ for (let j = 0; j < numProps; j++) {
333
+ let propName;
334
+ ({ str: propName, offset } = mpString(buf, offset));
335
+ const [kind, val] = nextMarker();
336
+ // Basic types
337
+ if (kind === 'fixstr' || kind === 'str8' || kind === 'str16') {
338
+ let ty;
339
+ ({ str: ty, offset } = mpStringContent(buf, [kind, val], offset));
340
+ props[propName] = { kind: 'literal', ty };
341
+ }
342
+ else if (kind === 'fixarray' && val == 1) {
343
+ let ty;
344
+ ({ str: ty, offset } = mpString(buf, offset));
345
+ props[propName] = { kind: 'array', ty };
346
+ }
347
+ else if (kind === 'fixarray' && val == 2) {
348
+ let ty;
349
+ ({ str: ty, offset } = mpString(buf, offset));
350
+ if (nextMarker()[0] !== 'nil')
351
+ throw new Error(`Expected nil after flatarray type`);
352
+ props[propName] = { kind: 'flatarray', ty };
353
+ }
354
+ else if (kind === 'fixmap' && val == 1) {
355
+ let key_ty;
356
+ let val_ty;
357
+ ({ str: key_ty, offset } = mpString(buf, offset));
358
+ ({ str: val_ty, offset } = mpString(buf, offset));
359
+ props[propName] = { kind: 'map', key: key_ty, value: val_ty };
360
+ }
361
+ else {
362
+ throw new Error(`Expected property type for ${name}.${propName}, got ${kind}`);
363
+ }
364
+ }
365
+ structs[name] = { name, props };
366
+ }
367
+ return { enums, structs };
368
+ }
369
+ function mpArrayLen(buf, offset) {
370
+ const [kind, val] = mpMarker(buf[offset]);
371
+ offset++;
372
+ let len = 0;
373
+ switch (kind) {
374
+ case 'fixarray':
375
+ len = val;
376
+ break;
377
+ case 'array16':
378
+ len = buf.readUInt16BE(offset);
379
+ offset += 2;
380
+ break;
381
+ case 'array32':
382
+ len = buf.readUInt32BE(offset);
383
+ offset += 4;
384
+ break;
385
+ default:
386
+ throw new Error(`Expected array length, got ${kind}`);
387
+ }
388
+ return { len, offset };
389
+ }
390
+ function mpBinLen(buf, offset) {
391
+ const [kind, _] = mpMarker(buf[offset]);
392
+ offset++;
393
+ let len = 0;
394
+ switch (kind) {
395
+ case 'bin8':
396
+ len = buf.readUInt8(offset);
397
+ offset++;
398
+ break;
399
+ case 'bin16':
400
+ len = buf.readUInt16BE(offset);
401
+ offset += 2;
402
+ break;
403
+ case 'bin32':
404
+ len = buf.readUInt32BE(offset);
405
+ offset += 4;
406
+ break;
407
+ default:
408
+ throw new Error(`Expected binary length, got ${kind}`);
409
+ }
410
+ return { len, offset };
411
+ }
412
+ // this is not a full brdb impl so I'm only implementing what is required
413
+ // to read the owner data
414
+ function readBrdbType(buf, offset, schema, ty) {
415
+ switch (ty) {
416
+ case 'u32':
417
+ let num;
418
+ ({ num, offset } = mpInt(buf, offset));
419
+ return { value: num, offset };
420
+ case 'str':
421
+ let str;
422
+ ({ str, offset } = mpString(buf, offset));
423
+ return { value: str, offset };
424
+ default:
425
+ if (!(ty in schema.structs)) {
426
+ throw new Error(`Unknown type ${ty} in schema`);
427
+ }
428
+ const struct = schema.structs[ty];
429
+ const value = {};
430
+ for (const [propName, propType] of Object.entries(struct.props)) {
431
+ switch (propType.kind) {
432
+ // other soa fields
433
+ case 'array':
434
+ let arrLen;
435
+ ({ len: arrLen, offset } = mpArrayLen(buf, offset));
436
+ const arr = [];
437
+ for (let i = 0; i < arrLen; i++) {
438
+ const item = readBrdbType(buf, offset, schema, propType.ty);
439
+ arr.push(item.value);
440
+ offset = item.offset;
441
+ }
442
+ value[propName] = arr;
443
+ break;
444
+ // userids
445
+ case 'flatarray':
446
+ let flatBinSize;
447
+ ({ len: flatBinSize, offset } = mpBinLen(buf, offset));
448
+ const flatTySize = flatTypeSize(schema, propType.ty);
449
+ const numItems = flatBinSize / flatTySize;
450
+ const flatArr = [];
451
+ for (let i = 0; i < numItems; i++) {
452
+ const item = readFlatBrdbType(buf, offset, schema, propType.ty);
453
+ flatArr.push(item.value);
454
+ offset = item.offset;
455
+ }
456
+ value[propName] = flatArr;
457
+ break;
458
+ }
459
+ }
460
+ return { value, offset };
461
+ }
462
+ }
463
+ function readFlatBrdbType(buf, offset, schema, ty) {
464
+ switch (ty) {
465
+ case 'u8':
466
+ const u8 = buf.readUInt8(offset);
467
+ offset++;
468
+ return { value: u8, offset };
469
+ case 'u16':
470
+ const u16 = buf.readUInt16LE(offset);
471
+ offset += 2;
472
+ return { value: u16, offset };
473
+ case 'u32':
474
+ const u32 = buf.readUInt32LE(offset);
475
+ offset += 4;
476
+ return { value: u32, offset };
477
+ case 'u64':
478
+ const u64 = BigInt.asUintN(64, BigInt(buf.readBigUInt64LE(offset)));
479
+ offset += 8;
480
+ return { value: Number(u64), offset };
481
+ case 'i8':
482
+ const i8 = buf.readInt8(offset);
483
+ offset++;
484
+ return { value: i8, offset };
485
+ case 'i16':
486
+ const i16 = buf.readInt16LE(offset);
487
+ offset += 2;
488
+ return { value: i16, offset };
489
+ case 'i32':
490
+ const i32 = buf.readInt32LE(offset);
491
+ offset += 4;
492
+ return { value: i32, offset };
493
+ case 'i64':
494
+ const i64 = BigInt.asIntN(64, BigInt(buf.readBigInt64LE(offset)));
495
+ offset += 8;
496
+ return { value: Number(i64), offset };
497
+ case 'f32':
498
+ const f32 = buf.readFloatLE(offset);
499
+ offset += 4;
500
+ return { value: f32, offset };
501
+ case 'f64':
502
+ const f64 = buf.readDoubleLE(offset);
503
+ offset += 8;
504
+ return { value: f64, offset };
505
+ default:
506
+ if (!(ty in schema.structs)) {
507
+ throw new Error(`Unknown type ${ty} in schema`);
508
+ }
509
+ const struct = schema.structs[ty];
510
+ const value = {};
511
+ for (const [propName, propType] of Object.entries(struct.props)) {
512
+ if (propType.kind !== 'literal') {
513
+ throw new Error(`Expected literal type for ${ty} property, got ${propType.kind}`);
514
+ }
515
+ const item = readFlatBrdbType(buf, offset, schema, propType.ty);
516
+ value[propName] = item.value;
517
+ offset = item.offset;
518
+ }
519
+ return { value, offset };
520
+ }
521
+ }
522
+ function flatTypeSize(schema, ty) {
523
+ switch (ty) {
524
+ case 'u8':
525
+ return 1;
526
+ case 'u16':
527
+ return 2;
528
+ case 'u32':
529
+ return 4;
530
+ case 'u64':
531
+ return 8;
532
+ case 'i8':
533
+ return 1;
534
+ case 'i16':
535
+ return 2;
536
+ case 'i32':
537
+ return 4;
538
+ case 'i64':
539
+ return 8;
540
+ case 'f32':
541
+ return 4;
542
+ case 'f64':
543
+ return 8;
544
+ default:
545
+ if (!(ty in schema.structs)) {
546
+ throw new Error(`Unknown type ${ty} in schema`);
547
+ }
548
+ const struct = schema.structs[ty];
549
+ let size = 0;
550
+ for (const propType of Object.values(struct.props)) {
551
+ if (propType.kind !== 'literal') {
552
+ throw new Error(`Expected literal type for ${ty} property, got ${propType.kind}`);
553
+ }
554
+ size += flatTypeSize(schema, propType.ty);
555
+ }
556
+ return size;
557
+ }
558
+ }
559
+ /** convert a set of 4 u32s into a uuidv4 */
560
+ function guidToUuid(guid) {
561
+ const hex = (num) => num.toString(16).padStart(8, '0');
562
+ // concatenate them all together
563
+ const joined = `${hex(guid.A)}${hex(guid.B)}${hex(guid.C)}${hex(guid.D)}`;
564
+ // format as uuidv4
565
+ return `${joined.slice(0, 8)}-${joined.slice(8, 12)}-${joined.slice(12, 16)}-${joined.slice(16, 20)}-${joined.slice(20)}`;
566
+ }
567
+ //# sourceMappingURL=brdb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brdb.js","sourceRoot":"","sources":["../../src/util/brdb.ts"],"names":[],"mappings":"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"}