@bloopjs/bloop 0.0.88 → 0.0.89

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
- {"version":3,"file":"bloop.d.ts","sourceRoot":"","sources":["../src/bloop.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAQjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,GAAG,IAAI;IACrC,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IAEH;;OAEG;IAEH;;;OAGG;IACH,GAAG,CAAC,EAAE,CAAC,CAAC;CAET,CAAC;AAEF,qBAAa,KAAK,CAAC,EAAE,SAAS,WAAW;;IAKvC;;OAEG;IACH,MAAM,CAAC,MAAM,CAGX,CAAC,SAAS,GAAG,EAGb,IAAI,GAAE,SAAS,CAAC,CAAC,CAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAI5C;;OAEG;gBACS,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,YAAK,EAAE,kBAAkB,EAAE,MAAM;IAoBrE;;OAEG;IACH,IAAI,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,CAEjB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAEnC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM;IAMjD;;OAEG;IACH,KAAK,EAAE,WAAW,CAmNhB;CACH;AAUD,KAAK,MAAM,CAAC,CAAC,SAAS,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"bloop.d.ts","sourceRoot":"","sources":["../src/bloop.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAQjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,GAAG,IAAI;IACrC,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IAEH;;OAEG;IAEH;;;OAGG;IACH,GAAG,CAAC,EAAE,CAAC,CAAC;CAET,CAAC;AAEF,qBAAa,KAAK,CAAC,EAAE,SAAS,WAAW;;IAKvC;;OAEG;IACH,MAAM,CAAC,MAAM,CAGX,CAAC,SAAS,GAAG,EAGb,IAAI,GAAE,SAAS,CAAC,CAAC,CAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAI5C;;OAEG;gBACS,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,YAAK,EAAE,kBAAkB,EAAE,MAAM;IAoBrE;;OAEG;IACH,IAAI,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,CAEjB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAEnC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM;IAMjD;;OAEG;IACH,KAAK,EAAE,WAAW,CAgPhB;CACH;AAUD,KAAK,MAAM,CAAC,CAAC,SAAS,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC"}
package/dist/mod.js CHANGED
@@ -73,16 +73,21 @@ __export(exports_engine, {
73
73
  SNAPSHOT_HEADER_ENGINE_LEN_OFFSET: () => SNAPSHOT_HEADER_ENGINE_LEN_OFFSET,
74
74
  PlayerInputContext: () => PlayerInputContext,
75
75
  PLAYER_INPUTS_SIZE: () => PLAYER_INPUTS_SIZE,
76
+ PLAYER_INPUTS_MOUSE_CTX_OFFSET: () => PLAYER_INPUTS_MOUSE_CTX_OFFSET,
77
+ PLAYER_INPUTS_KEY_CTX_OFFSET: () => PLAYER_INPUTS_KEY_CTX_OFFSET,
76
78
  NetContext: () => NetContext,
77
79
  NET_CTX_OFFSET: () => NET_CTX_OFFSET,
78
80
  MouseContext: () => MouseContext,
79
- MOUSE_OFFSET: () => MOUSE_OFFSET,
80
- MOUSE_BUTTONS_OFFSET: () => MOUSE_BUTTONS_OFFSET,
81
+ MOUSE_OFFSET: () => PLAYER_INPUTS_MOUSE_CTX_OFFSET,
82
+ MOUSE_CTX_SIZE: () => MOUSE_CTX_SIZE,
83
+ MOUSE_CTX_BUTTON_STATES_OFFSET: () => MOUSE_CTX_BUTTON_STATES_OFFSET,
84
+ MOUSE_BUTTONS_OFFSET: () => MOUSE_CTX_BUTTON_STATES_OFFSET,
81
85
  MAX_ROLLBACK_FRAMES: () => MAX_ROLLBACK_FRAMES,
82
86
  MAX_PLAYERS: () => MAX_PLAYERS,
83
87
  KeyboardContext: () => KeyboardContext,
84
- KEYBOARD_SIZE: () => KEYBOARD_SIZE,
85
- KEYBOARD_OFFSET: () => KEYBOARD_OFFSET,
88
+ KEY_CTX_SIZE: () => KEY_CTX_SIZE,
89
+ KEYBOARD_SIZE: () => KEY_CTX_SIZE,
90
+ KEYBOARD_OFFSET: () => PLAYER_INPUTS_KEY_CTX_OFFSET,
86
91
  InputContext: () => InputContext,
87
92
  INPUT_CTX_SIZE: () => INPUT_CTX_SIZE,
88
93
  INPUT_CTX_OFFSET: () => INPUT_CTX_OFFSET,
@@ -378,33 +383,38 @@ var NetJoinFailReason;
378
383
  NetJoinFailReason2[NetJoinFailReason2["room_not_found"] = 3] = "room_not_found";
379
384
  NetJoinFailReason2[NetJoinFailReason2["already_in_room"] = 4] = "already_in_room";
380
385
  })(NetJoinFailReason ||= {});
381
- var MAX_PLAYERS = 12;
382
- var KEYBOARD_OFFSET = 0;
383
- var KEYBOARD_SIZE = 256;
384
- var MOUSE_OFFSET = 256;
385
- var MOUSE_BUTTONS_OFFSET = 16;
386
+ var TIME_CTX_FRAME_OFFSET = 0;
387
+ var TIME_CTX_DT_MS_OFFSET = 4;
388
+ var TIME_CTX_TOTAL_MS_OFFSET = 8;
389
+ var PEER_CTX_CONNECTED_OFFSET = 0;
390
+ var PEER_CTX_SEQ_OFFSET = 2;
391
+ var PEER_CTX_ACK_OFFSET = 4;
392
+ var PEER_CTX_SIZE = 8;
393
+ var NET_CTX_PEER_COUNT_OFFSET = 0;
394
+ var NET_CTX_LOCAL_PEER_ID_OFFSET = 1;
395
+ var NET_CTX_IN_SESSION_OFFSET = 2;
396
+ var NET_CTX_STATUS_OFFSET = 3;
397
+ var NET_CTX_MATCH_FRAME_OFFSET = 4;
398
+ var NET_CTX_SESSION_START_FRAME_OFFSET = 8;
399
+ var NET_CTX_ROOM_CODE_OFFSET = 12;
400
+ var NET_CTX_WANTS_ROOM_CODE_OFFSET = 20;
401
+ var NET_CTX_WANTS_DISCONNECT_OFFSET = 28;
402
+ var NET_CTX_PEERS_OFFSET = 32;
403
+ var NET_CTX_LAST_ROLLBACK_DEPTH_OFFSET = 128;
404
+ var NET_CTX_TOTAL_ROLLBACKS_OFFSET = 132;
405
+ var NET_CTX_FRAMES_RESIMULATED_OFFSET = 136;
406
+ var MOUSE_CTX_X_OFFSET = 0;
407
+ var MOUSE_CTX_Y_OFFSET = 4;
408
+ var MOUSE_CTX_WHEEL_X_OFFSET = 8;
409
+ var MOUSE_CTX_WHEEL_Y_OFFSET = 12;
410
+ var MOUSE_CTX_BUTTON_STATES_OFFSET = 16;
411
+ var MOUSE_CTX_SIZE = 24;
412
+ var KEY_CTX_SIZE = 256;
413
+ var PLAYER_INPUTS_KEY_CTX_OFFSET = 0;
414
+ var PLAYER_INPUTS_MOUSE_CTX_OFFSET = 256;
386
415
  var PLAYER_INPUTS_SIZE = 280;
387
- var INPUT_CTX_SIZE = MAX_PLAYERS * PLAYER_INPUTS_SIZE;
388
- var EVENT_PAYLOAD_SIZE = 8;
389
- var EVENT_PAYLOAD_ALIGN = 4;
390
- function keyToKeyCode(key) {
391
- return Key[key];
392
- }
393
- function keyCodeToKey(code) {
394
- return Key[code];
395
- }
396
- function mouseButtonToMouseButtonCode(button) {
397
- return MouseButton[button];
398
- }
399
- function mouseButtonCodeToMouseButton(code) {
400
- return MouseButton[code];
401
- }
402
- function inputSourceToInputSourceCode(source) {
403
- return InputSource[source];
404
- }
405
- function inputSourceCodeToInputSource(code) {
406
- return InputSource[code];
407
- }
416
+ var INPUT_CTX_SIZE = 3360;
417
+ var MAX_PLAYERS = 12;
408
418
 
409
419
  class PlayerInputContext {
410
420
  #dataView;
@@ -415,13 +425,13 @@ class PlayerInputContext {
415
425
  }
416
426
  get keys() {
417
427
  if (!this.#keys) {
418
- this.#keys = new KeyboardContext(new DataView(this.#dataView.buffer, this.#dataView.byteOffset + KEYBOARD_OFFSET));
428
+ this.#keys = new KeyboardContext(new DataView(this.#dataView.buffer, this.#dataView.byteOffset + PLAYER_INPUTS_KEY_CTX_OFFSET));
419
429
  }
420
430
  return this.#keys;
421
431
  }
422
432
  get mouse() {
423
433
  if (!this.#mouse) {
424
- this.#mouse = new MouseContext(new DataView(this.#dataView.buffer, this.#dataView.byteOffset + MOUSE_OFFSET));
434
+ this.#mouse = new MouseContext(new DataView(this.#dataView.buffer, this.#dataView.byteOffset + PLAYER_INPUTS_MOUSE_CTX_OFFSET));
425
435
  }
426
436
  return this.#mouse;
427
437
  }
@@ -446,6 +456,9 @@ class InputContext {
446
456
  this.#dataView = dataView;
447
457
  this.#buildPlayers();
448
458
  }
459
+ hasDataView() {
460
+ return !!this.#dataView;
461
+ }
449
462
  #buildPlayers() {
450
463
  this.#players = [];
451
464
  for (let i = 0;i < MAX_PLAYERS; i++) {
@@ -478,19 +491,19 @@ class MouseContext {
478
491
  this.#dataView = dataView;
479
492
  }
480
493
  get x() {
481
- return this.#dataView.getFloat32(0, true);
494
+ return this.#dataView.getFloat32(MOUSE_CTX_X_OFFSET, true);
482
495
  }
483
496
  get y() {
484
- return this.#dataView.getFloat32(4, true);
497
+ return this.#dataView.getFloat32(MOUSE_CTX_Y_OFFSET, true);
485
498
  }
486
499
  get wheel() {
487
500
  return { x: this.wheelX, y: this.wheelY };
488
501
  }
489
502
  get wheelX() {
490
- return this.#dataView.getFloat32(8, true);
503
+ return this.#dataView.getFloat32(MOUSE_CTX_WHEEL_X_OFFSET, true);
491
504
  }
492
505
  get wheelY() {
493
- return this.#dataView.getFloat32(12, true);
506
+ return this.#dataView.getFloat32(MOUSE_CTX_WHEEL_Y_OFFSET, true);
494
507
  }
495
508
  get left() {
496
509
  return this.#buttonState(1);
@@ -509,7 +522,7 @@ class MouseContext {
509
522
  state = { down: false, held: false, up: false };
510
523
  this.#buttonStates.set(code, state);
511
524
  }
512
- const offset = MOUSE_BUTTONS_OFFSET;
525
+ const offset = MOUSE_CTX_BUTTON_STATES_OFFSET;
513
526
  state.held = !!(this.#dataView.getUint8(offset + code) & 1);
514
527
  state.down = state.held && !(this.#dataView.getUint8(offset + code) & 2);
515
528
  state.up = !state.held && !!(this.#dataView.getUint8(offset + code) & 2);
@@ -1131,15 +1144,6 @@ class KeyboardContext {
1131
1144
  return state;
1132
1145
  }
1133
1146
  }
1134
- var MAX_PEERS = 12;
1135
- var PEERS_ARRAY_OFFSET = 32;
1136
- var PEER_CTX_SIZE = 8;
1137
- var LAST_ROLLBACK_DEPTH_OFFSET = 128;
1138
- var TOTAL_ROLLBACKS_OFFSET = 132;
1139
- var FRAMES_RESIMULATED_OFFSET = 136;
1140
- var PEER_CONNECTED_OFFSET = 0;
1141
- var PEER_SEQ_OFFSET = 2;
1142
- var PEER_ACK_OFFSET = 4;
1143
1147
  var STATUS_MAP = {
1144
1148
  0: "offline",
1145
1149
  1: "local",
@@ -1150,7 +1154,7 @@ var STATUS_MAP = {
1150
1154
 
1151
1155
  class NetContext {
1152
1156
  dataView;
1153
- #peers = Array.from({ length: MAX_PEERS }, () => ({
1157
+ #peers = Array.from({ length: MAX_PLAYERS }, () => ({
1154
1158
  isLocal: false,
1155
1159
  seq: -1,
1156
1160
  ack: -1
@@ -1168,38 +1172,38 @@ class NetContext {
1168
1172
  if (!this.#hasValidBuffer()) {
1169
1173
  throw new Error("NetContext dataView is not valid");
1170
1174
  }
1171
- return this.dataView.getUint8(0);
1175
+ return this.dataView.getUint8(NET_CTX_PEER_COUNT_OFFSET);
1172
1176
  }
1173
1177
  get localPeerId() {
1174
1178
  if (!this.#hasValidBuffer()) {
1175
1179
  throw new Error("NetContext dataView is not valid");
1176
1180
  }
1177
- return this.dataView.getUint8(1);
1181
+ return this.dataView.getUint8(NET_CTX_LOCAL_PEER_ID_OFFSET);
1178
1182
  }
1179
1183
  get isInSession() {
1180
1184
  if (!this.#hasValidBuffer()) {
1181
1185
  throw new Error("NetContext dataView is not valid");
1182
1186
  }
1183
- return this.dataView.getUint8(2) !== 0;
1187
+ return this.dataView.getUint8(NET_CTX_IN_SESSION_OFFSET) !== 0;
1184
1188
  }
1185
1189
  get status() {
1186
1190
  if (!this.#hasValidBuffer()) {
1187
1191
  throw new Error("NetContext dataView is not valid");
1188
1192
  }
1189
- const statusByte = this.dataView.getUint8(3);
1193
+ const statusByte = this.dataView.getUint8(NET_CTX_STATUS_OFFSET);
1190
1194
  return STATUS_MAP[statusByte] ?? "local";
1191
1195
  }
1192
1196
  get matchFrame() {
1193
1197
  if (!this.#hasValidBuffer()) {
1194
1198
  throw new Error("NetContext dataView is not valid");
1195
1199
  }
1196
- return this.dataView.getUint32(4, true);
1200
+ return this.dataView.getUint32(NET_CTX_MATCH_FRAME_OFFSET, true);
1197
1201
  }
1198
1202
  get sessionStartFrame() {
1199
1203
  if (!this.#hasValidBuffer()) {
1200
1204
  throw new Error("NetContext dataView is not valid");
1201
1205
  }
1202
- return this.dataView.getUint32(8, true);
1206
+ return this.dataView.getUint32(NET_CTX_SESSION_START_FRAME_OFFSET, true);
1203
1207
  }
1204
1208
  get roomCode() {
1205
1209
  if (!this.#hasValidBuffer()) {
@@ -1207,7 +1211,7 @@ class NetContext {
1207
1211
  }
1208
1212
  const bytes = [];
1209
1213
  for (let i = 0;i < 8; i++) {
1210
- const byte = this.dataView.getUint8(12 + i);
1214
+ const byte = this.dataView.getUint8(NET_CTX_ROOM_CODE_OFFSET + i);
1211
1215
  if (byte === 0)
1212
1216
  break;
1213
1217
  bytes.push(byte);
@@ -1220,7 +1224,7 @@ class NetContext {
1220
1224
  }
1221
1225
  const bytes = [];
1222
1226
  for (let i = 0;i < 8; i++) {
1223
- const byte = this.dataView.getUint8(20 + i);
1227
+ const byte = this.dataView.getUint8(NET_CTX_WANTS_ROOM_CODE_OFFSET + i);
1224
1228
  if (byte === 0)
1225
1229
  break;
1226
1230
  bytes.push(byte);
@@ -1232,11 +1236,11 @@ class NetContext {
1232
1236
  throw new Error("NetContext dataView is not valid");
1233
1237
  }
1234
1238
  for (let i = 0;i < 8; i++) {
1235
- this.dataView.setUint8(20 + i, 0);
1239
+ this.dataView.setUint8(NET_CTX_WANTS_ROOM_CODE_OFFSET + i, 0);
1236
1240
  }
1237
1241
  if (code) {
1238
1242
  for (let i = 0;i < Math.min(code.length, 7); i++) {
1239
- this.dataView.setUint8(20 + i, code.charCodeAt(i));
1243
+ this.dataView.setUint8(NET_CTX_WANTS_ROOM_CODE_OFFSET + i, code.charCodeAt(i));
1240
1244
  }
1241
1245
  }
1242
1246
  }
@@ -1244,13 +1248,13 @@ class NetContext {
1244
1248
  if (!this.#hasValidBuffer()) {
1245
1249
  return false;
1246
1250
  }
1247
- return this.dataView.getUint8(28) !== 0;
1251
+ return this.dataView.getUint8(NET_CTX_WANTS_DISCONNECT_OFFSET) !== 0;
1248
1252
  }
1249
1253
  set wantsDisconnect(value) {
1250
1254
  if (!this.#hasValidBuffer()) {
1251
1255
  throw new Error("NetContext dataView is not valid");
1252
1256
  }
1253
- this.dataView.setUint8(28, value ? 1 : 0);
1257
+ this.dataView.setUint8(NET_CTX_WANTS_DISCONNECT_OFFSET, value ? 1 : 0);
1254
1258
  }
1255
1259
  get peers() {
1256
1260
  if (!this.#hasValidBuffer()) {
@@ -1260,13 +1264,13 @@ class NetContext {
1260
1264
  const localPeerId = this.localPeerId;
1261
1265
  const matchFrame = this.matchFrame;
1262
1266
  let minRemoteSeq = -1;
1263
- for (let i = 0;i < MAX_PEERS; i++) {
1267
+ for (let i = 0;i < MAX_PLAYERS; i++) {
1264
1268
  if (i === localPeerId)
1265
1269
  continue;
1266
- const peerOffset = PEERS_ARRAY_OFFSET + i * PEER_CTX_SIZE;
1267
- if (dv.getUint8(peerOffset + PEER_CONNECTED_OFFSET) !== 1)
1270
+ const peerOffset = NET_CTX_PEERS_OFFSET + i * PEER_CTX_SIZE;
1271
+ if (dv.getUint8(peerOffset + PEER_CTX_CONNECTED_OFFSET) !== 1)
1268
1272
  continue;
1269
- const seq = dv.getInt16(peerOffset + PEER_SEQ_OFFSET, true);
1273
+ const seq = dv.getInt16(peerOffset + PEER_CTX_SEQ_OFFSET, true);
1270
1274
  if (seq < 0)
1271
1275
  continue;
1272
1276
  if (minRemoteSeq === -1 || seq < minRemoteSeq) {
@@ -1274,9 +1278,9 @@ class NetContext {
1274
1278
  }
1275
1279
  }
1276
1280
  this.#peersResult.length = 0;
1277
- for (let i = 0;i < MAX_PEERS; i++) {
1278
- const peerOffset = PEERS_ARRAY_OFFSET + i * PEER_CTX_SIZE;
1279
- if (dv.getUint8(peerOffset + PEER_CONNECTED_OFFSET) !== 1)
1281
+ for (let i = 0;i < MAX_PLAYERS; i++) {
1282
+ const peerOffset = NET_CTX_PEERS_OFFSET + i * PEER_CTX_SIZE;
1283
+ if (dv.getUint8(peerOffset + PEER_CTX_CONNECTED_OFFSET) !== 1)
1280
1284
  continue;
1281
1285
  const peer = this.#peers[i];
1282
1286
  if (!peer) {
@@ -1288,8 +1292,8 @@ class NetContext {
1288
1292
  peer.seq = matchFrame;
1289
1293
  peer.ack = minRemoteSeq;
1290
1294
  } else {
1291
- peer.seq = dv.getInt16(peerOffset + PEER_SEQ_OFFSET, true);
1292
- peer.ack = dv.getInt16(peerOffset + PEER_ACK_OFFSET, true);
1295
+ peer.seq = dv.getInt16(peerOffset + PEER_CTX_SEQ_OFFSET, true);
1296
+ peer.ack = dv.getInt16(peerOffset + PEER_CTX_ACK_OFFSET, true);
1293
1297
  }
1294
1298
  this.#peersResult.push(peer);
1295
1299
  }
@@ -1299,19 +1303,19 @@ class NetContext {
1299
1303
  if (!this.#hasValidBuffer()) {
1300
1304
  throw new Error("NetContext dataView is not valid");
1301
1305
  }
1302
- return this.dataView.getUint32(LAST_ROLLBACK_DEPTH_OFFSET, true);
1306
+ return this.dataView.getUint32(NET_CTX_LAST_ROLLBACK_DEPTH_OFFSET, true);
1303
1307
  }
1304
1308
  get totalRollbacks() {
1305
1309
  if (!this.#hasValidBuffer()) {
1306
1310
  throw new Error("NetContext dataView is not valid");
1307
1311
  }
1308
- return this.dataView.getUint32(TOTAL_ROLLBACKS_OFFSET, true);
1312
+ return this.dataView.getUint32(NET_CTX_TOTAL_ROLLBACKS_OFFSET, true);
1309
1313
  }
1310
1314
  get framesResimulated() {
1311
1315
  if (!this.#hasValidBuffer()) {
1312
1316
  throw new Error("NetContext dataView is not valid");
1313
1317
  }
1314
- return Number(this.dataView.getBigUint64(FRAMES_RESIMULATED_OFFSET, true));
1318
+ return Number(this.dataView.getBigUint64(NET_CTX_FRAMES_RESIMULATED_OFFSET, true));
1315
1319
  }
1316
1320
  }
1317
1321
 
@@ -1324,21 +1328,41 @@ class TimeContext {
1324
1328
  if (!this.dataView) {
1325
1329
  throw new Error("TimeContext DataView is not initialized");
1326
1330
  }
1327
- return this.dataView.getUint32(0, true);
1331
+ return this.dataView.getUint32(TIME_CTX_FRAME_OFFSET, true);
1328
1332
  }
1329
1333
  get dt() {
1330
1334
  if (!this.dataView) {
1331
1335
  throw new Error("TimeContext DataView is not initialized");
1332
1336
  }
1333
- return this.dataView.getUint32(4, true) / 1000;
1337
+ return this.dataView.getUint32(TIME_CTX_DT_MS_OFFSET, true) / 1000;
1334
1338
  }
1335
1339
  get time() {
1336
1340
  if (!this.dataView) {
1337
1341
  throw new Error("TimeContext DataView is not initialized");
1338
1342
  }
1339
- return this.dataView.getUint32(8, true) / 1000;
1343
+ return this.dataView.getUint32(TIME_CTX_TOTAL_MS_OFFSET, true) / 1000;
1340
1344
  }
1341
1345
  }
1346
+ var EVENT_PAYLOAD_SIZE = 8;
1347
+ var EVENT_PAYLOAD_ALIGN = 4;
1348
+ function keyToKeyCode(key) {
1349
+ return Key[key];
1350
+ }
1351
+ function keyCodeToKey(code) {
1352
+ return Key[code];
1353
+ }
1354
+ function mouseButtonToMouseButtonCode(button) {
1355
+ return MouseButton[button];
1356
+ }
1357
+ function mouseButtonCodeToMouseButton(code) {
1358
+ return MouseButton[code];
1359
+ }
1360
+ function inputSourceToInputSourceCode(source) {
1361
+ return InputSource[source];
1362
+ }
1363
+ function inputSourceCodeToInputSource(code) {
1364
+ return InputSource[code];
1365
+ }
1342
1366
  var TAPE_MAGIC = 1413566533;
1343
1367
  function readTapeHeader(tape) {
1344
1368
  const view = new DataView(tape.buffer, tape.byteOffset, tape.byteLength);
@@ -1354,7 +1378,7 @@ function readTapeHeader(tape) {
1354
1378
  eventCount: view.getUint16(14, true)
1355
1379
  };
1356
1380
  }
1357
- var DEFAULT_WASM_URL = new URL("https://unpkg.com/@bloopjs/engine@0.0.88/wasm/bloop.wasm");
1381
+ var DEFAULT_WASM_URL = new URL("https://unpkg.com/@bloopjs/engine@0.0.89/wasm/bloop.wasm");
1358
1382
  var MAX_ROLLBACK_FRAMES = 500;
1359
1383
  var TIME_CTX_OFFSET = 0;
1360
1384
  var INPUT_CTX_OFFSET = TIME_CTX_OFFSET + 4;
@@ -1622,6 +1646,7 @@ async function mount(mountable, options) {
1622
1646
  memory,
1623
1647
  __systems: function(system_handle, ptr) {
1624
1648
  mountable.hooks.setBuffer(memory.buffer);
1649
+ mountable.hooks.setContext(ptr);
1625
1650
  mountable.hooks.systemsCallback(system_handle, ptr);
1626
1651
  },
1627
1652
  __before_frame: function(ptr, frame) {
@@ -1768,9 +1793,15 @@ class Bloop {
1768
1793
  const inputCtxPtr = dv.getUint32(INPUT_CTX_OFFSET, true);
1769
1794
  const netCtxPtr = dv.getUint32(NET_CTX_OFFSET, true);
1770
1795
  this.#context.rawPointer = ptr;
1771
- this.#context.inputs.dataView = new DataView(this.#engineBuffer, inputCtxPtr);
1772
- this.#context.time.dataView = new DataView(this.#engineBuffer, timeCtxPtr);
1773
- this.#context.net.dataView = new DataView(this.#engineBuffer, netCtxPtr);
1796
+ if (!this.#context.inputs.hasDataView() || this.#context.inputs.dataView.buffer !== this.#engineBuffer || this.#context.inputs.dataView.byteOffset !== inputCtxPtr) {
1797
+ this.#context.inputs.dataView = new DataView(this.#engineBuffer, inputCtxPtr);
1798
+ }
1799
+ if (this.#context.time.dataView?.buffer !== this.#engineBuffer || this.#context.time.dataView?.byteOffset !== timeCtxPtr) {
1800
+ this.#context.time.dataView = new DataView(this.#engineBuffer, timeCtxPtr);
1801
+ }
1802
+ if (this.#context.net.dataView?.buffer !== this.#engineBuffer || this.#context.net.dataView?.byteOffset !== netCtxPtr) {
1803
+ this.#context.net.dataView = new DataView(this.#engineBuffer, netCtxPtr);
1804
+ }
1774
1805
  },
1775
1806
  systemsCallback: (system_handle, ptr) => {
1776
1807
  this.hooks.setContext(ptr);
@@ -1875,6 +1906,13 @@ class Bloop {
1875
1906
  system.netcode?.(this.#context);
1876
1907
  break;
1877
1908
  }
1909
+ case exports_enums.EventType.NetSessionInit:
1910
+ console.log("[bloop] NetSessionInit event received");
1911
+ this.#context.event = {
1912
+ type: "session:start"
1913
+ };
1914
+ system.netcode?.(this.#context);
1915
+ break;
1878
1916
  default:
1879
1917
  break;
1880
1918
  }
@@ -1899,5 +1937,5 @@ export {
1899
1937
  Bloop
1900
1938
  };
1901
1939
 
1902
- //# debugId=53D4C6C8E955612164756E2164756E21
1940
+ //# debugId=86FA3B16C67B33F564756E2164756E21
1903
1941
  //# sourceMappingURL=mod.js.map
package/dist/mod.js.map CHANGED
@@ -3,12 +3,12 @@
3
3
  "sources": ["../src/util.ts", "../../engine/dist/engine.js", "../src/sim.ts", "../src/mount.ts", "../src/bloop.ts"],
4
4
  "sourcesContent": [
5
5
  "export function toHexString(dataView: DataView, length?: number): string {\n length ??= dataView.byteLength;\n let hexString = \"\";\n for (let i = 0; i < length; i++) {\n const byte = dataView.getUint8(i);\n hexString += `${byte.toString(16).padStart(2, \"0\")} `;\n }\n return hexString.trim();\n}\n\nexport function assert(condition: any, message?: string): asserts condition {\n if (condition == null || condition === false) {\n throw new Error(message ?? \"Assertion failed\");\n }\n}\n\nconst backpressureLogs = new Map<string, number>();\n\n/**\n * Log message a single time only\n *\n * @example\n *\n * Util.logOnce(\"Frame rendered\", 12345);\n */\nexport function logOnce(...args: any[]) {\n const key = args.map((a) => String(a)).join(\" \");\n if (!backpressureLogs.has(key)) {\n console.log(...args);\n backpressureLogs.set(key, 1);\n }\n}\n\n/**\n * Log messages at most once per second\n *\n * @example\n *\n * Util.logPerSecond(performance.now(), \"Frame rendered\", 12345);\n */\nexport function logPerSecond(now: number, ...args: any[]) {\n logEvery(now, 1000, ...args);\n}\n\n/**\n * Log messages every N milliseconds\n *\n * @example\n *\n * Util.logEvery(20, \"Frame rendered\", 12345);\n */\nexport function logEvery(now: number, interval: number = 10, ...args: any[]) {\n const key = args.map((a) => String(a)).join(\" \");\n const lastLogged = backpressureLogs.get(key) ?? -Infinity;\n if (now - lastLogged >= interval) {\n console.log(...args);\n backpressureLogs.set(key, now);\n }\n}\n\nexport function unwrap<T>(\n value: T | null | undefined,\n message?: string,\n): NonNullable<T> {\n assert(value != null, message ?? `Unwrap failed: value is ${value}`);\n return value;\n}\n",
6
- "var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, {\n get: all[name],\n enumerable: true,\n configurable: true,\n set: (newValue) => all[name] = () => newValue\n });\n};\n\n// js/codegen/enums.ts\nvar exports_enums = {};\n__export(exports_enums, {\n NetJoinFailReason: () => NetJoinFailReason,\n MouseButton: () => MouseButton,\n Key: () => Key,\n InputSource: () => InputSource,\n EventType: () => EventType\n});\nvar EventType;\n((EventType2) => {\n EventType2[EventType2[\"None\"] = 0] = \"None\";\n EventType2[EventType2[\"KeyDown\"] = 1] = \"KeyDown\";\n EventType2[EventType2[\"KeyUp\"] = 2] = \"KeyUp\";\n EventType2[EventType2[\"MouseMove\"] = 3] = \"MouseMove\";\n EventType2[EventType2[\"MouseDown\"] = 4] = \"MouseDown\";\n EventType2[EventType2[\"MouseUp\"] = 5] = \"MouseUp\";\n EventType2[EventType2[\"MouseWheel\"] = 6] = \"MouseWheel\";\n EventType2[EventType2[\"FrameStart\"] = 7] = \"FrameStart\";\n EventType2[EventType2[\"NetJoinOk\"] = 8] = \"NetJoinOk\";\n EventType2[EventType2[\"NetJoinFail\"] = 9] = \"NetJoinFail\";\n EventType2[EventType2[\"NetPeerJoin\"] = 10] = \"NetPeerJoin\";\n EventType2[EventType2[\"NetPeerLeave\"] = 11] = \"NetPeerLeave\";\n EventType2[EventType2[\"NetPeerAssignLocalId\"] = 12] = \"NetPeerAssignLocalId\";\n EventType2[EventType2[\"NetPacketReceived\"] = 13] = \"NetPacketReceived\";\n EventType2[EventType2[\"NetSessionInit\"] = 14] = \"NetSessionInit\";\n})(EventType ||= {});\nvar MouseButton;\n((MouseButton2) => {\n MouseButton2[MouseButton2[\"None\"] = 0] = \"None\";\n MouseButton2[MouseButton2[\"Left\"] = 1] = \"Left\";\n MouseButton2[MouseButton2[\"Middle\"] = 2] = \"Middle\";\n MouseButton2[MouseButton2[\"Right\"] = 3] = \"Right\";\n MouseButton2[MouseButton2[\"X1\"] = 4] = \"X1\";\n MouseButton2[MouseButton2[\"X2\"] = 5] = \"X2\";\n MouseButton2[MouseButton2[\"X3\"] = 6] = \"X3\";\n MouseButton2[MouseButton2[\"X4\"] = 7] = \"X4\";\n MouseButton2[MouseButton2[\"X5\"] = 8] = \"X5\";\n})(MouseButton ||= {});\nvar Key;\n((Key2) => {\n Key2[Key2[\"None\"] = 0] = \"None\";\n Key2[Key2[\"Backquote\"] = 1] = \"Backquote\";\n Key2[Key2[\"Backslash\"] = 2] = \"Backslash\";\n Key2[Key2[\"BracketLeft\"] = 3] = \"BracketLeft\";\n Key2[Key2[\"BracketRight\"] = 4] = \"BracketRight\";\n Key2[Key2[\"Comma\"] = 5] = \"Comma\";\n Key2[Key2[\"Digit0\"] = 6] = \"Digit0\";\n Key2[Key2[\"Digit1\"] = 7] = \"Digit1\";\n Key2[Key2[\"Digit2\"] = 8] = \"Digit2\";\n Key2[Key2[\"Digit3\"] = 9] = \"Digit3\";\n Key2[Key2[\"Digit4\"] = 10] = \"Digit4\";\n Key2[Key2[\"Digit5\"] = 11] = \"Digit5\";\n Key2[Key2[\"Digit6\"] = 12] = \"Digit6\";\n Key2[Key2[\"Digit7\"] = 13] = \"Digit7\";\n Key2[Key2[\"Digit8\"] = 14] = \"Digit8\";\n Key2[Key2[\"Digit9\"] = 15] = \"Digit9\";\n Key2[Key2[\"Equal\"] = 16] = \"Equal\";\n Key2[Key2[\"IntlBackslash\"] = 17] = \"IntlBackslash\";\n Key2[Key2[\"IntlRo\"] = 18] = \"IntlRo\";\n Key2[Key2[\"IntlYen\"] = 19] = \"IntlYen\";\n Key2[Key2[\"KeyA\"] = 20] = \"KeyA\";\n Key2[Key2[\"KeyB\"] = 21] = \"KeyB\";\n Key2[Key2[\"KeyC\"] = 22] = \"KeyC\";\n Key2[Key2[\"KeyD\"] = 23] = \"KeyD\";\n Key2[Key2[\"KeyE\"] = 24] = \"KeyE\";\n Key2[Key2[\"KeyF\"] = 25] = \"KeyF\";\n Key2[Key2[\"KeyG\"] = 26] = \"KeyG\";\n Key2[Key2[\"KeyH\"] = 27] = \"KeyH\";\n Key2[Key2[\"KeyI\"] = 28] = \"KeyI\";\n Key2[Key2[\"KeyJ\"] = 29] = \"KeyJ\";\n Key2[Key2[\"KeyK\"] = 30] = \"KeyK\";\n Key2[Key2[\"KeyL\"] = 31] = \"KeyL\";\n Key2[Key2[\"KeyM\"] = 32] = \"KeyM\";\n Key2[Key2[\"KeyN\"] = 33] = \"KeyN\";\n Key2[Key2[\"KeyO\"] = 34] = \"KeyO\";\n Key2[Key2[\"KeyP\"] = 35] = \"KeyP\";\n Key2[Key2[\"KeyQ\"] = 36] = \"KeyQ\";\n Key2[Key2[\"KeyR\"] = 37] = \"KeyR\";\n Key2[Key2[\"KeyS\"] = 38] = \"KeyS\";\n Key2[Key2[\"KeyT\"] = 39] = \"KeyT\";\n Key2[Key2[\"KeyU\"] = 40] = \"KeyU\";\n Key2[Key2[\"KeyV\"] = 41] = \"KeyV\";\n Key2[Key2[\"KeyW\"] = 42] = \"KeyW\";\n Key2[Key2[\"KeyX\"] = 43] = \"KeyX\";\n Key2[Key2[\"KeyY\"] = 44] = \"KeyY\";\n Key2[Key2[\"KeyZ\"] = 45] = \"KeyZ\";\n Key2[Key2[\"Minus\"] = 46] = \"Minus\";\n Key2[Key2[\"Period\"] = 47] = \"Period\";\n Key2[Key2[\"Quote\"] = 48] = \"Quote\";\n Key2[Key2[\"Semicolon\"] = 49] = \"Semicolon\";\n Key2[Key2[\"Slash\"] = 50] = \"Slash\";\n Key2[Key2[\"AltLeft\"] = 51] = \"AltLeft\";\n Key2[Key2[\"AltRight\"] = 52] = \"AltRight\";\n Key2[Key2[\"Backspace\"] = 53] = \"Backspace\";\n Key2[Key2[\"CapsLock\"] = 54] = \"CapsLock\";\n Key2[Key2[\"ContextMenu\"] = 55] = \"ContextMenu\";\n Key2[Key2[\"ControlLeft\"] = 56] = \"ControlLeft\";\n Key2[Key2[\"ControlRight\"] = 57] = \"ControlRight\";\n Key2[Key2[\"Enter\"] = 58] = \"Enter\";\n Key2[Key2[\"MetaLeft\"] = 59] = \"MetaLeft\";\n Key2[Key2[\"MetaRight\"] = 60] = \"MetaRight\";\n Key2[Key2[\"ShiftLeft\"] = 61] = \"ShiftLeft\";\n Key2[Key2[\"ShiftRight\"] = 62] = \"ShiftRight\";\n Key2[Key2[\"Space\"] = 63] = \"Space\";\n Key2[Key2[\"Tab\"] = 64] = \"Tab\";\n Key2[Key2[\"Convert\"] = 65] = \"Convert\";\n Key2[Key2[\"KanaMode\"] = 66] = \"KanaMode\";\n Key2[Key2[\"Lang1\"] = 67] = \"Lang1\";\n Key2[Key2[\"Lang2\"] = 68] = \"Lang2\";\n Key2[Key2[\"Lang3\"] = 69] = \"Lang3\";\n Key2[Key2[\"Lang4\"] = 70] = \"Lang4\";\n Key2[Key2[\"Lang5\"] = 71] = \"Lang5\";\n Key2[Key2[\"NonConvert\"] = 72] = \"NonConvert\";\n Key2[Key2[\"Delete\"] = 73] = \"Delete\";\n Key2[Key2[\"End\"] = 74] = \"End\";\n Key2[Key2[\"Help\"] = 75] = \"Help\";\n Key2[Key2[\"Home\"] = 76] = \"Home\";\n Key2[Key2[\"Insert\"] = 77] = \"Insert\";\n Key2[Key2[\"PageDown\"] = 78] = \"PageDown\";\n Key2[Key2[\"PageUp\"] = 79] = \"PageUp\";\n Key2[Key2[\"ArrowDown\"] = 80] = \"ArrowDown\";\n Key2[Key2[\"ArrowLeft\"] = 81] = \"ArrowLeft\";\n Key2[Key2[\"ArrowRight\"] = 82] = \"ArrowRight\";\n Key2[Key2[\"ArrowUp\"] = 83] = \"ArrowUp\";\n Key2[Key2[\"NumLock\"] = 84] = \"NumLock\";\n Key2[Key2[\"Numpad0\"] = 85] = \"Numpad0\";\n Key2[Key2[\"Numpad1\"] = 86] = \"Numpad1\";\n Key2[Key2[\"Numpad2\"] = 87] = \"Numpad2\";\n Key2[Key2[\"Numpad3\"] = 88] = \"Numpad3\";\n Key2[Key2[\"Numpad4\"] = 89] = \"Numpad4\";\n Key2[Key2[\"Numpad5\"] = 90] = \"Numpad5\";\n Key2[Key2[\"Numpad6\"] = 91] = \"Numpad6\";\n Key2[Key2[\"Numpad7\"] = 92] = \"Numpad7\";\n Key2[Key2[\"Numpad8\"] = 93] = \"Numpad8\";\n Key2[Key2[\"Numpad9\"] = 94] = \"Numpad9\";\n Key2[Key2[\"NumpadAdd\"] = 95] = \"NumpadAdd\";\n Key2[Key2[\"NumpadBackspace\"] = 96] = \"NumpadBackspace\";\n Key2[Key2[\"NumpadClear\"] = 97] = \"NumpadClear\";\n Key2[Key2[\"NumpadClearEntry\"] = 98] = \"NumpadClearEntry\";\n Key2[Key2[\"NumpadComma\"] = 99] = \"NumpadComma\";\n Key2[Key2[\"NumpadDecimal\"] = 100] = \"NumpadDecimal\";\n Key2[Key2[\"NumpadDivide\"] = 101] = \"NumpadDivide\";\n Key2[Key2[\"NumpadEnter\"] = 102] = \"NumpadEnter\";\n Key2[Key2[\"NumpadEqual\"] = 103] = \"NumpadEqual\";\n Key2[Key2[\"NumpadHash\"] = 104] = \"NumpadHash\";\n Key2[Key2[\"NumpadMemoryAdd\"] = 105] = \"NumpadMemoryAdd\";\n Key2[Key2[\"NumpadMemoryClear\"] = 106] = \"NumpadMemoryClear\";\n Key2[Key2[\"NumpadMemoryRecall\"] = 107] = \"NumpadMemoryRecall\";\n Key2[Key2[\"NumpadMemoryStore\"] = 108] = \"NumpadMemoryStore\";\n Key2[Key2[\"NumpadMemorySubtract\"] = 109] = \"NumpadMemorySubtract\";\n Key2[Key2[\"NumpadMultiply\"] = 110] = \"NumpadMultiply\";\n Key2[Key2[\"NumpadParenLeft\"] = 111] = \"NumpadParenLeft\";\n Key2[Key2[\"NumpadParenRight\"] = 112] = \"NumpadParenRight\";\n Key2[Key2[\"NumpadStar\"] = 113] = \"NumpadStar\";\n Key2[Key2[\"NumpadSubtract\"] = 114] = \"NumpadSubtract\";\n Key2[Key2[\"Escape\"] = 115] = \"Escape\";\n Key2[Key2[\"Fn\"] = 116] = \"Fn\";\n Key2[Key2[\"FnLock\"] = 117] = \"FnLock\";\n Key2[Key2[\"PrintScreen\"] = 118] = \"PrintScreen\";\n Key2[Key2[\"ScrollLock\"] = 119] = \"ScrollLock\";\n Key2[Key2[\"Pause\"] = 120] = \"Pause\";\n Key2[Key2[\"BrowserBack\"] = 121] = \"BrowserBack\";\n Key2[Key2[\"BrowserFavorites\"] = 122] = \"BrowserFavorites\";\n Key2[Key2[\"BrowserForward\"] = 123] = \"BrowserForward\";\n Key2[Key2[\"BrowserHome\"] = 124] = \"BrowserHome\";\n Key2[Key2[\"BrowserRefresh\"] = 125] = \"BrowserRefresh\";\n Key2[Key2[\"BrowserSearch\"] = 126] = \"BrowserSearch\";\n Key2[Key2[\"BrowserStop\"] = 127] = \"BrowserStop\";\n Key2[Key2[\"Eject\"] = 128] = \"Eject\";\n Key2[Key2[\"LaunchApp1\"] = 129] = \"LaunchApp1\";\n Key2[Key2[\"LaunchApp2\"] = 130] = \"LaunchApp2\";\n Key2[Key2[\"LaunchMail\"] = 131] = \"LaunchMail\";\n Key2[Key2[\"MediaPlayPause\"] = 132] = \"MediaPlayPause\";\n Key2[Key2[\"MediaSelect\"] = 133] = \"MediaSelect\";\n Key2[Key2[\"MediaStop\"] = 134] = \"MediaStop\";\n Key2[Key2[\"MediaTrackNext\"] = 135] = \"MediaTrackNext\";\n Key2[Key2[\"MediaTrackPrevious\"] = 136] = \"MediaTrackPrevious\";\n Key2[Key2[\"Power\"] = 137] = \"Power\";\n Key2[Key2[\"Sleep\"] = 138] = \"Sleep\";\n Key2[Key2[\"AudioVolumeDown\"] = 139] = \"AudioVolumeDown\";\n Key2[Key2[\"AudioVolumeMute\"] = 140] = \"AudioVolumeMute\";\n Key2[Key2[\"AudioVolumeUp\"] = 141] = \"AudioVolumeUp\";\n Key2[Key2[\"WakeUp\"] = 142] = \"WakeUp\";\n Key2[Key2[\"Hyper\"] = 143] = \"Hyper\";\n Key2[Key2[\"Super\"] = 144] = \"Super\";\n Key2[Key2[\"Turbo\"] = 145] = \"Turbo\";\n Key2[Key2[\"Abort\"] = 146] = \"Abort\";\n Key2[Key2[\"Resume\"] = 147] = \"Resume\";\n Key2[Key2[\"Suspend\"] = 148] = \"Suspend\";\n Key2[Key2[\"Again\"] = 149] = \"Again\";\n Key2[Key2[\"Copy\"] = 150] = \"Copy\";\n Key2[Key2[\"Cut\"] = 151] = \"Cut\";\n Key2[Key2[\"Find\"] = 152] = \"Find\";\n Key2[Key2[\"Open\"] = 153] = \"Open\";\n Key2[Key2[\"Paste\"] = 154] = \"Paste\";\n Key2[Key2[\"Props\"] = 155] = \"Props\";\n Key2[Key2[\"Select\"] = 156] = \"Select\";\n Key2[Key2[\"Undo\"] = 157] = \"Undo\";\n Key2[Key2[\"Hiragana\"] = 158] = \"Hiragana\";\n Key2[Key2[\"Katakana\"] = 159] = \"Katakana\";\n Key2[Key2[\"F1\"] = 160] = \"F1\";\n Key2[Key2[\"F2\"] = 161] = \"F2\";\n Key2[Key2[\"F3\"] = 162] = \"F3\";\n Key2[Key2[\"F4\"] = 163] = \"F4\";\n Key2[Key2[\"F5\"] = 164] = \"F5\";\n Key2[Key2[\"F6\"] = 165] = \"F6\";\n Key2[Key2[\"F7\"] = 166] = \"F7\";\n Key2[Key2[\"F8\"] = 167] = \"F8\";\n Key2[Key2[\"F9\"] = 168] = \"F9\";\n Key2[Key2[\"F10\"] = 169] = \"F10\";\n Key2[Key2[\"F11\"] = 170] = \"F11\";\n Key2[Key2[\"F12\"] = 171] = \"F12\";\n Key2[Key2[\"F13\"] = 172] = \"F13\";\n Key2[Key2[\"F14\"] = 173] = \"F14\";\n Key2[Key2[\"F15\"] = 174] = \"F15\";\n Key2[Key2[\"F16\"] = 175] = \"F16\";\n Key2[Key2[\"F17\"] = 176] = \"F17\";\n Key2[Key2[\"F18\"] = 177] = \"F18\";\n Key2[Key2[\"F19\"] = 178] = \"F19\";\n Key2[Key2[\"F20\"] = 179] = \"F20\";\n Key2[Key2[\"F21\"] = 180] = \"F21\";\n Key2[Key2[\"F22\"] = 181] = \"F22\";\n Key2[Key2[\"F23\"] = 182] = \"F23\";\n Key2[Key2[\"F24\"] = 183] = \"F24\";\n Key2[Key2[\"F25\"] = 184] = \"F25\";\n Key2[Key2[\"F26\"] = 185] = \"F26\";\n Key2[Key2[\"F27\"] = 186] = \"F27\";\n Key2[Key2[\"F28\"] = 187] = \"F28\";\n Key2[Key2[\"F29\"] = 188] = \"F29\";\n Key2[Key2[\"F30\"] = 189] = \"F30\";\n Key2[Key2[\"F31\"] = 190] = \"F31\";\n Key2[Key2[\"F32\"] = 191] = \"F32\";\n Key2[Key2[\"F33\"] = 192] = \"F33\";\n Key2[Key2[\"F34\"] = 193] = \"F34\";\n Key2[Key2[\"F35\"] = 194] = \"F35\";\n})(Key ||= {});\nvar InputSource;\n((InputSource2) => {\n InputSource2[InputSource2[\"None\"] = 0] = \"None\";\n InputSource2[InputSource2[\"LocalKeyboard\"] = 1] = \"LocalKeyboard\";\n InputSource2[InputSource2[\"LocalMouse\"] = 2] = \"LocalMouse\";\n InputSource2[InputSource2[\"LocalTouch\"] = 3] = \"LocalTouch\";\n InputSource2[InputSource2[\"LocalGamepad0\"] = 4] = \"LocalGamepad0\";\n InputSource2[InputSource2[\"LocalGamepad1\"] = 5] = \"LocalGamepad1\";\n InputSource2[InputSource2[\"LocalGamepad2\"] = 6] = \"LocalGamepad2\";\n InputSource2[InputSource2[\"LocalGamepad3\"] = 7] = \"LocalGamepad3\";\n InputSource2[InputSource2[\"LocalGamepad4\"] = 8] = \"LocalGamepad4\";\n InputSource2[InputSource2[\"LocalGamepad5\"] = 9] = \"LocalGamepad5\";\n InputSource2[InputSource2[\"LocalGamepad6\"] = 10] = \"LocalGamepad6\";\n InputSource2[InputSource2[\"LocalGamepad7\"] = 11] = \"LocalGamepad7\";\n InputSource2[InputSource2[\"LocalGamepad8\"] = 12] = \"LocalGamepad8\";\n InputSource2[InputSource2[\"LocalGamepad9\"] = 13] = \"LocalGamepad9\";\n InputSource2[InputSource2[\"LocalGamepad10\"] = 14] = \"LocalGamepad10\";\n InputSource2[InputSource2[\"LocalGamepad11\"] = 15] = \"LocalGamepad11\";\n InputSource2[InputSource2[\"RemotePeer0\"] = 128] = \"RemotePeer0\";\n InputSource2[InputSource2[\"RemotePeer1\"] = 129] = \"RemotePeer1\";\n InputSource2[InputSource2[\"RemotePeer2\"] = 130] = \"RemotePeer2\";\n InputSource2[InputSource2[\"RemotePeer3\"] = 131] = \"RemotePeer3\";\n InputSource2[InputSource2[\"RemotePeer4\"] = 132] = \"RemotePeer4\";\n InputSource2[InputSource2[\"RemotePeer5\"] = 133] = \"RemotePeer5\";\n InputSource2[InputSource2[\"RemotePeer6\"] = 134] = \"RemotePeer6\";\n InputSource2[InputSource2[\"RemotePeer7\"] = 135] = \"RemotePeer7\";\n InputSource2[InputSource2[\"RemotePeer8\"] = 136] = \"RemotePeer8\";\n InputSource2[InputSource2[\"RemotePeer9\"] = 137] = \"RemotePeer9\";\n InputSource2[InputSource2[\"RemotePeer10\"] = 138] = \"RemotePeer10\";\n InputSource2[InputSource2[\"RemotePeer11\"] = 139] = \"RemotePeer11\";\n InputSource2[InputSource2[\"Unmapped\"] = 255] = \"Unmapped\";\n})(InputSource ||= {});\nvar NetJoinFailReason;\n((NetJoinFailReason2) => {\n NetJoinFailReason2[NetJoinFailReason2[\"unknown\"] = 0] = \"unknown\";\n NetJoinFailReason2[NetJoinFailReason2[\"timeout\"] = 1] = \"timeout\";\n NetJoinFailReason2[NetJoinFailReason2[\"room_full\"] = 2] = \"room_full\";\n NetJoinFailReason2[NetJoinFailReason2[\"room_not_found\"] = 3] = \"room_not_found\";\n NetJoinFailReason2[NetJoinFailReason2[\"already_in_room\"] = 4] = \"already_in_room\";\n})(NetJoinFailReason ||= {});\n// js/inputs.ts\nvar MAX_PLAYERS = 12;\nvar KEYBOARD_OFFSET = 0;\nvar KEYBOARD_SIZE = 256;\nvar MOUSE_OFFSET = 256;\nvar MOUSE_BUTTONS_OFFSET = 16;\nvar PLAYER_INPUTS_SIZE = 280;\nvar INPUT_CTX_SIZE = MAX_PLAYERS * PLAYER_INPUTS_SIZE;\nvar EVENT_PAYLOAD_SIZE = 8;\nvar EVENT_PAYLOAD_ALIGN = 4;\nfunction keyToKeyCode(key) {\n return Key[key];\n}\nfunction keyCodeToKey(code) {\n return Key[code];\n}\nfunction mouseButtonToMouseButtonCode(button) {\n return MouseButton[button];\n}\nfunction mouseButtonCodeToMouseButton(code) {\n return MouseButton[code];\n}\nfunction inputSourceToInputSourceCode(source) {\n return InputSource[source];\n}\nfunction inputSourceCodeToInputSource(code) {\n return InputSource[code];\n}\n\n// js/contexts/inputContext.ts\nclass PlayerInputContext {\n #dataView;\n #keys;\n #mouse;\n constructor(dataView) {\n this.#dataView = dataView;\n }\n get keys() {\n if (!this.#keys) {\n this.#keys = new KeyboardContext(new DataView(this.#dataView.buffer, this.#dataView.byteOffset + KEYBOARD_OFFSET));\n }\n return this.#keys;\n }\n get mouse() {\n if (!this.#mouse) {\n this.#mouse = new MouseContext(new DataView(this.#dataView.buffer, this.#dataView.byteOffset + MOUSE_OFFSET));\n }\n return this.#mouse;\n }\n}\n\nclass InputContext {\n #dataView;\n #players = [];\n constructor(dataView) {\n if (dataView) {\n this.#dataView = dataView;\n this.#buildPlayers();\n }\n }\n get dataView() {\n if (!this.#dataView) {\n throw new Error(\"DataView is not initialized on InputContext\");\n }\n return this.#dataView;\n }\n set dataView(dataView) {\n this.#dataView = dataView;\n this.#buildPlayers();\n }\n #buildPlayers() {\n this.#players = [];\n for (let i = 0;i < MAX_PLAYERS; i++) {\n const playerOffset = i * PLAYER_INPUTS_SIZE;\n const playerDataView = new DataView(this.dataView.buffer, this.dataView.byteOffset + playerOffset, PLAYER_INPUTS_SIZE);\n this.#players.push(new PlayerInputContext(playerDataView));\n }\n }\n get players() {\n return this.#players;\n }\n get keys() {\n if (!this.#players[0]) {\n throw new Error(\"No player inputs available in InputContext\");\n }\n return this.#players[0].keys;\n }\n get mouse() {\n if (!this.#players[0]) {\n throw new Error(\"No player inputs available in InputContext\");\n }\n return this.#players[0].mouse;\n }\n}\n\nclass MouseContext {\n #dataView;\n #buttonStates = new Map;\n constructor(dataView) {\n this.#dataView = dataView;\n }\n get x() {\n return this.#dataView.getFloat32(0, true);\n }\n get y() {\n return this.#dataView.getFloat32(4, true);\n }\n get wheel() {\n return { x: this.wheelX, y: this.wheelY };\n }\n get wheelX() {\n return this.#dataView.getFloat32(8, true);\n }\n get wheelY() {\n return this.#dataView.getFloat32(12, true);\n }\n get left() {\n return this.#buttonState(1 /* Left */);\n }\n get right() {\n return this.#buttonState(3 /* Right */);\n }\n get middle() {\n return this.#buttonState(2 /* Middle */);\n }\n #buttonState(code) {\n let state;\n if (this.#buttonStates.has(code)) {\n state = this.#buttonStates.get(code);\n } else {\n state = { down: false, held: false, up: false };\n this.#buttonStates.set(code, state);\n }\n const offset = MOUSE_BUTTONS_OFFSET;\n state.held = !!(this.#dataView.getUint8(offset + code) & 1);\n state.down = state.held && !(this.#dataView.getUint8(offset + code) & 2);\n state.up = !state.held && !!(this.#dataView.getUint8(offset + code) & 2);\n return state;\n }\n}\n\nclass KeyboardContext {\n #dataView;\n #keystates = new Map;\n constructor(dataView) {\n this.#dataView = dataView;\n }\n get shift() {\n return this.shiftLeft || this.shiftRight;\n }\n get alt() {\n return this.altLeft || this.altRight;\n }\n get control() {\n return this.controlLeft || this.controlRight;\n }\n get meta() {\n return this.metaLeft || this.metaRight;\n }\n get backquote() {\n return this.#keystate(1 /* Backquote */);\n }\n get backslash() {\n return this.#keystate(2 /* Backslash */);\n }\n get bracketLeft() {\n return this.#keystate(3 /* BracketLeft */);\n }\n get bracketRight() {\n return this.#keystate(4 /* BracketRight */);\n }\n get comma() {\n return this.#keystate(5 /* Comma */);\n }\n get digit0() {\n return this.#keystate(6 /* Digit0 */);\n }\n get digit1() {\n return this.#keystate(7 /* Digit1 */);\n }\n get digit2() {\n return this.#keystate(8 /* Digit2 */);\n }\n get digit3() {\n return this.#keystate(9 /* Digit3 */);\n }\n get digit4() {\n return this.#keystate(10 /* Digit4 */);\n }\n get digit5() {\n return this.#keystate(11 /* Digit5 */);\n }\n get digit6() {\n return this.#keystate(12 /* Digit6 */);\n }\n get digit7() {\n return this.#keystate(13 /* Digit7 */);\n }\n get digit8() {\n return this.#keystate(14 /* Digit8 */);\n }\n get digit9() {\n return this.#keystate(15 /* Digit9 */);\n }\n get equal() {\n return this.#keystate(16 /* Equal */);\n }\n get intlBackslash() {\n return this.#keystate(17 /* IntlBackslash */);\n }\n get intlRo() {\n return this.#keystate(18 /* IntlRo */);\n }\n get intlYen() {\n return this.#keystate(19 /* IntlYen */);\n }\n get a() {\n return this.#keystate(20 /* KeyA */);\n }\n get b() {\n return this.#keystate(21 /* KeyB */);\n }\n get c() {\n return this.#keystate(22 /* KeyC */);\n }\n get d() {\n return this.#keystate(23 /* KeyD */);\n }\n get e() {\n return this.#keystate(24 /* KeyE */);\n }\n get f() {\n return this.#keystate(25 /* KeyF */);\n }\n get g() {\n return this.#keystate(26 /* KeyG */);\n }\n get h() {\n return this.#keystate(27 /* KeyH */);\n }\n get i() {\n return this.#keystate(28 /* KeyI */);\n }\n get j() {\n return this.#keystate(29 /* KeyJ */);\n }\n get k() {\n return this.#keystate(30 /* KeyK */);\n }\n get l() {\n return this.#keystate(31 /* KeyL */);\n }\n get m() {\n return this.#keystate(32 /* KeyM */);\n }\n get n() {\n return this.#keystate(33 /* KeyN */);\n }\n get o() {\n return this.#keystate(34 /* KeyO */);\n }\n get p() {\n return this.#keystate(35 /* KeyP */);\n }\n get q() {\n return this.#keystate(36 /* KeyQ */);\n }\n get r() {\n return this.#keystate(37 /* KeyR */);\n }\n get s() {\n return this.#keystate(38 /* KeyS */);\n }\n get t() {\n return this.#keystate(39 /* KeyT */);\n }\n get u() {\n return this.#keystate(40 /* KeyU */);\n }\n get v() {\n return this.#keystate(41 /* KeyV */);\n }\n get w() {\n return this.#keystate(42 /* KeyW */);\n }\n get x() {\n return this.#keystate(43 /* KeyX */);\n }\n get y() {\n return this.#keystate(44 /* KeyY */);\n }\n get z() {\n return this.#keystate(45 /* KeyZ */);\n }\n get minus() {\n return this.#keystate(46 /* Minus */);\n }\n get period() {\n return this.#keystate(47 /* Period */);\n }\n get quote() {\n return this.#keystate(48 /* Quote */);\n }\n get semicolon() {\n return this.#keystate(49 /* Semicolon */);\n }\n get slash() {\n return this.#keystate(50 /* Slash */);\n }\n get altLeft() {\n return this.#keystate(51 /* AltLeft */);\n }\n get altRight() {\n return this.#keystate(52 /* AltRight */);\n }\n get backspace() {\n return this.#keystate(53 /* Backspace */);\n }\n get capsLock() {\n return this.#keystate(54 /* CapsLock */);\n }\n get contextMenu() {\n return this.#keystate(55 /* ContextMenu */);\n }\n get controlLeft() {\n return this.#keystate(56 /* ControlLeft */);\n }\n get controlRight() {\n return this.#keystate(57 /* ControlRight */);\n }\n get enter() {\n return this.#keystate(58 /* Enter */);\n }\n get metaLeft() {\n return this.#keystate(59 /* MetaLeft */);\n }\n get metaRight() {\n return this.#keystate(60 /* MetaRight */);\n }\n get shiftLeft() {\n return this.#keystate(61 /* ShiftLeft */);\n }\n get shiftRight() {\n return this.#keystate(62 /* ShiftRight */);\n }\n get space() {\n return this.#keystate(63 /* Space */);\n }\n get tab() {\n return this.#keystate(64 /* Tab */);\n }\n get convert() {\n return this.#keystate(65 /* Convert */);\n }\n get kanaMode() {\n return this.#keystate(66 /* KanaMode */);\n }\n get lang1() {\n return this.#keystate(67 /* Lang1 */);\n }\n get lang2() {\n return this.#keystate(68 /* Lang2 */);\n }\n get lang3() {\n return this.#keystate(69 /* Lang3 */);\n }\n get lang4() {\n return this.#keystate(70 /* Lang4 */);\n }\n get lang5() {\n return this.#keystate(71 /* Lang5 */);\n }\n get nonConvert() {\n return this.#keystate(72 /* NonConvert */);\n }\n get delete() {\n return this.#keystate(73 /* Delete */);\n }\n get end() {\n return this.#keystate(74 /* End */);\n }\n get help() {\n return this.#keystate(75 /* Help */);\n }\n get home() {\n return this.#keystate(76 /* Home */);\n }\n get insert() {\n return this.#keystate(77 /* Insert */);\n }\n get pageDown() {\n return this.#keystate(78 /* PageDown */);\n }\n get pageUp() {\n return this.#keystate(79 /* PageUp */);\n }\n get arrowDown() {\n return this.#keystate(80 /* ArrowDown */);\n }\n get arrowLeft() {\n return this.#keystate(81 /* ArrowLeft */);\n }\n get arrowRight() {\n return this.#keystate(82 /* ArrowRight */);\n }\n get arrowUp() {\n return this.#keystate(83 /* ArrowUp */);\n }\n get numLock() {\n return this.#keystate(84 /* NumLock */);\n }\n get numpad0() {\n return this.#keystate(85 /* Numpad0 */);\n }\n get numpad1() {\n return this.#keystate(86 /* Numpad1 */);\n }\n get numpad2() {\n return this.#keystate(87 /* Numpad2 */);\n }\n get numpad3() {\n return this.#keystate(88 /* Numpad3 */);\n }\n get numpad4() {\n return this.#keystate(89 /* Numpad4 */);\n }\n get numpad5() {\n return this.#keystate(90 /* Numpad5 */);\n }\n get numpad6() {\n return this.#keystate(91 /* Numpad6 */);\n }\n get numpad7() {\n return this.#keystate(92 /* Numpad7 */);\n }\n get numpad8() {\n return this.#keystate(93 /* Numpad8 */);\n }\n get numpad9() {\n return this.#keystate(94 /* Numpad9 */);\n }\n get numpadAdd() {\n return this.#keystate(95 /* NumpadAdd */);\n }\n get numpadBackspace() {\n return this.#keystate(96 /* NumpadBackspace */);\n }\n get numpadClear() {\n return this.#keystate(97 /* NumpadClear */);\n }\n get numpadClearEntry() {\n return this.#keystate(98 /* NumpadClearEntry */);\n }\n get numpadComma() {\n return this.#keystate(99 /* NumpadComma */);\n }\n get numpadDecimal() {\n return this.#keystate(100 /* NumpadDecimal */);\n }\n get numpadDivide() {\n return this.#keystate(101 /* NumpadDivide */);\n }\n get numpadEnter() {\n return this.#keystate(102 /* NumpadEnter */);\n }\n get numpadEqual() {\n return this.#keystate(103 /* NumpadEqual */);\n }\n get numpadHash() {\n return this.#keystate(104 /* NumpadHash */);\n }\n get numpadMemoryAdd() {\n return this.#keystate(105 /* NumpadMemoryAdd */);\n }\n get numpadMemoryClear() {\n return this.#keystate(106 /* NumpadMemoryClear */);\n }\n get numpadMemoryRecall() {\n return this.#keystate(107 /* NumpadMemoryRecall */);\n }\n get numpadMemoryStore() {\n return this.#keystate(108 /* NumpadMemoryStore */);\n }\n get numpadMemorySubtract() {\n return this.#keystate(109 /* NumpadMemorySubtract */);\n }\n get numpadMultiply() {\n return this.#keystate(110 /* NumpadMultiply */);\n }\n get numpadParenLeft() {\n return this.#keystate(111 /* NumpadParenLeft */);\n }\n get numpadParenRight() {\n return this.#keystate(112 /* NumpadParenRight */);\n }\n get numpadStar() {\n return this.#keystate(113 /* NumpadStar */);\n }\n get numpadSubtract() {\n return this.#keystate(114 /* NumpadSubtract */);\n }\n get escape() {\n return this.#keystate(115 /* Escape */);\n }\n get fn() {\n return this.#keystate(116 /* Fn */);\n }\n get fnLock() {\n return this.#keystate(117 /* FnLock */);\n }\n get printScreen() {\n return this.#keystate(118 /* PrintScreen */);\n }\n get scrollLock() {\n return this.#keystate(119 /* ScrollLock */);\n }\n get pause() {\n return this.#keystate(120 /* Pause */);\n }\n get browserBack() {\n return this.#keystate(121 /* BrowserBack */);\n }\n get browserFavorites() {\n return this.#keystate(122 /* BrowserFavorites */);\n }\n get browserForward() {\n return this.#keystate(123 /* BrowserForward */);\n }\n get browserHome() {\n return this.#keystate(124 /* BrowserHome */);\n }\n get browserRefresh() {\n return this.#keystate(125 /* BrowserRefresh */);\n }\n get browserSearch() {\n return this.#keystate(126 /* BrowserSearch */);\n }\n get browserStop() {\n return this.#keystate(127 /* BrowserStop */);\n }\n get eject() {\n return this.#keystate(128 /* Eject */);\n }\n get launchApp1() {\n return this.#keystate(129 /* LaunchApp1 */);\n }\n get launchApp2() {\n return this.#keystate(130 /* LaunchApp2 */);\n }\n get launchMail() {\n return this.#keystate(131 /* LaunchMail */);\n }\n get mediaPlayPause() {\n return this.#keystate(132 /* MediaPlayPause */);\n }\n get mediaSelect() {\n return this.#keystate(133 /* MediaSelect */);\n }\n get mediaStop() {\n return this.#keystate(134 /* MediaStop */);\n }\n get mediaTrackNext() {\n return this.#keystate(135 /* MediaTrackNext */);\n }\n get mediaTrackPrevious() {\n return this.#keystate(136 /* MediaTrackPrevious */);\n }\n get power() {\n return this.#keystate(137 /* Power */);\n }\n get sleep() {\n return this.#keystate(138 /* Sleep */);\n }\n get audioVolumeDown() {\n return this.#keystate(139 /* AudioVolumeDown */);\n }\n get audioVolumeMute() {\n return this.#keystate(140 /* AudioVolumeMute */);\n }\n get audioVolumeUp() {\n return this.#keystate(141 /* AudioVolumeUp */);\n }\n get wakeUp() {\n return this.#keystate(142 /* WakeUp */);\n }\n get hyper() {\n return this.#keystate(143 /* Hyper */);\n }\n get super() {\n return this.#keystate(144 /* Super */);\n }\n get turbo() {\n return this.#keystate(145 /* Turbo */);\n }\n get abort() {\n return this.#keystate(146 /* Abort */);\n }\n get resume() {\n return this.#keystate(147 /* Resume */);\n }\n get suspend() {\n return this.#keystate(148 /* Suspend */);\n }\n get again() {\n return this.#keystate(149 /* Again */);\n }\n get copy() {\n return this.#keystate(150 /* Copy */);\n }\n get cut() {\n return this.#keystate(151 /* Cut */);\n }\n get find() {\n return this.#keystate(152 /* Find */);\n }\n get open() {\n return this.#keystate(153 /* Open */);\n }\n get paste() {\n return this.#keystate(154 /* Paste */);\n }\n get props() {\n return this.#keystate(155 /* Props */);\n }\n get select() {\n return this.#keystate(156 /* Select */);\n }\n get undo() {\n return this.#keystate(157 /* Undo */);\n }\n get hiragana() {\n return this.#keystate(158 /* Hiragana */);\n }\n get katakana() {\n return this.#keystate(159 /* Katakana */);\n }\n get f1() {\n return this.#keystate(160 /* F1 */);\n }\n get f2() {\n return this.#keystate(161 /* F2 */);\n }\n get f3() {\n return this.#keystate(162 /* F3 */);\n }\n get f4() {\n return this.#keystate(163 /* F4 */);\n }\n get f5() {\n return this.#keystate(164 /* F5 */);\n }\n get f6() {\n return this.#keystate(165 /* F6 */);\n }\n get f7() {\n return this.#keystate(166 /* F7 */);\n }\n get f8() {\n return this.#keystate(167 /* F8 */);\n }\n get f9() {\n return this.#keystate(168 /* F9 */);\n }\n get f10() {\n return this.#keystate(169 /* F10 */);\n }\n get f11() {\n return this.#keystate(170 /* F11 */);\n }\n get f12() {\n return this.#keystate(171 /* F12 */);\n }\n get f13() {\n return this.#keystate(172 /* F13 */);\n }\n get f14() {\n return this.#keystate(173 /* F14 */);\n }\n get f15() {\n return this.#keystate(174 /* F15 */);\n }\n get f16() {\n return this.#keystate(175 /* F16 */);\n }\n get f17() {\n return this.#keystate(176 /* F17 */);\n }\n get f18() {\n return this.#keystate(177 /* F18 */);\n }\n get f19() {\n return this.#keystate(178 /* F19 */);\n }\n get f20() {\n return this.#keystate(179 /* F20 */);\n }\n get f21() {\n return this.#keystate(180 /* F21 */);\n }\n get f22() {\n return this.#keystate(181 /* F22 */);\n }\n get f23() {\n return this.#keystate(182 /* F23 */);\n }\n get f24() {\n return this.#keystate(183 /* F24 */);\n }\n get f25() {\n return this.#keystate(184 /* F25 */);\n }\n get f26() {\n return this.#keystate(185 /* F26 */);\n }\n get f27() {\n return this.#keystate(186 /* F27 */);\n }\n get f28() {\n return this.#keystate(187 /* F28 */);\n }\n get f29() {\n return this.#keystate(188 /* F29 */);\n }\n get f30() {\n return this.#keystate(189 /* F30 */);\n }\n get f31() {\n return this.#keystate(190 /* F31 */);\n }\n get f32() {\n return this.#keystate(191 /* F32 */);\n }\n get f33() {\n return this.#keystate(192 /* F33 */);\n }\n get f34() {\n return this.#keystate(193 /* F34 */);\n }\n get f35() {\n return this.#keystate(194 /* F35 */);\n }\n #keystate(code) {\n let state;\n if (this.#keystates.has(code)) {\n state = this.#keystates.get(code);\n } else {\n state = { down: false, held: false, up: false };\n this.#keystates.set(code, state);\n }\n state.held = !!(this.#dataView.getUint8(code) & 1);\n state.down = state.held && !(this.#dataView.getUint8(code) & 2);\n state.up = !state.held && !!(this.#dataView.getUint8(code) & 2);\n return state;\n }\n}\n// js/contexts/netContext.ts\nvar MAX_PEERS = 12;\nvar PEERS_ARRAY_OFFSET = 32;\nvar PEER_CTX_SIZE = 8;\nvar LAST_ROLLBACK_DEPTH_OFFSET = 128;\nvar TOTAL_ROLLBACKS_OFFSET = 132;\nvar FRAMES_RESIMULATED_OFFSET = 136;\nvar PEER_CONNECTED_OFFSET = 0;\nvar PEER_SEQ_OFFSET = 2;\nvar PEER_ACK_OFFSET = 4;\nvar STATUS_MAP = {\n 0: \"offline\",\n 1: \"local\",\n 2: \"join:pending\",\n 3: \"connected\",\n 4: \"disconnected\"\n};\n\nclass NetContext {\n dataView;\n #peers = Array.from({ length: MAX_PEERS }, () => ({\n isLocal: false,\n seq: -1,\n ack: -1\n }));\n #peersResult = [];\n constructor(dataView) {\n this.dataView = dataView;\n }\n #hasValidBuffer() {\n if (!this.dataView)\n return false;\n return this.dataView.buffer.byteLength > 0;\n }\n get peerCount() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n return this.dataView.getUint8(0);\n }\n get localPeerId() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n return this.dataView.getUint8(1);\n }\n get isInSession() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n return this.dataView.getUint8(2) !== 0;\n }\n get status() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n const statusByte = this.dataView.getUint8(3);\n return STATUS_MAP[statusByte] ?? \"local\";\n }\n get matchFrame() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n return this.dataView.getUint32(4, true);\n }\n get sessionStartFrame() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n return this.dataView.getUint32(8, true);\n }\n get roomCode() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n const bytes = [];\n for (let i = 0;i < 8; i++) {\n const byte = this.dataView.getUint8(12 + i);\n if (byte === 0)\n break;\n bytes.push(byte);\n }\n return String.fromCharCode(...bytes);\n }\n get wantsRoomCode() {\n if (!this.#hasValidBuffer()) {\n return;\n }\n const bytes = [];\n for (let i = 0;i < 8; i++) {\n const byte = this.dataView.getUint8(20 + i);\n if (byte === 0)\n break;\n bytes.push(byte);\n }\n return bytes.length > 0 ? String.fromCharCode(...bytes) : undefined;\n }\n set wantsRoomCode(code) {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n for (let i = 0;i < 8; i++) {\n this.dataView.setUint8(20 + i, 0);\n }\n if (code) {\n for (let i = 0;i < Math.min(code.length, 7); i++) {\n this.dataView.setUint8(20 + i, code.charCodeAt(i));\n }\n }\n }\n get wantsDisconnect() {\n if (!this.#hasValidBuffer()) {\n return false;\n }\n return this.dataView.getUint8(28) !== 0;\n }\n set wantsDisconnect(value) {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n this.dataView.setUint8(28, value ? 1 : 0);\n }\n get peers() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n const dv = this.dataView;\n const localPeerId = this.localPeerId;\n const matchFrame = this.matchFrame;\n let minRemoteSeq = -1;\n for (let i = 0;i < MAX_PEERS; i++) {\n if (i === localPeerId)\n continue;\n const peerOffset = PEERS_ARRAY_OFFSET + i * PEER_CTX_SIZE;\n if (dv.getUint8(peerOffset + PEER_CONNECTED_OFFSET) !== 1)\n continue;\n const seq = dv.getInt16(peerOffset + PEER_SEQ_OFFSET, true);\n if (seq < 0)\n continue;\n if (minRemoteSeq === -1 || seq < minRemoteSeq) {\n minRemoteSeq = seq;\n }\n }\n this.#peersResult.length = 0;\n for (let i = 0;i < MAX_PEERS; i++) {\n const peerOffset = PEERS_ARRAY_OFFSET + i * PEER_CTX_SIZE;\n if (dv.getUint8(peerOffset + PEER_CONNECTED_OFFSET) !== 1)\n continue;\n const peer = this.#peers[i];\n if (!peer) {\n throw new Error(`Unexpected missing peer object at index ${i}`);\n }\n const isLocal = i === localPeerId;\n peer.isLocal = isLocal;\n if (isLocal) {\n peer.seq = matchFrame;\n peer.ack = minRemoteSeq;\n } else {\n peer.seq = dv.getInt16(peerOffset + PEER_SEQ_OFFSET, true);\n peer.ack = dv.getInt16(peerOffset + PEER_ACK_OFFSET, true);\n }\n this.#peersResult.push(peer);\n }\n return this.#peersResult;\n }\n get lastRollbackDepth() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n return this.dataView.getUint32(LAST_ROLLBACK_DEPTH_OFFSET, true);\n }\n get totalRollbacks() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n return this.dataView.getUint32(TOTAL_ROLLBACKS_OFFSET, true);\n }\n get framesResimulated() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n return Number(this.dataView.getBigUint64(FRAMES_RESIMULATED_OFFSET, true));\n }\n}\n// js/contexts/timeContext.ts\nclass TimeContext {\n dataView;\n constructor(dataView) {\n this.dataView = dataView;\n }\n get frame() {\n if (!this.dataView) {\n throw new Error(\"TimeContext DataView is not initialized\");\n }\n return this.dataView.getUint32(0, true);\n }\n get dt() {\n if (!this.dataView) {\n throw new Error(\"TimeContext DataView is not initialized\");\n }\n return this.dataView.getUint32(4, true) / 1000;\n }\n get time() {\n if (!this.dataView) {\n throw new Error(\"TimeContext DataView is not initialized\");\n }\n return this.dataView.getUint32(8, true) / 1000;\n }\n}\n// js/tape.ts\nvar TAPE_MAGIC = 1413566533;\nfunction readTapeHeader(tape) {\n const view = new DataView(tape.buffer, tape.byteOffset, tape.byteLength);\n const magic = view.getUint32(0, true);\n if (magic !== TAPE_MAGIC) {\n throw new Error(`Invalid tape format: expected magic ${TAPE_MAGIC.toString(16)}, got ${magic.toString(16)}`);\n }\n return {\n magic,\n version: view.getUint16(4, true),\n startFrame: view.getUint32(8, true),\n frameCount: view.getUint16(12, true),\n eventCount: view.getUint16(14, true)\n };\n}\n// js/defaultUrl.ts\nvar DEFAULT_WASM_URL = new URL(\"https://unpkg.com/@bloopjs/engine@0.0.88/wasm/bloop.wasm\");\n\n// js/engine.ts\nvar MAX_ROLLBACK_FRAMES = 500;\nvar TIME_CTX_OFFSET = 0;\nvar INPUT_CTX_OFFSET = TIME_CTX_OFFSET + 4;\nvar EVENTS_OFFSET = INPUT_CTX_OFFSET + 4;\nvar NET_CTX_OFFSET = EVENTS_OFFSET + 4;\nvar SNAPSHOT_HEADER_LEN = 16;\nvar SNAPSHOT_HEADER_USER_LEN_OFFSET = 4;\nvar SNAPSHOT_HEADER_ENGINE_LEN_OFFSET = 8;\nexport {\n readTapeHeader,\n mouseButtonToMouseButtonCode,\n mouseButtonCodeToMouseButton,\n keyToKeyCode,\n keyCodeToKey,\n inputSourceToInputSourceCode,\n inputSourceCodeToInputSource,\n TimeContext,\n TIME_CTX_OFFSET,\n SNAPSHOT_HEADER_USER_LEN_OFFSET,\n SNAPSHOT_HEADER_LEN,\n SNAPSHOT_HEADER_ENGINE_LEN_OFFSET,\n PlayerInputContext,\n PLAYER_INPUTS_SIZE,\n NetContext,\n NET_CTX_OFFSET,\n MouseContext,\n MOUSE_OFFSET,\n MOUSE_BUTTONS_OFFSET,\n MAX_ROLLBACK_FRAMES,\n MAX_PLAYERS,\n KeyboardContext,\n KEYBOARD_SIZE,\n KEYBOARD_OFFSET,\n InputContext,\n INPUT_CTX_SIZE,\n INPUT_CTX_OFFSET,\n exports_enums as Enums,\n EVENT_PAYLOAD_SIZE,\n EVENT_PAYLOAD_ALIGN,\n EVENTS_OFFSET,\n DEFAULT_WASM_URL\n};\n\n//# debugId=0F45F0FA106F38C064756E2164756E21\n//# sourceMappingURL=engine.js.map\n",
6
+ "var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, {\n get: all[name],\n enumerable: true,\n configurable: true,\n set: (newValue) => all[name] = () => newValue\n });\n};\n\n// js/codegen/enums.ts\nvar exports_enums = {};\n__export(exports_enums, {\n NetJoinFailReason: () => NetJoinFailReason,\n MouseButton: () => MouseButton,\n Key: () => Key,\n InputSource: () => InputSource,\n EventType: () => EventType\n});\nvar EventType;\n((EventType2) => {\n EventType2[EventType2[\"None\"] = 0] = \"None\";\n EventType2[EventType2[\"KeyDown\"] = 1] = \"KeyDown\";\n EventType2[EventType2[\"KeyUp\"] = 2] = \"KeyUp\";\n EventType2[EventType2[\"MouseMove\"] = 3] = \"MouseMove\";\n EventType2[EventType2[\"MouseDown\"] = 4] = \"MouseDown\";\n EventType2[EventType2[\"MouseUp\"] = 5] = \"MouseUp\";\n EventType2[EventType2[\"MouseWheel\"] = 6] = \"MouseWheel\";\n EventType2[EventType2[\"FrameStart\"] = 7] = \"FrameStart\";\n EventType2[EventType2[\"NetJoinOk\"] = 8] = \"NetJoinOk\";\n EventType2[EventType2[\"NetJoinFail\"] = 9] = \"NetJoinFail\";\n EventType2[EventType2[\"NetPeerJoin\"] = 10] = \"NetPeerJoin\";\n EventType2[EventType2[\"NetPeerLeave\"] = 11] = \"NetPeerLeave\";\n EventType2[EventType2[\"NetPeerAssignLocalId\"] = 12] = \"NetPeerAssignLocalId\";\n EventType2[EventType2[\"NetPacketReceived\"] = 13] = \"NetPacketReceived\";\n EventType2[EventType2[\"NetSessionInit\"] = 14] = \"NetSessionInit\";\n})(EventType ||= {});\nvar MouseButton;\n((MouseButton2) => {\n MouseButton2[MouseButton2[\"None\"] = 0] = \"None\";\n MouseButton2[MouseButton2[\"Left\"] = 1] = \"Left\";\n MouseButton2[MouseButton2[\"Middle\"] = 2] = \"Middle\";\n MouseButton2[MouseButton2[\"Right\"] = 3] = \"Right\";\n MouseButton2[MouseButton2[\"X1\"] = 4] = \"X1\";\n MouseButton2[MouseButton2[\"X2\"] = 5] = \"X2\";\n MouseButton2[MouseButton2[\"X3\"] = 6] = \"X3\";\n MouseButton2[MouseButton2[\"X4\"] = 7] = \"X4\";\n MouseButton2[MouseButton2[\"X5\"] = 8] = \"X5\";\n})(MouseButton ||= {});\nvar Key;\n((Key2) => {\n Key2[Key2[\"None\"] = 0] = \"None\";\n Key2[Key2[\"Backquote\"] = 1] = \"Backquote\";\n Key2[Key2[\"Backslash\"] = 2] = \"Backslash\";\n Key2[Key2[\"BracketLeft\"] = 3] = \"BracketLeft\";\n Key2[Key2[\"BracketRight\"] = 4] = \"BracketRight\";\n Key2[Key2[\"Comma\"] = 5] = \"Comma\";\n Key2[Key2[\"Digit0\"] = 6] = \"Digit0\";\n Key2[Key2[\"Digit1\"] = 7] = \"Digit1\";\n Key2[Key2[\"Digit2\"] = 8] = \"Digit2\";\n Key2[Key2[\"Digit3\"] = 9] = \"Digit3\";\n Key2[Key2[\"Digit4\"] = 10] = \"Digit4\";\n Key2[Key2[\"Digit5\"] = 11] = \"Digit5\";\n Key2[Key2[\"Digit6\"] = 12] = \"Digit6\";\n Key2[Key2[\"Digit7\"] = 13] = \"Digit7\";\n Key2[Key2[\"Digit8\"] = 14] = \"Digit8\";\n Key2[Key2[\"Digit9\"] = 15] = \"Digit9\";\n Key2[Key2[\"Equal\"] = 16] = \"Equal\";\n Key2[Key2[\"IntlBackslash\"] = 17] = \"IntlBackslash\";\n Key2[Key2[\"IntlRo\"] = 18] = \"IntlRo\";\n Key2[Key2[\"IntlYen\"] = 19] = \"IntlYen\";\n Key2[Key2[\"KeyA\"] = 20] = \"KeyA\";\n Key2[Key2[\"KeyB\"] = 21] = \"KeyB\";\n Key2[Key2[\"KeyC\"] = 22] = \"KeyC\";\n Key2[Key2[\"KeyD\"] = 23] = \"KeyD\";\n Key2[Key2[\"KeyE\"] = 24] = \"KeyE\";\n Key2[Key2[\"KeyF\"] = 25] = \"KeyF\";\n Key2[Key2[\"KeyG\"] = 26] = \"KeyG\";\n Key2[Key2[\"KeyH\"] = 27] = \"KeyH\";\n Key2[Key2[\"KeyI\"] = 28] = \"KeyI\";\n Key2[Key2[\"KeyJ\"] = 29] = \"KeyJ\";\n Key2[Key2[\"KeyK\"] = 30] = \"KeyK\";\n Key2[Key2[\"KeyL\"] = 31] = \"KeyL\";\n Key2[Key2[\"KeyM\"] = 32] = \"KeyM\";\n Key2[Key2[\"KeyN\"] = 33] = \"KeyN\";\n Key2[Key2[\"KeyO\"] = 34] = \"KeyO\";\n Key2[Key2[\"KeyP\"] = 35] = \"KeyP\";\n Key2[Key2[\"KeyQ\"] = 36] = \"KeyQ\";\n Key2[Key2[\"KeyR\"] = 37] = \"KeyR\";\n Key2[Key2[\"KeyS\"] = 38] = \"KeyS\";\n Key2[Key2[\"KeyT\"] = 39] = \"KeyT\";\n Key2[Key2[\"KeyU\"] = 40] = \"KeyU\";\n Key2[Key2[\"KeyV\"] = 41] = \"KeyV\";\n Key2[Key2[\"KeyW\"] = 42] = \"KeyW\";\n Key2[Key2[\"KeyX\"] = 43] = \"KeyX\";\n Key2[Key2[\"KeyY\"] = 44] = \"KeyY\";\n Key2[Key2[\"KeyZ\"] = 45] = \"KeyZ\";\n Key2[Key2[\"Minus\"] = 46] = \"Minus\";\n Key2[Key2[\"Period\"] = 47] = \"Period\";\n Key2[Key2[\"Quote\"] = 48] = \"Quote\";\n Key2[Key2[\"Semicolon\"] = 49] = \"Semicolon\";\n Key2[Key2[\"Slash\"] = 50] = \"Slash\";\n Key2[Key2[\"AltLeft\"] = 51] = \"AltLeft\";\n Key2[Key2[\"AltRight\"] = 52] = \"AltRight\";\n Key2[Key2[\"Backspace\"] = 53] = \"Backspace\";\n Key2[Key2[\"CapsLock\"] = 54] = \"CapsLock\";\n Key2[Key2[\"ContextMenu\"] = 55] = \"ContextMenu\";\n Key2[Key2[\"ControlLeft\"] = 56] = \"ControlLeft\";\n Key2[Key2[\"ControlRight\"] = 57] = \"ControlRight\";\n Key2[Key2[\"Enter\"] = 58] = \"Enter\";\n Key2[Key2[\"MetaLeft\"] = 59] = \"MetaLeft\";\n Key2[Key2[\"MetaRight\"] = 60] = \"MetaRight\";\n Key2[Key2[\"ShiftLeft\"] = 61] = \"ShiftLeft\";\n Key2[Key2[\"ShiftRight\"] = 62] = \"ShiftRight\";\n Key2[Key2[\"Space\"] = 63] = \"Space\";\n Key2[Key2[\"Tab\"] = 64] = \"Tab\";\n Key2[Key2[\"Convert\"] = 65] = \"Convert\";\n Key2[Key2[\"KanaMode\"] = 66] = \"KanaMode\";\n Key2[Key2[\"Lang1\"] = 67] = \"Lang1\";\n Key2[Key2[\"Lang2\"] = 68] = \"Lang2\";\n Key2[Key2[\"Lang3\"] = 69] = \"Lang3\";\n Key2[Key2[\"Lang4\"] = 70] = \"Lang4\";\n Key2[Key2[\"Lang5\"] = 71] = \"Lang5\";\n Key2[Key2[\"NonConvert\"] = 72] = \"NonConvert\";\n Key2[Key2[\"Delete\"] = 73] = \"Delete\";\n Key2[Key2[\"End\"] = 74] = \"End\";\n Key2[Key2[\"Help\"] = 75] = \"Help\";\n Key2[Key2[\"Home\"] = 76] = \"Home\";\n Key2[Key2[\"Insert\"] = 77] = \"Insert\";\n Key2[Key2[\"PageDown\"] = 78] = \"PageDown\";\n Key2[Key2[\"PageUp\"] = 79] = \"PageUp\";\n Key2[Key2[\"ArrowDown\"] = 80] = \"ArrowDown\";\n Key2[Key2[\"ArrowLeft\"] = 81] = \"ArrowLeft\";\n Key2[Key2[\"ArrowRight\"] = 82] = \"ArrowRight\";\n Key2[Key2[\"ArrowUp\"] = 83] = \"ArrowUp\";\n Key2[Key2[\"NumLock\"] = 84] = \"NumLock\";\n Key2[Key2[\"Numpad0\"] = 85] = \"Numpad0\";\n Key2[Key2[\"Numpad1\"] = 86] = \"Numpad1\";\n Key2[Key2[\"Numpad2\"] = 87] = \"Numpad2\";\n Key2[Key2[\"Numpad3\"] = 88] = \"Numpad3\";\n Key2[Key2[\"Numpad4\"] = 89] = \"Numpad4\";\n Key2[Key2[\"Numpad5\"] = 90] = \"Numpad5\";\n Key2[Key2[\"Numpad6\"] = 91] = \"Numpad6\";\n Key2[Key2[\"Numpad7\"] = 92] = \"Numpad7\";\n Key2[Key2[\"Numpad8\"] = 93] = \"Numpad8\";\n Key2[Key2[\"Numpad9\"] = 94] = \"Numpad9\";\n Key2[Key2[\"NumpadAdd\"] = 95] = \"NumpadAdd\";\n Key2[Key2[\"NumpadBackspace\"] = 96] = \"NumpadBackspace\";\n Key2[Key2[\"NumpadClear\"] = 97] = \"NumpadClear\";\n Key2[Key2[\"NumpadClearEntry\"] = 98] = \"NumpadClearEntry\";\n Key2[Key2[\"NumpadComma\"] = 99] = \"NumpadComma\";\n Key2[Key2[\"NumpadDecimal\"] = 100] = \"NumpadDecimal\";\n Key2[Key2[\"NumpadDivide\"] = 101] = \"NumpadDivide\";\n Key2[Key2[\"NumpadEnter\"] = 102] = \"NumpadEnter\";\n Key2[Key2[\"NumpadEqual\"] = 103] = \"NumpadEqual\";\n Key2[Key2[\"NumpadHash\"] = 104] = \"NumpadHash\";\n Key2[Key2[\"NumpadMemoryAdd\"] = 105] = \"NumpadMemoryAdd\";\n Key2[Key2[\"NumpadMemoryClear\"] = 106] = \"NumpadMemoryClear\";\n Key2[Key2[\"NumpadMemoryRecall\"] = 107] = \"NumpadMemoryRecall\";\n Key2[Key2[\"NumpadMemoryStore\"] = 108] = \"NumpadMemoryStore\";\n Key2[Key2[\"NumpadMemorySubtract\"] = 109] = \"NumpadMemorySubtract\";\n Key2[Key2[\"NumpadMultiply\"] = 110] = \"NumpadMultiply\";\n Key2[Key2[\"NumpadParenLeft\"] = 111] = \"NumpadParenLeft\";\n Key2[Key2[\"NumpadParenRight\"] = 112] = \"NumpadParenRight\";\n Key2[Key2[\"NumpadStar\"] = 113] = \"NumpadStar\";\n Key2[Key2[\"NumpadSubtract\"] = 114] = \"NumpadSubtract\";\n Key2[Key2[\"Escape\"] = 115] = \"Escape\";\n Key2[Key2[\"Fn\"] = 116] = \"Fn\";\n Key2[Key2[\"FnLock\"] = 117] = \"FnLock\";\n Key2[Key2[\"PrintScreen\"] = 118] = \"PrintScreen\";\n Key2[Key2[\"ScrollLock\"] = 119] = \"ScrollLock\";\n Key2[Key2[\"Pause\"] = 120] = \"Pause\";\n Key2[Key2[\"BrowserBack\"] = 121] = \"BrowserBack\";\n Key2[Key2[\"BrowserFavorites\"] = 122] = \"BrowserFavorites\";\n Key2[Key2[\"BrowserForward\"] = 123] = \"BrowserForward\";\n Key2[Key2[\"BrowserHome\"] = 124] = \"BrowserHome\";\n Key2[Key2[\"BrowserRefresh\"] = 125] = \"BrowserRefresh\";\n Key2[Key2[\"BrowserSearch\"] = 126] = \"BrowserSearch\";\n Key2[Key2[\"BrowserStop\"] = 127] = \"BrowserStop\";\n Key2[Key2[\"Eject\"] = 128] = \"Eject\";\n Key2[Key2[\"LaunchApp1\"] = 129] = \"LaunchApp1\";\n Key2[Key2[\"LaunchApp2\"] = 130] = \"LaunchApp2\";\n Key2[Key2[\"LaunchMail\"] = 131] = \"LaunchMail\";\n Key2[Key2[\"MediaPlayPause\"] = 132] = \"MediaPlayPause\";\n Key2[Key2[\"MediaSelect\"] = 133] = \"MediaSelect\";\n Key2[Key2[\"MediaStop\"] = 134] = \"MediaStop\";\n Key2[Key2[\"MediaTrackNext\"] = 135] = \"MediaTrackNext\";\n Key2[Key2[\"MediaTrackPrevious\"] = 136] = \"MediaTrackPrevious\";\n Key2[Key2[\"Power\"] = 137] = \"Power\";\n Key2[Key2[\"Sleep\"] = 138] = \"Sleep\";\n Key2[Key2[\"AudioVolumeDown\"] = 139] = \"AudioVolumeDown\";\n Key2[Key2[\"AudioVolumeMute\"] = 140] = \"AudioVolumeMute\";\n Key2[Key2[\"AudioVolumeUp\"] = 141] = \"AudioVolumeUp\";\n Key2[Key2[\"WakeUp\"] = 142] = \"WakeUp\";\n Key2[Key2[\"Hyper\"] = 143] = \"Hyper\";\n Key2[Key2[\"Super\"] = 144] = \"Super\";\n Key2[Key2[\"Turbo\"] = 145] = \"Turbo\";\n Key2[Key2[\"Abort\"] = 146] = \"Abort\";\n Key2[Key2[\"Resume\"] = 147] = \"Resume\";\n Key2[Key2[\"Suspend\"] = 148] = \"Suspend\";\n Key2[Key2[\"Again\"] = 149] = \"Again\";\n Key2[Key2[\"Copy\"] = 150] = \"Copy\";\n Key2[Key2[\"Cut\"] = 151] = \"Cut\";\n Key2[Key2[\"Find\"] = 152] = \"Find\";\n Key2[Key2[\"Open\"] = 153] = \"Open\";\n Key2[Key2[\"Paste\"] = 154] = \"Paste\";\n Key2[Key2[\"Props\"] = 155] = \"Props\";\n Key2[Key2[\"Select\"] = 156] = \"Select\";\n Key2[Key2[\"Undo\"] = 157] = \"Undo\";\n Key2[Key2[\"Hiragana\"] = 158] = \"Hiragana\";\n Key2[Key2[\"Katakana\"] = 159] = \"Katakana\";\n Key2[Key2[\"F1\"] = 160] = \"F1\";\n Key2[Key2[\"F2\"] = 161] = \"F2\";\n Key2[Key2[\"F3\"] = 162] = \"F3\";\n Key2[Key2[\"F4\"] = 163] = \"F4\";\n Key2[Key2[\"F5\"] = 164] = \"F5\";\n Key2[Key2[\"F6\"] = 165] = \"F6\";\n Key2[Key2[\"F7\"] = 166] = \"F7\";\n Key2[Key2[\"F8\"] = 167] = \"F8\";\n Key2[Key2[\"F9\"] = 168] = \"F9\";\n Key2[Key2[\"F10\"] = 169] = \"F10\";\n Key2[Key2[\"F11\"] = 170] = \"F11\";\n Key2[Key2[\"F12\"] = 171] = \"F12\";\n Key2[Key2[\"F13\"] = 172] = \"F13\";\n Key2[Key2[\"F14\"] = 173] = \"F14\";\n Key2[Key2[\"F15\"] = 174] = \"F15\";\n Key2[Key2[\"F16\"] = 175] = \"F16\";\n Key2[Key2[\"F17\"] = 176] = \"F17\";\n Key2[Key2[\"F18\"] = 177] = \"F18\";\n Key2[Key2[\"F19\"] = 178] = \"F19\";\n Key2[Key2[\"F20\"] = 179] = \"F20\";\n Key2[Key2[\"F21\"] = 180] = \"F21\";\n Key2[Key2[\"F22\"] = 181] = \"F22\";\n Key2[Key2[\"F23\"] = 182] = \"F23\";\n Key2[Key2[\"F24\"] = 183] = \"F24\";\n Key2[Key2[\"F25\"] = 184] = \"F25\";\n Key2[Key2[\"F26\"] = 185] = \"F26\";\n Key2[Key2[\"F27\"] = 186] = \"F27\";\n Key2[Key2[\"F28\"] = 187] = \"F28\";\n Key2[Key2[\"F29\"] = 188] = \"F29\";\n Key2[Key2[\"F30\"] = 189] = \"F30\";\n Key2[Key2[\"F31\"] = 190] = \"F31\";\n Key2[Key2[\"F32\"] = 191] = \"F32\";\n Key2[Key2[\"F33\"] = 192] = \"F33\";\n Key2[Key2[\"F34\"] = 193] = \"F34\";\n Key2[Key2[\"F35\"] = 194] = \"F35\";\n})(Key ||= {});\nvar InputSource;\n((InputSource2) => {\n InputSource2[InputSource2[\"None\"] = 0] = \"None\";\n InputSource2[InputSource2[\"LocalKeyboard\"] = 1] = \"LocalKeyboard\";\n InputSource2[InputSource2[\"LocalMouse\"] = 2] = \"LocalMouse\";\n InputSource2[InputSource2[\"LocalTouch\"] = 3] = \"LocalTouch\";\n InputSource2[InputSource2[\"LocalGamepad0\"] = 4] = \"LocalGamepad0\";\n InputSource2[InputSource2[\"LocalGamepad1\"] = 5] = \"LocalGamepad1\";\n InputSource2[InputSource2[\"LocalGamepad2\"] = 6] = \"LocalGamepad2\";\n InputSource2[InputSource2[\"LocalGamepad3\"] = 7] = \"LocalGamepad3\";\n InputSource2[InputSource2[\"LocalGamepad4\"] = 8] = \"LocalGamepad4\";\n InputSource2[InputSource2[\"LocalGamepad5\"] = 9] = \"LocalGamepad5\";\n InputSource2[InputSource2[\"LocalGamepad6\"] = 10] = \"LocalGamepad6\";\n InputSource2[InputSource2[\"LocalGamepad7\"] = 11] = \"LocalGamepad7\";\n InputSource2[InputSource2[\"LocalGamepad8\"] = 12] = \"LocalGamepad8\";\n InputSource2[InputSource2[\"LocalGamepad9\"] = 13] = \"LocalGamepad9\";\n InputSource2[InputSource2[\"LocalGamepad10\"] = 14] = \"LocalGamepad10\";\n InputSource2[InputSource2[\"LocalGamepad11\"] = 15] = \"LocalGamepad11\";\n InputSource2[InputSource2[\"RemotePeer0\"] = 128] = \"RemotePeer0\";\n InputSource2[InputSource2[\"RemotePeer1\"] = 129] = \"RemotePeer1\";\n InputSource2[InputSource2[\"RemotePeer2\"] = 130] = \"RemotePeer2\";\n InputSource2[InputSource2[\"RemotePeer3\"] = 131] = \"RemotePeer3\";\n InputSource2[InputSource2[\"RemotePeer4\"] = 132] = \"RemotePeer4\";\n InputSource2[InputSource2[\"RemotePeer5\"] = 133] = \"RemotePeer5\";\n InputSource2[InputSource2[\"RemotePeer6\"] = 134] = \"RemotePeer6\";\n InputSource2[InputSource2[\"RemotePeer7\"] = 135] = \"RemotePeer7\";\n InputSource2[InputSource2[\"RemotePeer8\"] = 136] = \"RemotePeer8\";\n InputSource2[InputSource2[\"RemotePeer9\"] = 137] = \"RemotePeer9\";\n InputSource2[InputSource2[\"RemotePeer10\"] = 138] = \"RemotePeer10\";\n InputSource2[InputSource2[\"RemotePeer11\"] = 139] = \"RemotePeer11\";\n InputSource2[InputSource2[\"Unmapped\"] = 255] = \"Unmapped\";\n})(InputSource ||= {});\nvar NetJoinFailReason;\n((NetJoinFailReason2) => {\n NetJoinFailReason2[NetJoinFailReason2[\"unknown\"] = 0] = \"unknown\";\n NetJoinFailReason2[NetJoinFailReason2[\"timeout\"] = 1] = \"timeout\";\n NetJoinFailReason2[NetJoinFailReason2[\"room_full\"] = 2] = \"room_full\";\n NetJoinFailReason2[NetJoinFailReason2[\"room_not_found\"] = 3] = \"room_not_found\";\n NetJoinFailReason2[NetJoinFailReason2[\"already_in_room\"] = 4] = \"already_in_room\";\n})(NetJoinFailReason ||= {});\n// js/codegen/offsets.ts\nvar TIME_CTX_FRAME_OFFSET = 0;\nvar TIME_CTX_DT_MS_OFFSET = 4;\nvar TIME_CTX_TOTAL_MS_OFFSET = 8;\nvar PEER_CTX_CONNECTED_OFFSET = 0;\nvar PEER_CTX_SEQ_OFFSET = 2;\nvar PEER_CTX_ACK_OFFSET = 4;\nvar PEER_CTX_SIZE = 8;\nvar NET_CTX_PEER_COUNT_OFFSET = 0;\nvar NET_CTX_LOCAL_PEER_ID_OFFSET = 1;\nvar NET_CTX_IN_SESSION_OFFSET = 2;\nvar NET_CTX_STATUS_OFFSET = 3;\nvar NET_CTX_MATCH_FRAME_OFFSET = 4;\nvar NET_CTX_SESSION_START_FRAME_OFFSET = 8;\nvar NET_CTX_ROOM_CODE_OFFSET = 12;\nvar NET_CTX_WANTS_ROOM_CODE_OFFSET = 20;\nvar NET_CTX_WANTS_DISCONNECT_OFFSET = 28;\nvar NET_CTX_PEERS_OFFSET = 32;\nvar NET_CTX_LAST_ROLLBACK_DEPTH_OFFSET = 128;\nvar NET_CTX_TOTAL_ROLLBACKS_OFFSET = 132;\nvar NET_CTX_FRAMES_RESIMULATED_OFFSET = 136;\nvar MOUSE_CTX_X_OFFSET = 0;\nvar MOUSE_CTX_Y_OFFSET = 4;\nvar MOUSE_CTX_WHEEL_X_OFFSET = 8;\nvar MOUSE_CTX_WHEEL_Y_OFFSET = 12;\nvar MOUSE_CTX_BUTTON_STATES_OFFSET = 16;\nvar MOUSE_CTX_SIZE = 24;\nvar KEY_CTX_SIZE = 256;\nvar PLAYER_INPUTS_KEY_CTX_OFFSET = 0;\nvar PLAYER_INPUTS_MOUSE_CTX_OFFSET = 256;\nvar PLAYER_INPUTS_SIZE = 280;\nvar INPUT_CTX_SIZE = 3360;\nvar MAX_PLAYERS = 12;\n\n// js/contexts/inputContext.ts\nclass PlayerInputContext {\n #dataView;\n #keys;\n #mouse;\n constructor(dataView) {\n this.#dataView = dataView;\n }\n get keys() {\n if (!this.#keys) {\n this.#keys = new KeyboardContext(new DataView(this.#dataView.buffer, this.#dataView.byteOffset + PLAYER_INPUTS_KEY_CTX_OFFSET));\n }\n return this.#keys;\n }\n get mouse() {\n if (!this.#mouse) {\n this.#mouse = new MouseContext(new DataView(this.#dataView.buffer, this.#dataView.byteOffset + PLAYER_INPUTS_MOUSE_CTX_OFFSET));\n }\n return this.#mouse;\n }\n}\n\nclass InputContext {\n #dataView;\n #players = [];\n constructor(dataView) {\n if (dataView) {\n this.#dataView = dataView;\n this.#buildPlayers();\n }\n }\n get dataView() {\n if (!this.#dataView) {\n throw new Error(\"DataView is not initialized on InputContext\");\n }\n return this.#dataView;\n }\n set dataView(dataView) {\n this.#dataView = dataView;\n this.#buildPlayers();\n }\n hasDataView() {\n return !!this.#dataView;\n }\n #buildPlayers() {\n this.#players = [];\n for (let i = 0;i < MAX_PLAYERS; i++) {\n const playerOffset = i * PLAYER_INPUTS_SIZE;\n const playerDataView = new DataView(this.dataView.buffer, this.dataView.byteOffset + playerOffset, PLAYER_INPUTS_SIZE);\n this.#players.push(new PlayerInputContext(playerDataView));\n }\n }\n get players() {\n return this.#players;\n }\n get keys() {\n if (!this.#players[0]) {\n throw new Error(\"No player inputs available in InputContext\");\n }\n return this.#players[0].keys;\n }\n get mouse() {\n if (!this.#players[0]) {\n throw new Error(\"No player inputs available in InputContext\");\n }\n return this.#players[0].mouse;\n }\n}\n\nclass MouseContext {\n #dataView;\n #buttonStates = new Map;\n constructor(dataView) {\n this.#dataView = dataView;\n }\n get x() {\n return this.#dataView.getFloat32(MOUSE_CTX_X_OFFSET, true);\n }\n get y() {\n return this.#dataView.getFloat32(MOUSE_CTX_Y_OFFSET, true);\n }\n get wheel() {\n return { x: this.wheelX, y: this.wheelY };\n }\n get wheelX() {\n return this.#dataView.getFloat32(MOUSE_CTX_WHEEL_X_OFFSET, true);\n }\n get wheelY() {\n return this.#dataView.getFloat32(MOUSE_CTX_WHEEL_Y_OFFSET, true);\n }\n get left() {\n return this.#buttonState(1 /* Left */);\n }\n get right() {\n return this.#buttonState(3 /* Right */);\n }\n get middle() {\n return this.#buttonState(2 /* Middle */);\n }\n #buttonState(code) {\n let state;\n if (this.#buttonStates.has(code)) {\n state = this.#buttonStates.get(code);\n } else {\n state = { down: false, held: false, up: false };\n this.#buttonStates.set(code, state);\n }\n const offset = MOUSE_CTX_BUTTON_STATES_OFFSET;\n state.held = !!(this.#dataView.getUint8(offset + code) & 1);\n state.down = state.held && !(this.#dataView.getUint8(offset + code) & 2);\n state.up = !state.held && !!(this.#dataView.getUint8(offset + code) & 2);\n return state;\n }\n}\n\nclass KeyboardContext {\n #dataView;\n #keystates = new Map;\n constructor(dataView) {\n this.#dataView = dataView;\n }\n get shift() {\n return this.shiftLeft || this.shiftRight;\n }\n get alt() {\n return this.altLeft || this.altRight;\n }\n get control() {\n return this.controlLeft || this.controlRight;\n }\n get meta() {\n return this.metaLeft || this.metaRight;\n }\n get backquote() {\n return this.#keystate(1 /* Backquote */);\n }\n get backslash() {\n return this.#keystate(2 /* Backslash */);\n }\n get bracketLeft() {\n return this.#keystate(3 /* BracketLeft */);\n }\n get bracketRight() {\n return this.#keystate(4 /* BracketRight */);\n }\n get comma() {\n return this.#keystate(5 /* Comma */);\n }\n get digit0() {\n return this.#keystate(6 /* Digit0 */);\n }\n get digit1() {\n return this.#keystate(7 /* Digit1 */);\n }\n get digit2() {\n return this.#keystate(8 /* Digit2 */);\n }\n get digit3() {\n return this.#keystate(9 /* Digit3 */);\n }\n get digit4() {\n return this.#keystate(10 /* Digit4 */);\n }\n get digit5() {\n return this.#keystate(11 /* Digit5 */);\n }\n get digit6() {\n return this.#keystate(12 /* Digit6 */);\n }\n get digit7() {\n return this.#keystate(13 /* Digit7 */);\n }\n get digit8() {\n return this.#keystate(14 /* Digit8 */);\n }\n get digit9() {\n return this.#keystate(15 /* Digit9 */);\n }\n get equal() {\n return this.#keystate(16 /* Equal */);\n }\n get intlBackslash() {\n return this.#keystate(17 /* IntlBackslash */);\n }\n get intlRo() {\n return this.#keystate(18 /* IntlRo */);\n }\n get intlYen() {\n return this.#keystate(19 /* IntlYen */);\n }\n get a() {\n return this.#keystate(20 /* KeyA */);\n }\n get b() {\n return this.#keystate(21 /* KeyB */);\n }\n get c() {\n return this.#keystate(22 /* KeyC */);\n }\n get d() {\n return this.#keystate(23 /* KeyD */);\n }\n get e() {\n return this.#keystate(24 /* KeyE */);\n }\n get f() {\n return this.#keystate(25 /* KeyF */);\n }\n get g() {\n return this.#keystate(26 /* KeyG */);\n }\n get h() {\n return this.#keystate(27 /* KeyH */);\n }\n get i() {\n return this.#keystate(28 /* KeyI */);\n }\n get j() {\n return this.#keystate(29 /* KeyJ */);\n }\n get k() {\n return this.#keystate(30 /* KeyK */);\n }\n get l() {\n return this.#keystate(31 /* KeyL */);\n }\n get m() {\n return this.#keystate(32 /* KeyM */);\n }\n get n() {\n return this.#keystate(33 /* KeyN */);\n }\n get o() {\n return this.#keystate(34 /* KeyO */);\n }\n get p() {\n return this.#keystate(35 /* KeyP */);\n }\n get q() {\n return this.#keystate(36 /* KeyQ */);\n }\n get r() {\n return this.#keystate(37 /* KeyR */);\n }\n get s() {\n return this.#keystate(38 /* KeyS */);\n }\n get t() {\n return this.#keystate(39 /* KeyT */);\n }\n get u() {\n return this.#keystate(40 /* KeyU */);\n }\n get v() {\n return this.#keystate(41 /* KeyV */);\n }\n get w() {\n return this.#keystate(42 /* KeyW */);\n }\n get x() {\n return this.#keystate(43 /* KeyX */);\n }\n get y() {\n return this.#keystate(44 /* KeyY */);\n }\n get z() {\n return this.#keystate(45 /* KeyZ */);\n }\n get minus() {\n return this.#keystate(46 /* Minus */);\n }\n get period() {\n return this.#keystate(47 /* Period */);\n }\n get quote() {\n return this.#keystate(48 /* Quote */);\n }\n get semicolon() {\n return this.#keystate(49 /* Semicolon */);\n }\n get slash() {\n return this.#keystate(50 /* Slash */);\n }\n get altLeft() {\n return this.#keystate(51 /* AltLeft */);\n }\n get altRight() {\n return this.#keystate(52 /* AltRight */);\n }\n get backspace() {\n return this.#keystate(53 /* Backspace */);\n }\n get capsLock() {\n return this.#keystate(54 /* CapsLock */);\n }\n get contextMenu() {\n return this.#keystate(55 /* ContextMenu */);\n }\n get controlLeft() {\n return this.#keystate(56 /* ControlLeft */);\n }\n get controlRight() {\n return this.#keystate(57 /* ControlRight */);\n }\n get enter() {\n return this.#keystate(58 /* Enter */);\n }\n get metaLeft() {\n return this.#keystate(59 /* MetaLeft */);\n }\n get metaRight() {\n return this.#keystate(60 /* MetaRight */);\n }\n get shiftLeft() {\n return this.#keystate(61 /* ShiftLeft */);\n }\n get shiftRight() {\n return this.#keystate(62 /* ShiftRight */);\n }\n get space() {\n return this.#keystate(63 /* Space */);\n }\n get tab() {\n return this.#keystate(64 /* Tab */);\n }\n get convert() {\n return this.#keystate(65 /* Convert */);\n }\n get kanaMode() {\n return this.#keystate(66 /* KanaMode */);\n }\n get lang1() {\n return this.#keystate(67 /* Lang1 */);\n }\n get lang2() {\n return this.#keystate(68 /* Lang2 */);\n }\n get lang3() {\n return this.#keystate(69 /* Lang3 */);\n }\n get lang4() {\n return this.#keystate(70 /* Lang4 */);\n }\n get lang5() {\n return this.#keystate(71 /* Lang5 */);\n }\n get nonConvert() {\n return this.#keystate(72 /* NonConvert */);\n }\n get delete() {\n return this.#keystate(73 /* Delete */);\n }\n get end() {\n return this.#keystate(74 /* End */);\n }\n get help() {\n return this.#keystate(75 /* Help */);\n }\n get home() {\n return this.#keystate(76 /* Home */);\n }\n get insert() {\n return this.#keystate(77 /* Insert */);\n }\n get pageDown() {\n return this.#keystate(78 /* PageDown */);\n }\n get pageUp() {\n return this.#keystate(79 /* PageUp */);\n }\n get arrowDown() {\n return this.#keystate(80 /* ArrowDown */);\n }\n get arrowLeft() {\n return this.#keystate(81 /* ArrowLeft */);\n }\n get arrowRight() {\n return this.#keystate(82 /* ArrowRight */);\n }\n get arrowUp() {\n return this.#keystate(83 /* ArrowUp */);\n }\n get numLock() {\n return this.#keystate(84 /* NumLock */);\n }\n get numpad0() {\n return this.#keystate(85 /* Numpad0 */);\n }\n get numpad1() {\n return this.#keystate(86 /* Numpad1 */);\n }\n get numpad2() {\n return this.#keystate(87 /* Numpad2 */);\n }\n get numpad3() {\n return this.#keystate(88 /* Numpad3 */);\n }\n get numpad4() {\n return this.#keystate(89 /* Numpad4 */);\n }\n get numpad5() {\n return this.#keystate(90 /* Numpad5 */);\n }\n get numpad6() {\n return this.#keystate(91 /* Numpad6 */);\n }\n get numpad7() {\n return this.#keystate(92 /* Numpad7 */);\n }\n get numpad8() {\n return this.#keystate(93 /* Numpad8 */);\n }\n get numpad9() {\n return this.#keystate(94 /* Numpad9 */);\n }\n get numpadAdd() {\n return this.#keystate(95 /* NumpadAdd */);\n }\n get numpadBackspace() {\n return this.#keystate(96 /* NumpadBackspace */);\n }\n get numpadClear() {\n return this.#keystate(97 /* NumpadClear */);\n }\n get numpadClearEntry() {\n return this.#keystate(98 /* NumpadClearEntry */);\n }\n get numpadComma() {\n return this.#keystate(99 /* NumpadComma */);\n }\n get numpadDecimal() {\n return this.#keystate(100 /* NumpadDecimal */);\n }\n get numpadDivide() {\n return this.#keystate(101 /* NumpadDivide */);\n }\n get numpadEnter() {\n return this.#keystate(102 /* NumpadEnter */);\n }\n get numpadEqual() {\n return this.#keystate(103 /* NumpadEqual */);\n }\n get numpadHash() {\n return this.#keystate(104 /* NumpadHash */);\n }\n get numpadMemoryAdd() {\n return this.#keystate(105 /* NumpadMemoryAdd */);\n }\n get numpadMemoryClear() {\n return this.#keystate(106 /* NumpadMemoryClear */);\n }\n get numpadMemoryRecall() {\n return this.#keystate(107 /* NumpadMemoryRecall */);\n }\n get numpadMemoryStore() {\n return this.#keystate(108 /* NumpadMemoryStore */);\n }\n get numpadMemorySubtract() {\n return this.#keystate(109 /* NumpadMemorySubtract */);\n }\n get numpadMultiply() {\n return this.#keystate(110 /* NumpadMultiply */);\n }\n get numpadParenLeft() {\n return this.#keystate(111 /* NumpadParenLeft */);\n }\n get numpadParenRight() {\n return this.#keystate(112 /* NumpadParenRight */);\n }\n get numpadStar() {\n return this.#keystate(113 /* NumpadStar */);\n }\n get numpadSubtract() {\n return this.#keystate(114 /* NumpadSubtract */);\n }\n get escape() {\n return this.#keystate(115 /* Escape */);\n }\n get fn() {\n return this.#keystate(116 /* Fn */);\n }\n get fnLock() {\n return this.#keystate(117 /* FnLock */);\n }\n get printScreen() {\n return this.#keystate(118 /* PrintScreen */);\n }\n get scrollLock() {\n return this.#keystate(119 /* ScrollLock */);\n }\n get pause() {\n return this.#keystate(120 /* Pause */);\n }\n get browserBack() {\n return this.#keystate(121 /* BrowserBack */);\n }\n get browserFavorites() {\n return this.#keystate(122 /* BrowserFavorites */);\n }\n get browserForward() {\n return this.#keystate(123 /* BrowserForward */);\n }\n get browserHome() {\n return this.#keystate(124 /* BrowserHome */);\n }\n get browserRefresh() {\n return this.#keystate(125 /* BrowserRefresh */);\n }\n get browserSearch() {\n return this.#keystate(126 /* BrowserSearch */);\n }\n get browserStop() {\n return this.#keystate(127 /* BrowserStop */);\n }\n get eject() {\n return this.#keystate(128 /* Eject */);\n }\n get launchApp1() {\n return this.#keystate(129 /* LaunchApp1 */);\n }\n get launchApp2() {\n return this.#keystate(130 /* LaunchApp2 */);\n }\n get launchMail() {\n return this.#keystate(131 /* LaunchMail */);\n }\n get mediaPlayPause() {\n return this.#keystate(132 /* MediaPlayPause */);\n }\n get mediaSelect() {\n return this.#keystate(133 /* MediaSelect */);\n }\n get mediaStop() {\n return this.#keystate(134 /* MediaStop */);\n }\n get mediaTrackNext() {\n return this.#keystate(135 /* MediaTrackNext */);\n }\n get mediaTrackPrevious() {\n return this.#keystate(136 /* MediaTrackPrevious */);\n }\n get power() {\n return this.#keystate(137 /* Power */);\n }\n get sleep() {\n return this.#keystate(138 /* Sleep */);\n }\n get audioVolumeDown() {\n return this.#keystate(139 /* AudioVolumeDown */);\n }\n get audioVolumeMute() {\n return this.#keystate(140 /* AudioVolumeMute */);\n }\n get audioVolumeUp() {\n return this.#keystate(141 /* AudioVolumeUp */);\n }\n get wakeUp() {\n return this.#keystate(142 /* WakeUp */);\n }\n get hyper() {\n return this.#keystate(143 /* Hyper */);\n }\n get super() {\n return this.#keystate(144 /* Super */);\n }\n get turbo() {\n return this.#keystate(145 /* Turbo */);\n }\n get abort() {\n return this.#keystate(146 /* Abort */);\n }\n get resume() {\n return this.#keystate(147 /* Resume */);\n }\n get suspend() {\n return this.#keystate(148 /* Suspend */);\n }\n get again() {\n return this.#keystate(149 /* Again */);\n }\n get copy() {\n return this.#keystate(150 /* Copy */);\n }\n get cut() {\n return this.#keystate(151 /* Cut */);\n }\n get find() {\n return this.#keystate(152 /* Find */);\n }\n get open() {\n return this.#keystate(153 /* Open */);\n }\n get paste() {\n return this.#keystate(154 /* Paste */);\n }\n get props() {\n return this.#keystate(155 /* Props */);\n }\n get select() {\n return this.#keystate(156 /* Select */);\n }\n get undo() {\n return this.#keystate(157 /* Undo */);\n }\n get hiragana() {\n return this.#keystate(158 /* Hiragana */);\n }\n get katakana() {\n return this.#keystate(159 /* Katakana */);\n }\n get f1() {\n return this.#keystate(160 /* F1 */);\n }\n get f2() {\n return this.#keystate(161 /* F2 */);\n }\n get f3() {\n return this.#keystate(162 /* F3 */);\n }\n get f4() {\n return this.#keystate(163 /* F4 */);\n }\n get f5() {\n return this.#keystate(164 /* F5 */);\n }\n get f6() {\n return this.#keystate(165 /* F6 */);\n }\n get f7() {\n return this.#keystate(166 /* F7 */);\n }\n get f8() {\n return this.#keystate(167 /* F8 */);\n }\n get f9() {\n return this.#keystate(168 /* F9 */);\n }\n get f10() {\n return this.#keystate(169 /* F10 */);\n }\n get f11() {\n return this.#keystate(170 /* F11 */);\n }\n get f12() {\n return this.#keystate(171 /* F12 */);\n }\n get f13() {\n return this.#keystate(172 /* F13 */);\n }\n get f14() {\n return this.#keystate(173 /* F14 */);\n }\n get f15() {\n return this.#keystate(174 /* F15 */);\n }\n get f16() {\n return this.#keystate(175 /* F16 */);\n }\n get f17() {\n return this.#keystate(176 /* F17 */);\n }\n get f18() {\n return this.#keystate(177 /* F18 */);\n }\n get f19() {\n return this.#keystate(178 /* F19 */);\n }\n get f20() {\n return this.#keystate(179 /* F20 */);\n }\n get f21() {\n return this.#keystate(180 /* F21 */);\n }\n get f22() {\n return this.#keystate(181 /* F22 */);\n }\n get f23() {\n return this.#keystate(182 /* F23 */);\n }\n get f24() {\n return this.#keystate(183 /* F24 */);\n }\n get f25() {\n return this.#keystate(184 /* F25 */);\n }\n get f26() {\n return this.#keystate(185 /* F26 */);\n }\n get f27() {\n return this.#keystate(186 /* F27 */);\n }\n get f28() {\n return this.#keystate(187 /* F28 */);\n }\n get f29() {\n return this.#keystate(188 /* F29 */);\n }\n get f30() {\n return this.#keystate(189 /* F30 */);\n }\n get f31() {\n return this.#keystate(190 /* F31 */);\n }\n get f32() {\n return this.#keystate(191 /* F32 */);\n }\n get f33() {\n return this.#keystate(192 /* F33 */);\n }\n get f34() {\n return this.#keystate(193 /* F34 */);\n }\n get f35() {\n return this.#keystate(194 /* F35 */);\n }\n #keystate(code) {\n let state;\n if (this.#keystates.has(code)) {\n state = this.#keystates.get(code);\n } else {\n state = { down: false, held: false, up: false };\n this.#keystates.set(code, state);\n }\n state.held = !!(this.#dataView.getUint8(code) & 1);\n state.down = state.held && !(this.#dataView.getUint8(code) & 2);\n state.up = !state.held && !!(this.#dataView.getUint8(code) & 2);\n return state;\n }\n}\n// js/contexts/netContext.ts\nvar STATUS_MAP = {\n 0: \"offline\",\n 1: \"local\",\n 2: \"join:pending\",\n 3: \"connected\",\n 4: \"disconnected\"\n};\n\nclass NetContext {\n dataView;\n #peers = Array.from({ length: MAX_PLAYERS }, () => ({\n isLocal: false,\n seq: -1,\n ack: -1\n }));\n #peersResult = [];\n constructor(dataView) {\n this.dataView = dataView;\n }\n #hasValidBuffer() {\n if (!this.dataView)\n return false;\n return this.dataView.buffer.byteLength > 0;\n }\n get peerCount() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n return this.dataView.getUint8(NET_CTX_PEER_COUNT_OFFSET);\n }\n get localPeerId() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n return this.dataView.getUint8(NET_CTX_LOCAL_PEER_ID_OFFSET);\n }\n get isInSession() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n return this.dataView.getUint8(NET_CTX_IN_SESSION_OFFSET) !== 0;\n }\n get status() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n const statusByte = this.dataView.getUint8(NET_CTX_STATUS_OFFSET);\n return STATUS_MAP[statusByte] ?? \"local\";\n }\n get matchFrame() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n return this.dataView.getUint32(NET_CTX_MATCH_FRAME_OFFSET, true);\n }\n get sessionStartFrame() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n return this.dataView.getUint32(NET_CTX_SESSION_START_FRAME_OFFSET, true);\n }\n get roomCode() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n const bytes = [];\n for (let i = 0;i < 8; i++) {\n const byte = this.dataView.getUint8(NET_CTX_ROOM_CODE_OFFSET + i);\n if (byte === 0)\n break;\n bytes.push(byte);\n }\n return String.fromCharCode(...bytes);\n }\n get wantsRoomCode() {\n if (!this.#hasValidBuffer()) {\n return;\n }\n const bytes = [];\n for (let i = 0;i < 8; i++) {\n const byte = this.dataView.getUint8(NET_CTX_WANTS_ROOM_CODE_OFFSET + i);\n if (byte === 0)\n break;\n bytes.push(byte);\n }\n return bytes.length > 0 ? String.fromCharCode(...bytes) : undefined;\n }\n set wantsRoomCode(code) {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n for (let i = 0;i < 8; i++) {\n this.dataView.setUint8(NET_CTX_WANTS_ROOM_CODE_OFFSET + i, 0);\n }\n if (code) {\n for (let i = 0;i < Math.min(code.length, 7); i++) {\n this.dataView.setUint8(NET_CTX_WANTS_ROOM_CODE_OFFSET + i, code.charCodeAt(i));\n }\n }\n }\n get wantsDisconnect() {\n if (!this.#hasValidBuffer()) {\n return false;\n }\n return this.dataView.getUint8(NET_CTX_WANTS_DISCONNECT_OFFSET) !== 0;\n }\n set wantsDisconnect(value) {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n this.dataView.setUint8(NET_CTX_WANTS_DISCONNECT_OFFSET, value ? 1 : 0);\n }\n get peers() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n const dv = this.dataView;\n const localPeerId = this.localPeerId;\n const matchFrame = this.matchFrame;\n let minRemoteSeq = -1;\n for (let i = 0;i < MAX_PLAYERS; i++) {\n if (i === localPeerId)\n continue;\n const peerOffset = NET_CTX_PEERS_OFFSET + i * PEER_CTX_SIZE;\n if (dv.getUint8(peerOffset + PEER_CTX_CONNECTED_OFFSET) !== 1)\n continue;\n const seq = dv.getInt16(peerOffset + PEER_CTX_SEQ_OFFSET, true);\n if (seq < 0)\n continue;\n if (minRemoteSeq === -1 || seq < minRemoteSeq) {\n minRemoteSeq = seq;\n }\n }\n this.#peersResult.length = 0;\n for (let i = 0;i < MAX_PLAYERS; i++) {\n const peerOffset = NET_CTX_PEERS_OFFSET + i * PEER_CTX_SIZE;\n if (dv.getUint8(peerOffset + PEER_CTX_CONNECTED_OFFSET) !== 1)\n continue;\n const peer = this.#peers[i];\n if (!peer) {\n throw new Error(`Unexpected missing peer object at index ${i}`);\n }\n const isLocal = i === localPeerId;\n peer.isLocal = isLocal;\n if (isLocal) {\n peer.seq = matchFrame;\n peer.ack = minRemoteSeq;\n } else {\n peer.seq = dv.getInt16(peerOffset + PEER_CTX_SEQ_OFFSET, true);\n peer.ack = dv.getInt16(peerOffset + PEER_CTX_ACK_OFFSET, true);\n }\n this.#peersResult.push(peer);\n }\n return this.#peersResult;\n }\n get lastRollbackDepth() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n return this.dataView.getUint32(NET_CTX_LAST_ROLLBACK_DEPTH_OFFSET, true);\n }\n get totalRollbacks() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n return this.dataView.getUint32(NET_CTX_TOTAL_ROLLBACKS_OFFSET, true);\n }\n get framesResimulated() {\n if (!this.#hasValidBuffer()) {\n throw new Error(\"NetContext dataView is not valid\");\n }\n return Number(this.dataView.getBigUint64(NET_CTX_FRAMES_RESIMULATED_OFFSET, true));\n }\n}\n// js/contexts/timeContext.ts\nclass TimeContext {\n dataView;\n constructor(dataView) {\n this.dataView = dataView;\n }\n get frame() {\n if (!this.dataView) {\n throw new Error(\"TimeContext DataView is not initialized\");\n }\n return this.dataView.getUint32(TIME_CTX_FRAME_OFFSET, true);\n }\n get dt() {\n if (!this.dataView) {\n throw new Error(\"TimeContext DataView is not initialized\");\n }\n return this.dataView.getUint32(TIME_CTX_DT_MS_OFFSET, true) / 1000;\n }\n get time() {\n if (!this.dataView) {\n throw new Error(\"TimeContext DataView is not initialized\");\n }\n return this.dataView.getUint32(TIME_CTX_TOTAL_MS_OFFSET, true) / 1000;\n }\n}\n// js/inputs.ts\nvar EVENT_PAYLOAD_SIZE = 8;\nvar EVENT_PAYLOAD_ALIGN = 4;\nfunction keyToKeyCode(key) {\n return Key[key];\n}\nfunction keyCodeToKey(code) {\n return Key[code];\n}\nfunction mouseButtonToMouseButtonCode(button) {\n return MouseButton[button];\n}\nfunction mouseButtonCodeToMouseButton(code) {\n return MouseButton[code];\n}\nfunction inputSourceToInputSourceCode(source) {\n return InputSource[source];\n}\nfunction inputSourceCodeToInputSource(code) {\n return InputSource[code];\n}\n// js/tape.ts\nvar TAPE_MAGIC = 1413566533;\nfunction readTapeHeader(tape) {\n const view = new DataView(tape.buffer, tape.byteOffset, tape.byteLength);\n const magic = view.getUint32(0, true);\n if (magic !== TAPE_MAGIC) {\n throw new Error(`Invalid tape format: expected magic ${TAPE_MAGIC.toString(16)}, got ${magic.toString(16)}`);\n }\n return {\n magic,\n version: view.getUint16(4, true),\n startFrame: view.getUint32(8, true),\n frameCount: view.getUint16(12, true),\n eventCount: view.getUint16(14, true)\n };\n}\n// js/defaultUrl.ts\nvar DEFAULT_WASM_URL = new URL(\"https://unpkg.com/@bloopjs/engine@0.0.89/wasm/bloop.wasm\");\n\n// js/engine.ts\nvar MAX_ROLLBACK_FRAMES = 500;\nvar TIME_CTX_OFFSET = 0;\nvar INPUT_CTX_OFFSET = TIME_CTX_OFFSET + 4;\nvar EVENTS_OFFSET = INPUT_CTX_OFFSET + 4;\nvar NET_CTX_OFFSET = EVENTS_OFFSET + 4;\nvar SNAPSHOT_HEADER_LEN = 16;\nvar SNAPSHOT_HEADER_USER_LEN_OFFSET = 4;\nvar SNAPSHOT_HEADER_ENGINE_LEN_OFFSET = 8;\nexport {\n readTapeHeader,\n mouseButtonToMouseButtonCode,\n mouseButtonCodeToMouseButton,\n keyToKeyCode,\n keyCodeToKey,\n inputSourceToInputSourceCode,\n inputSourceCodeToInputSource,\n TimeContext,\n TIME_CTX_OFFSET,\n SNAPSHOT_HEADER_USER_LEN_OFFSET,\n SNAPSHOT_HEADER_LEN,\n SNAPSHOT_HEADER_ENGINE_LEN_OFFSET,\n PlayerInputContext,\n PLAYER_INPUTS_SIZE,\n PLAYER_INPUTS_MOUSE_CTX_OFFSET,\n PLAYER_INPUTS_KEY_CTX_OFFSET,\n NetContext,\n NET_CTX_OFFSET,\n MouseContext,\n PLAYER_INPUTS_MOUSE_CTX_OFFSET as MOUSE_OFFSET,\n MOUSE_CTX_SIZE,\n MOUSE_CTX_BUTTON_STATES_OFFSET,\n MOUSE_CTX_BUTTON_STATES_OFFSET as MOUSE_BUTTONS_OFFSET,\n MAX_ROLLBACK_FRAMES,\n MAX_PLAYERS,\n KeyboardContext,\n KEY_CTX_SIZE,\n KEY_CTX_SIZE as KEYBOARD_SIZE,\n PLAYER_INPUTS_KEY_CTX_OFFSET as KEYBOARD_OFFSET,\n InputContext,\n INPUT_CTX_SIZE,\n INPUT_CTX_OFFSET,\n exports_enums as Enums,\n EVENT_PAYLOAD_SIZE,\n EVENT_PAYLOAD_ALIGN,\n EVENTS_OFFSET,\n DEFAULT_WASM_URL\n};\n\n//# debugId=E58B71F8E35933D164756E2164756E21\n//# sourceMappingURL=engine.js.map\n",
7
7
  "import {\n type EnginePointer,\n type Key,\n keyToKeyCode,\n type MouseButton,\n mouseButtonToMouseButtonCode,\n NetContext,\n type NetEvent,\n type NetEventType,\n SNAPSHOT_HEADER_ENGINE_LEN_OFFSET,\n SNAPSHOT_HEADER_USER_LEN_OFFSET,\n TimeContext,\n type WasmEngine,\n} from \"@bloopjs/engine\";\nimport { assert } from \"./util\";\n\nconst originalConsole = (globalThis as any).console;\n\nconst noop = () => {};\n\nconst stubConsole = Object.fromEntries(\n Object.keys(originalConsole).map((key) => [key, noop]),\n) as unknown as Console;\n\nfunction muteConsole() {\n (globalThis.console as unknown as Console) = stubConsole;\n}\n\nfunction unmuteConsole() {\n (globalThis.console as unknown as Console) = originalConsole;\n}\n\nexport type LoadTapeOptions = {\n /** Frames between checkpoints for seek optimization (0 = disabled). Default: 0 */\n checkpointInterval?: number;\n /** Max bytes for all checkpoints combined. Default: 10MB */\n checkpointMaxSize?: number;\n};\n\nexport type EngineHooks = {\n /**\n * Hook to serialize some data when snapshotting\n */\n serialize: SerializeFn;\n /**\n * Hook to deserialize some data when restoring\n */\n deserialize: DeserializeFn;\n /**\n * A callback function to run logic for a given frame\n */\n systemsCallback: SystemsCallback;\n /**\n * Sets buffer to the latest engine memory buffer\n *\n * Note that if the engine wasm memory grows, all dataviews into the memory must be updated\n */\n setBuffer: (buffer: ArrayBuffer) => void;\n /**\n * Sets the context pointer\n */\n setContext: (ptr: EnginePointer) => void;\n /**\n * Called from the engine right before each simulation step.\n */\n beforeFrame?: (frame: number) => void;\n};\n\nexport type SystemsCallback = (\n system_handle: number,\n ptr: EnginePointer,\n) => void;\n\nexport type SerializeFn = () => {\n size: number;\n write(buffer: ArrayBufferLike, ptr: EnginePointer): void;\n};\n\nexport type DeserializeFn = (\n buffer: ArrayBufferLike,\n ptr: EnginePointer,\n size: number,\n) => void;\n\n/**\n * Sim is a portable simulation that is responsible for:\n *\n * * Moving the engine forward and backward in time\n * * Maintaining a js-friendly view of engine memory\n * * Pausing and unpausing game logic\n * * Managing recording and tapes\n */\nexport class Sim {\n wasm: WasmEngine;\n id: string;\n #memory: WebAssembly.Memory;\n #time: TimeContext;\n #serialize?: SerializeFn;\n #isPaused: boolean = false;\n\n /**\n * Shared network context - reads from same WASM memory as game.context.net.\n * Provides access to network state (status, peers, roomCode, wantsRoomCode, etc.)\n */\n #net: NetContext;\n\n /**\n * Callback fired when tape buffer fills up and recording stops.\n * The tape data is passed so you can save it before clearing.\n */\n onTapeFull?: (tape: Uint8Array) => void;\n\n constructor(\n wasm: WasmEngine,\n memory: WebAssembly.Memory,\n opts?: { serialize?: SerializeFn },\n ) {\n this.wasm = wasm;\n this.#memory = memory;\n this.#time = new TimeContext(\n new DataView(this.#memory.buffer, this.wasm.get_time_ctx()),\n );\n\n this.id = `${Math.floor(Math.random() * 1_000_000)}`;\n\n this.#serialize = opts?.serialize;\n this.#net = new NetContext();\n }\n\n /**\n * Step simulation forward by a given number of milliseconds.\n * If ms is not provided, defaults to 16ms (60fps).\n *\n * Note: this will not advance time if the sim is paused.\n *\n * @returns Number of frames actually advanced\n */\n step(ms?: number): number {\n if (this.#isPaused) {\n return 0;\n }\n return this.wasm.step(ms ?? 16);\n }\n\n /**\n * Run a single simulation frame. step wraps this in an accumulator.\n * Use this for advanced use cases where you need to execute a single frame outside of the engine.\n * Consider `step()` for normal frame advancement. And `seek()` for moving to specific frames within a tape.\n */\n tick(isResimulating?: boolean): void {\n this.wasm.tick(isResimulating ?? false);\n }\n\n /**\n * Clone a session from another running sim.\n * This dumps a snapshot at the current frame and the tape data from the source\n *\n * @param source\n */\n cloneSession(source: Sim): void {\n if (source.isRecording) {\n this.loadTape(source.saveTape());\n }\n this.restore(source.snapshot());\n }\n\n /**\n * Pause the simulation entirely\n */\n pause() {\n this.#isPaused = true;\n }\n\n /**\n * Unpause the simulation\n */\n unpause() {\n this.#isPaused = false;\n }\n\n /**\n * Whether the simulation is currently paused\n */\n get isPaused(): boolean {\n return this.#isPaused;\n }\n\n /**\n * Step back one frame\n */\n stepBack() {\n if (this.time.frame === 0) {\n return;\n }\n\n this.seek(this.time.frame - 1);\n }\n\n /**\n * Seek to the start of a given frame.\n *\n * Note that this will mute console output during the seek if rewinding.\n *\n * @param frame - frame number to replay up to\n */\n seek(frame: number, inclusive?: boolean) {\n assert(\n this.hasHistory,\n \"Not recording or playing back, can't seek to frame\",\n );\n\n const targetFrame = inclusive ? frame + 1 : frame;\n\n const shouldMute = frame < this.time.frame;\n if (shouldMute) {\n muteConsole();\n }\n this.wasm.seek(targetFrame);\n if (shouldMute) {\n unmuteConsole();\n }\n }\n\n /**\n * Snapshot the current game state into a byte array\n */\n snapshot(): Uint8Array<ArrayBuffer> {\n const serializer = this.#serialize ? this.#serialize() : null;\n const size = serializer ? serializer.size : 0;\n\n const ptr = this.wasm.take_snapshot(size);\n const header = new Uint32Array(this.#memory.buffer, ptr, 4);\n const userLenIndex =\n SNAPSHOT_HEADER_USER_LEN_OFFSET / Uint32Array.BYTES_PER_ELEMENT;\n const engineLenIndex =\n SNAPSHOT_HEADER_ENGINE_LEN_OFFSET / Uint32Array.BYTES_PER_ELEMENT;\n assert(header[userLenIndex], `header user length missing`);\n assert(header[engineLenIndex], `header engine length missing`);\n const length = header[userLenIndex] + header[engineLenIndex];\n const memoryView = new Uint8Array(this.#memory.buffer, ptr, length);\n\n const copy = new Uint8Array(length);\n copy.set(memoryView);\n\n return copy;\n }\n\n /**\n * Packet buffer size (2MB) for network session recording\n */\n static readonly NETWORK_MAX_PACKET_BYTES = 2 * 1024 * 1024;\n\n /**\n * Start recording the simulation at the current frame\n * @param maxEvents Maximum number of events to record\n * @param maxPacketBytes Maximum packet buffer size (0 for local-only, 2MB default for network)\n */\n record(\n maxEvents: number = 100_000,\n maxPacketBytes: number = Sim.NETWORK_MAX_PACKET_BYTES,\n ) {\n const serializer = this.#serialize ? this.#serialize() : null;\n const size = serializer ? serializer.size : 0;\n const result = this.wasm.start_recording(size, maxEvents, maxPacketBytes);\n if (result !== 0) {\n throw new Error(`failed to start recording, error code=${result}`);\n }\n }\n\n /**\n * Get a recording of the current tape to linear memory\n */\n saveTape(): Uint8Array<ArrayBuffer> {\n const tapeLen = this.wasm.get_tape_len();\n const tapePtr = this.wasm.get_tape_ptr();\n const memoryView = new Uint8Array(this.#memory.buffer, tapePtr, tapeLen);\n\n const copy = new Uint8Array(tapeLen);\n copy.set(memoryView);\n\n return copy;\n }\n\n /**\n * Load a tape\n * @param tape The tape data to load\n * @param options Optional configuration for checkpoints during playback\n */\n loadTape(tape: Uint8Array, options?: LoadTapeOptions) {\n const tapePtr = this.wasm.alloc(tape.byteLength);\n assert(\n tapePtr > 0,\n `failed to allocate ${tape.byteLength} bytes for tape load, pointer=${tapePtr}`,\n );\n\n // copy tape into wasm memory\n const memoryView = new Uint8Array(\n this.#memory.buffer,\n tapePtr,\n tape.byteLength,\n );\n memoryView.set(tape);\n\n // load the tape\n if (this.isRecording) {\n this.wasm.stop_recording();\n }\n const checkpointInterval = options?.checkpointInterval ?? 0;\n const checkpointMaxSize = options?.checkpointMaxSize ?? 10 * 1024 * 1024;\n const result = this.wasm.load_tape(\n tapePtr,\n tape.byteLength,\n checkpointInterval,\n checkpointMaxSize,\n );\n assert(result === 0, `failed to load tape, error code=${result}`);\n\n // free the allocated memory\n this.wasm.free(tapePtr, tape.byteLength);\n }\n\n /**\n * Restore the game state from a snapshot byte array\n */\n restore(snapshot: Uint8Array) {\n const dataPtr = this.wasm.alloc(snapshot.byteLength);\n assert(\n dataPtr > 0,\n `failed to allocate ${snapshot.byteLength} bytes for snapshot restore, pointer=${dataPtr}`,\n );\n\n // copy snapshot into wasm memory\n const memoryView = new Uint8Array(\n this.#memory.buffer,\n dataPtr,\n snapshot.byteLength,\n );\n memoryView.set(snapshot);\n\n // restore the snapshot\n this.wasm.restore(dataPtr);\n\n // free the allocated memory\n this.wasm.free(dataPtr, snapshot.byteLength);\n }\n\n /**\n * Unmount the simulation and free all associated memory\n */\n unmount() {\n this.wasm.deinit();\n }\n\n get time(): TimeContext {\n if (\n !this.#time.dataView ||\n this.#time.dataView.buffer !== this.#memory.buffer\n ) {\n // update the data view to the latest memory buffer\n this.#time.dataView = new DataView(\n this.#memory.buffer,\n this.wasm.get_time_ctx(),\n );\n }\n return this.#time;\n }\n\n get net(): NetContext {\n if (\n !this.#net.dataView ||\n this.#net.dataView.buffer !== this.#memory.buffer\n ) {\n // update the data view to the latest memory buffer\n this.#net.dataView = new DataView(\n this.#memory.buffer,\n this.wasm.get_net_ctx(),\n );\n }\n return this.#net;\n }\n\n get buffer(): ArrayBuffer {\n return this.#memory.buffer;\n }\n\n get isRecording(): boolean {\n return Boolean(this.wasm.is_recording());\n }\n\n get isReplaying(): boolean {\n return Boolean(this.wasm.is_replaying());\n }\n\n get hasHistory(): boolean {\n return this.isRecording || this.isReplaying;\n }\n\n emit = {\n keydown: (key: Key, peerId: number = 0): void => {\n this.wasm.emit_keydown(keyToKeyCode(key), peerId);\n },\n keyup: (key: Key, peerId: number = 0): void => {\n this.wasm.emit_keyup(keyToKeyCode(key), peerId);\n },\n mousemove: (x: number, y: number, peerId: number = 0): void => {\n this.wasm.emit_mousemove(x, y, peerId);\n },\n mousedown: (button: MouseButton, peerId: number = 0): void => {\n this.wasm.emit_mousedown(mouseButtonToMouseButtonCode(button), peerId);\n },\n mouseup: (button: MouseButton, peerId: number = 0): void => {\n this.wasm.emit_mouseup(mouseButtonToMouseButtonCode(button), peerId);\n },\n mousewheel: (x: number, y: number, peerId: number = 0): void => {\n this.wasm.emit_mousewheel(x, y, peerId);\n },\n /**\n * Emit a network event (join:ok, peer:join, etc.)\n * Events are queued in the engine and processed during the next tick's systemsCallback.\n */\n network: <T extends NetEventType>(\n type: T,\n data: Extract<NetEvent, { type: T }>[\"data\"],\n ): void => {\n switch (type) {\n case \"join:ok\": {\n const roomCode = (data as { roomCode: string }).roomCode;\n const encoded = new TextEncoder().encode(roomCode);\n const ptr = this.wasm.alloc(encoded.length);\n new Uint8Array(this.#memory.buffer, ptr, encoded.length).set(encoded);\n this.wasm.emit_net_join_ok(ptr, encoded.length);\n this.wasm.free(ptr, encoded.length);\n break;\n }\n case \"join:fail\":\n this.wasm.emit_net_join_fail(0); // reason code: unknown\n break;\n case \"peer:join\": {\n const peerId = (data as { peerId: number }).peerId;\n this.wasm.emit_net_peer_join(peerId);\n break;\n }\n case \"peer:leave\": {\n const peerId = (data as { peerId: number }).peerId;\n this.wasm.emit_net_peer_leave(peerId);\n break;\n }\n case \"peer:assign_local_id\": {\n const peerId = (data as { peerId: number }).peerId;\n this.wasm.emit_net_peer_assign_local_id(peerId);\n break;\n }\n case \"session:start\":\n this.wasm.emit_net_session_init();\n break;\n case \"session:end\":\n this.wasm.emit_net_session_end();\n break;\n }\n },\n\n /**\n * Receive a packet from a peer\n */\n packet: (data: Uint8Array): void => {\n if (data.length === 0) {\n return;\n }\n\n // Allocate memory and copy packet\n const ptr = this.wasm.alloc(data.byteLength);\n assert(\n ptr > 0,\n `Failed to allocate ${data.byteLength} bytes for received packet`,\n );\n\n const memoryView = new Uint8Array(\n this.#memory.buffer,\n ptr,\n data.byteLength,\n );\n memoryView.set(data);\n\n // Process the packet\n const result = this.wasm.emit_receive_packet(ptr, data.byteLength);\n\n // Free the allocated memory\n this.wasm.free(ptr, data.byteLength);\n\n // Check result\n if (result !== 0) {\n const errorMessages: Record<number, string> = {\n 1: \"No active session\",\n 2: \"Buffer too small\",\n 3: \"Unsupported packet version\",\n 4: \"Invalid event count\",\n };\n throw new Error(\n errorMessages[result] ?? `Unknown packet error: ${result}`,\n );\n }\n },\n };\n\n /**\n * Get an outbound packet to send to a target peer.\n * Returns a copy of the packet data (caller owns the returned buffer).\n *\n * The packet contains all unacked inputs encoded in wire format.\n *\n * @param targetPeer - Peer ID to send the packet to\n * @returns Packet data to send, or null if no packet available\n */\n getOutboundPacket(targetPeer: number): Uint8Array<ArrayBuffer> | null {\n // Build the packet in engine memory\n this.wasm.build_outbound_packet(targetPeer);\n\n const len = this.wasm.get_outbound_packet_len();\n if (len === 0) {\n throw new Error(`No outbound packet available for peer ${targetPeer}`);\n }\n\n const ptr = this.wasm.get_outbound_packet();\n assert(ptr > 0, `Invalid outbound packet pointer: ${ptr}`);\n\n // Copy from WASM memory\n const memoryView = new Uint8Array(this.#memory.buffer, ptr, len);\n const copy = new Uint8Array(len);\n copy.set(memoryView);\n\n return copy;\n }\n}\n",
8
- "import {\n DEFAULT_WASM_URL,\n type EnginePointer,\n type WasmEngine,\n} from \"@bloopjs/engine\";\nimport { type EngineHooks, Sim } from \"./sim\";\nimport { assert } from \"./util\";\n\n/**\n * An object that can be mounted to the simulation engine.\n * Bloop instances satisfy this interface.\n */\nexport type Mountable = {\n hooks: EngineHooks;\n};\n\n/**\n * Mount a simulation engine instance - instantiates wasm and sets up hooks and initial state.\n *\n * This is called by app.start on the web.\n */\nexport async function mount(\n mountable: Mountable,\n options?: MountOptions,\n): Promise<MountResult> {\n const wasmUrl = options?.wasmUrl ?? DEFAULT_WASM_URL;\n const startRecording = options?.startRecording ?? true;\n const { maxEvents, maxPacketBytes } = calculateTapeConfig(options?.tape);\n\n // https://github.com/oven-sh/bun/issues/12434\n const bytes = await fetch(wasmUrl)\n .then((res) => res.arrayBuffer())\n .catch((e) => {\n console.error(`Failed to fetch wasm at ${wasmUrl}`, e);\n throw e;\n });\n\n // 1mb to 64mb\n // use bun check:wasm to find initial memory page size\n const memory = new WebAssembly.Memory({ initial: 310, maximum: 1000 });\n\n // Create sim early so we can reference it in callbacks\n let sim: Sim;\n\n const wasmInstantiatedSource = await WebAssembly.instantiate(bytes, {\n env: {\n memory,\n __systems: function (system_handle: number, ptr: number) {\n mountable.hooks.setBuffer(memory.buffer);\n mountable.hooks.systemsCallback(system_handle, ptr);\n },\n __before_frame: function (ptr: EnginePointer, frame: number) {\n try {\n // Refresh DataViews before beforeFrame hook (memory may have grown)\n mountable.hooks.setBuffer(memory.buffer);\n mountable.hooks.setContext(ptr);\n mountable.hooks.beforeFrame?.(frame);\n } catch (e) {\n console.error(\"Error in beforeFrame hook:\", e);\n }\n },\n __on_tape_full: function (_ctxPtr: number) {\n if (!sim) {\n throw new Error(\"Sim not initialized in on_tape_full\");\n }\n const tapeBytes = sim.saveTape();\n if (sim.onTapeFull) {\n sim.onTapeFull(tapeBytes);\n } else {\n const size = tapeBytes.length / 1024;\n const duration = sim.time.time;\n const kbPerSecond = size / duration;\n\n console.warn(\"Tape full. Recording stopped\", {\n size: `${(tapeBytes.length / 1024).toFixed(0)}kb`,\n duration: `${sim.time.time.toFixed(2)}s`,\n kbPerSecond: `${kbPerSecond.toFixed(2)} kb/s`,\n });\n }\n },\n console_log: function (ptr: EnginePointer, len: number) {\n const bytes = new Uint8Array(memory.buffer, ptr, len);\n const string = new TextDecoder(\"utf-8\").decode(bytes);\n console.log(string);\n },\n __user_data_len: function () {\n const serializer = mountable.hooks.serialize();\n return serializer ? serializer.size : 0;\n },\n user_data_serialize: function (ptr: EnginePointer, len: number) {\n const serializer = mountable.hooks.serialize();\n assert(\n len === serializer.size,\n `user_data_serialize length mismatch, expected=${serializer.size} got=${len}`,\n );\n serializer.write(memory.buffer, ptr);\n },\n user_data_deserialize: function (ptr: EnginePointer, len: number) {\n mountable.hooks.deserialize(memory.buffer, ptr, len);\n },\n },\n });\n const wasm = wasmInstantiatedSource.instance.exports as WasmEngine;\n\n const enginePointer = wasm.initialize();\n sim = new Sim(wasm, memory, {\n serialize: mountable.hooks.serialize,\n });\n\n if (startRecording) {\n sim.record(maxEvents, maxPacketBytes);\n }\n\n mountable.hooks.setBuffer(memory.buffer);\n mountable.hooks.setContext(enginePointer);\n\n return {\n sim,\n };\n}\n\nexport type TapeOptions = (\n | { maxEvents: number }\n | { duration: number; averageEventsPerFrame?: number }\n) & {\n /**\n * Set to true for local-only recording (no network packet buffer).\n * Default: false (allocates 2MB for network packet recording)\n */\n localOnly?: boolean;\n};\n\nexport type MountOptions = {\n /**\n * Whether to start recording immediately upon mount\n * Defaults to true\n */\n startRecording?: boolean;\n\n /**\n * Tape configuration options\n */\n tape?: TapeOptions;\n\n /**\n * Custom WASM URL (for advanced use cases)\n */\n wasmUrl?: URL;\n};\n\nexport type MountResult = {\n sim: Sim;\n};\n\nfunction calculateTapeConfig(tape?: TapeOptions): {\n maxEvents: number;\n maxPacketBytes: number;\n} {\n let maxEvents: number;\n\n if (!tape) {\n maxEvents = 100_000; // default (~15 minutes at typical usage)\n } else if (\"maxEvents\" in tape) {\n maxEvents = tape.maxEvents;\n } else {\n // duration-based: frames * average events per frame\n // At 60fps, duration seconds = duration * 60 frames\n const avgEvents = tape.averageEventsPerFrame ?? 2;\n maxEvents = Math.ceil(tape.duration * 60 * avgEvents);\n }\n\n const localOnly = tape?.localOnly ?? false;\n\n // Default to network mode (2MB), localOnly mode uses 0 bytes\n const maxPacketBytes = localOnly ? 0 : Sim.NETWORK_MAX_PACKET_BYTES;\n\n return { maxEvents, maxPacketBytes };\n}\n",
9
- "import {\n type EnginePointer,\n Enums,\n EVENTS_OFFSET,\n INPUT_CTX_OFFSET,\n InputContext,\n keyCodeToKey,\n mouseButtonCodeToMouseButton,\n NET_CTX_OFFSET,\n NetContext,\n type NetEvent,\n TIME_CTX_OFFSET,\n TimeContext,\n} from \"@bloopjs/engine\";\nimport type { Context } from \"./context\";\nimport type { Bag } from \"./data/bag\";\nimport type { BloopSchema } from \"./data/schema\";\nimport type {\n InputEvent,\n KeyEvent,\n MouseButtonEvent,\n MouseMoveEvent,\n MouseWheelEvent,\n} from \"./events\";\nimport type { EngineHooks } from \"./sim\";\nimport type { System } from \"./system\";\n\nexport type BloopOpts<B extends Bag> = {\n /** defaults to \"Game\" */\n name?: string;\n /**\n * component definitions, defaults to empty object\n *\n * use `defineComponents` to generate component definitions from a simple schema\n */\n // components?: SchemaWithLayout<CS>;\n /**\n * input map, defaults to empty object\n */\n // inputMap?: IM;\n /**\n * bag definition, defaults to empty object\n *\n */\n bag?: B;\n // schema: GS;\n};\n\nexport class Bloop<GS extends BloopSchema> {\n #systems: System<GS>[] = [];\n #context: Context<GS>;\n #engineBuffer: ArrayBuffer = new ArrayBuffer(0);\n\n /**\n * Bloop.create() is the way to create a new bloop instance.\n */\n static create<\n // S extends Schema,\n // RS extends ResourceSchema,\n B extends Bag,\n // const IM extends InputMap,\n // >(opts: GameOpts<S, RS, B, IM> = {}) {\n >(opts: BloopOpts<B> = {}): Bloop<MakeGS<B>> {\n return new Bloop<MakeGS<B>>(opts, \"dontCallMeDirectly\");\n }\n\n /**\n * DO NOT USE `new Bloop` - use `Bloop.create()` instead for proper type hints.\n */\n constructor(opts: BloopOpts<GS[\"B\"]> = {}, dontCallMeDirectly: string) {\n if (dontCallMeDirectly !== \"dontCallMeDirectly\") {\n throw new Error(\n \"Bloop constructor is private. Use Bloop.create() to create a new game instance.\",\n );\n }\n\n const inputs = new InputContext();\n this.#context = {\n bag: opts.bag ?? {},\n time: new TimeContext(),\n inputs,\n get players() {\n return inputs.players;\n },\n rawPointer: -1,\n net: new NetContext(),\n };\n }\n\n /**\n * Read the game singleton bag\n */\n get bag(): GS[\"B\"] {\n return this.#context.bag;\n }\n\n /**\n * Read the game context object\n */\n get context(): Readonly<Context<GS>> {\n return this.#context;\n }\n\n /**\n * Register a system with the game loop.\n */\n system(label: string, system: System<GS>): number {\n system.label ??= label;\n this.#systems.push(system);\n return this.#systems.length;\n }\n\n /**\n * Low level hooks to engine functionality. Editing these is for advanced use cases, defaults should usually work.\n */\n hooks: EngineHooks = {\n /**\n * Take a snapshot of the game state outside the engine\n * @returns linear memory representation of the game state that the engine is unaware of\n */\n serialize: () => {\n const str = JSON.stringify(this.#context.bag);\n const encoder = new TextEncoder();\n const textBytes = encoder.encode(str);\n\n return {\n size: textBytes.byteLength,\n write: (buffer: ArrayBufferLike, ptr: EnginePointer) => {\n const memoryView = new Uint8Array(buffer, ptr, textBytes.byteLength);\n memoryView.set(textBytes);\n },\n };\n },\n\n /**\n * Restore a snapshot of the game state outside the engine\n * @returns linear memory representation of the game state that the engine is unaware of\n */\n deserialize: (buffer, ptr, len) => {\n const bagBytes = new Uint8Array(buffer, ptr, len);\n const decoder = new TextDecoder();\n const str = decoder.decode(bagBytes);\n\n try {\n this.#context.bag = JSON.parse(str);\n } catch (e) {\n console.error(\"failed to deserialize bag\", { json: str, error: e });\n }\n },\n\n setBuffer: (buffer: ArrayBuffer) => {\n this.#engineBuffer = buffer;\n },\n\n // TODO - move this to engine\n setContext: (ptr: EnginePointer) => {\n if (!this.#engineBuffer) {\n throw new Error(\"Tried to set context before engine buffer\");\n }\n const dv = new DataView(this.#engineBuffer, ptr);\n const timeCtxPtr = dv.getUint32(TIME_CTX_OFFSET, true);\n const inputCtxPtr = dv.getUint32(INPUT_CTX_OFFSET, true);\n const netCtxPtr = dv.getUint32(NET_CTX_OFFSET, true);\n\n this.#context.rawPointer = ptr;\n // TODO - only rebuild these if the buffer has changed due to memory growth or the pointers have changed\n this.#context.inputs.dataView = new DataView(\n this.#engineBuffer,\n inputCtxPtr,\n );\n this.#context.time.dataView = new DataView(\n this.#engineBuffer,\n timeCtxPtr,\n );\n this.#context.net.dataView = new DataView(this.#engineBuffer, netCtxPtr);\n },\n\n systemsCallback: (system_handle: number, ptr: EnginePointer) => {\n this.hooks.setContext(ptr);\n const dv = new DataView(this.#engineBuffer, ptr);\n const eventsPtr = dv.getUint32(EVENTS_OFFSET, true);\n const eventsDataView = new DataView(this.#engineBuffer, eventsPtr);\n\n for (const system of this.#systems) {\n system.update?.(this.#context);\n\n // EventBuffer: count (u16) + padding (2 bytes) + events\n // TODO: it would be better to have all the offset math centralized to the\n // engine package, and just do something like\n // const {jsEvent, size} = engine.decodeEvent(eventPtr, eventOffset)\n // eventOffset += size;\n\n const eventCount = eventsDataView.getUint16(0, true);\n let offset = 4; // Skip count (u16) + padding (2 bytes)\n\n for (let i = 0; i < eventCount; i++) {\n // Event layout: kind (u8) + source (u8) + padding (2 bytes) + payload (8 bytes) = 12 bytes\n const eventType = eventsDataView.getUint8(offset);\n const eventSource = eventsDataView.getUint8(offset + 1);\n const payloadOffset = offset + 4; // Skip kind + source + padding\n const payloadByte = eventsDataView.getUint8(payloadOffset);\n const payloadVec2 = {\n x: eventsDataView.getFloat32(payloadOffset, true),\n y: eventsDataView.getFloat32(\n payloadOffset + Float32Array.BYTES_PER_ELEMENT,\n true,\n ),\n };\n\n switch (eventType) {\n case Enums.EventType.KeyDown: {\n system.keydown?.(\n attachEvent<KeyEvent, GS>(this.#context, {\n key: keyCodeToKey(payloadByte),\n }),\n );\n break;\n }\n case Enums.EventType.KeyUp:\n system.keyup?.(\n attachEvent<KeyEvent, GS>(this.#context, {\n key: keyCodeToKey(payloadByte),\n }),\n );\n break;\n case Enums.EventType.MouseDown:\n system.mousedown?.(\n attachEvent<MouseButtonEvent, GS>(this.#context, {\n button: mouseButtonCodeToMouseButton(payloadByte),\n }),\n );\n break;\n case Enums.EventType.MouseUp:\n system.mouseup?.(\n attachEvent<MouseButtonEvent, GS>(this.#context, {\n button: mouseButtonCodeToMouseButton(payloadByte),\n }),\n );\n break;\n case Enums.EventType.MouseMove:\n system.mousemove?.(\n attachEvent<MouseMoveEvent, GS>(this.#context, {\n x: payloadVec2.x,\n y: payloadVec2.y,\n }),\n );\n break;\n case Enums.EventType.MouseWheel:\n system.mousewheel?.(\n attachEvent<MouseWheelEvent, GS>(this.#context, {\n x: payloadVec2.x,\n y: payloadVec2.y,\n }),\n );\n break;\n case Enums.EventType.NetJoinOk: {\n // Room code is 8 bytes starting at payload offset\n const roomCodeBytes: number[] = [];\n for (let j = 0; j < 8; j++) {\n const byte = eventsDataView.getUint8(payloadOffset + j);\n if (byte === 0) break;\n roomCodeBytes.push(byte);\n }\n const roomCode = String.fromCharCode(...roomCodeBytes);\n (this.#context as any).event = {\n type: \"join:ok\",\n data: { roomCode },\n };\n system.netcode?.(\n this.#context as Context<GS> & { event: NetEvent },\n );\n break;\n }\n case Enums.EventType.NetJoinFail: {\n // Reason is stored at payload offset as u8\n const reasonCode = eventsDataView.getUint8(payloadOffset);\n const reasons = [\n \"unknown\",\n \"timeout\",\n \"room_full\",\n \"room_not_found\",\n \"already_in_room\",\n ];\n const reason = reasons[reasonCode] ?? \"unknown\";\n (this.#context as any).event = {\n type: \"join:fail\",\n data: { reason },\n };\n system.netcode?.(\n this.#context as Context<GS> & { event: NetEvent },\n );\n break;\n }\n case Enums.EventType.NetPeerJoin: {\n const peerId = eventsDataView.getUint8(payloadOffset);\n (this.#context as any).event = {\n type: \"peer:join\",\n data: { peerId },\n };\n system.netcode?.(\n this.#context as Context<GS> & { event: NetEvent },\n );\n break;\n }\n case Enums.EventType.NetPeerLeave: {\n const peerId = eventsDataView.getUint8(payloadOffset);\n (this.#context as any).event = {\n type: \"peer:leave\",\n data: { peerId },\n };\n system.netcode?.(\n this.#context as Context<GS> & { event: NetEvent },\n );\n break;\n }\n default:\n // Session lifecycle and other internal events are handled by engine\n // They don't need to be dispatched to game systems\n break;\n }\n // Event is 12 bytes: kind (1) + source (1) + padding (2) + payload (8)\n offset += 12;\n }\n (this.#context as any).event = undefined;\n }\n },\n };\n}\n\nfunction attachEvent<IE extends InputEvent, GS extends BloopSchema>(\n context: Context<GS>,\n event: IE,\n): Context<GS> & { event: IE } {\n (context as any).event = event;\n return context as Context<GS> & { event: IE };\n}\n\ntype MakeGS<B extends Bag> = BloopSchema<B>;\n"
8
+ "import {\n DEFAULT_WASM_URL,\n type EnginePointer,\n type WasmEngine,\n} from \"@bloopjs/engine\";\nimport { type EngineHooks, Sim } from \"./sim\";\nimport { assert } from \"./util\";\n\n/**\n * An object that can be mounted to the simulation engine.\n * Bloop instances satisfy this interface.\n */\nexport type Mountable = {\n hooks: EngineHooks;\n};\n\n/**\n * Mount a simulation engine instance - instantiates wasm and sets up hooks and initial state.\n *\n * This is called by app.start on the web.\n */\nexport async function mount(\n mountable: Mountable,\n options?: MountOptions,\n): Promise<MountResult> {\n const wasmUrl = options?.wasmUrl ?? DEFAULT_WASM_URL;\n const startRecording = options?.startRecording ?? true;\n const { maxEvents, maxPacketBytes } = calculateTapeConfig(options?.tape);\n\n // https://github.com/oven-sh/bun/issues/12434\n const bytes = await fetch(wasmUrl)\n .then((res) => res.arrayBuffer())\n .catch((e) => {\n console.error(`Failed to fetch wasm at ${wasmUrl}`, e);\n throw e;\n });\n\n // 1mb to 64mb\n // use bun check:wasm to find initial memory page size\n const memory = new WebAssembly.Memory({ initial: 310, maximum: 1000 });\n\n // Create sim early so we can reference it in callbacks\n let sim: Sim;\n\n const wasmInstantiatedSource = await WebAssembly.instantiate(bytes, {\n env: {\n memory,\n __systems: function (system_handle: number, ptr: number) {\n mountable.hooks.setBuffer(memory.buffer);\n mountable.hooks.setContext(ptr);\n mountable.hooks.systemsCallback(system_handle, ptr);\n },\n __before_frame: function (ptr: EnginePointer, frame: number) {\n try {\n // Refresh DataViews before beforeFrame hook (memory may have grown)\n mountable.hooks.setBuffer(memory.buffer);\n mountable.hooks.setContext(ptr);\n mountable.hooks.beforeFrame?.(frame);\n } catch (e) {\n console.error(\"Error in beforeFrame hook:\", e);\n }\n },\n __on_tape_full: function (_ctxPtr: number) {\n if (!sim) {\n throw new Error(\"Sim not initialized in on_tape_full\");\n }\n const tapeBytes = sim.saveTape();\n if (sim.onTapeFull) {\n sim.onTapeFull(tapeBytes);\n } else {\n const size = tapeBytes.length / 1024;\n const duration = sim.time.time;\n const kbPerSecond = size / duration;\n\n console.warn(\"Tape full. Recording stopped\", {\n size: `${(tapeBytes.length / 1024).toFixed(0)}kb`,\n duration: `${sim.time.time.toFixed(2)}s`,\n kbPerSecond: `${kbPerSecond.toFixed(2)} kb/s`,\n });\n }\n },\n console_log: function (ptr: EnginePointer, len: number) {\n const bytes = new Uint8Array(memory.buffer, ptr, len);\n const string = new TextDecoder(\"utf-8\").decode(bytes);\n console.log(string);\n },\n __user_data_len: function () {\n const serializer = mountable.hooks.serialize();\n return serializer ? serializer.size : 0;\n },\n user_data_serialize: function (ptr: EnginePointer, len: number) {\n const serializer = mountable.hooks.serialize();\n assert(\n len === serializer.size,\n `user_data_serialize length mismatch, expected=${serializer.size} got=${len}`,\n );\n serializer.write(memory.buffer, ptr);\n },\n user_data_deserialize: function (ptr: EnginePointer, len: number) {\n mountable.hooks.deserialize(memory.buffer, ptr, len);\n },\n },\n });\n const wasm = wasmInstantiatedSource.instance.exports as WasmEngine;\n\n const enginePointer = wasm.initialize();\n sim = new Sim(wasm, memory, {\n serialize: mountable.hooks.serialize,\n });\n\n if (startRecording) {\n sim.record(maxEvents, maxPacketBytes);\n }\n\n mountable.hooks.setBuffer(memory.buffer);\n mountable.hooks.setContext(enginePointer);\n\n return {\n sim,\n };\n}\n\nexport type TapeOptions = (\n | { maxEvents: number }\n | { duration: number; averageEventsPerFrame?: number }\n) & {\n /**\n * Set to true for local-only recording (no network packet buffer).\n * Default: false (allocates 2MB for network packet recording)\n */\n localOnly?: boolean;\n};\n\nexport type MountOptions = {\n /**\n * Whether to start recording immediately upon mount\n * Defaults to true\n */\n startRecording?: boolean;\n\n /**\n * Tape configuration options\n */\n tape?: TapeOptions;\n\n /**\n * Custom WASM URL (for advanced use cases)\n */\n wasmUrl?: URL;\n};\n\nexport type MountResult = {\n sim: Sim;\n};\n\nfunction calculateTapeConfig(tape?: TapeOptions): {\n maxEvents: number;\n maxPacketBytes: number;\n} {\n let maxEvents: number;\n\n if (!tape) {\n maxEvents = 100_000; // default (~15 minutes at typical usage)\n } else if (\"maxEvents\" in tape) {\n maxEvents = tape.maxEvents;\n } else {\n // duration-based: frames * average events per frame\n // At 60fps, duration seconds = duration * 60 frames\n const avgEvents = tape.averageEventsPerFrame ?? 2;\n maxEvents = Math.ceil(tape.duration * 60 * avgEvents);\n }\n\n const localOnly = tape?.localOnly ?? false;\n\n // Default to network mode (2MB), localOnly mode uses 0 bytes\n const maxPacketBytes = localOnly ? 0 : Sim.NETWORK_MAX_PACKET_BYTES;\n\n return { maxEvents, maxPacketBytes };\n}\n",
9
+ "import {\n type EnginePointer,\n Enums,\n EVENTS_OFFSET,\n INPUT_CTX_OFFSET,\n InputContext,\n keyCodeToKey,\n mouseButtonCodeToMouseButton,\n NET_CTX_OFFSET,\n NetContext,\n type NetEvent,\n TIME_CTX_OFFSET,\n TimeContext,\n} from \"@bloopjs/engine\";\nimport type { Context } from \"./context\";\nimport type { Bag } from \"./data/bag\";\nimport type { BloopSchema } from \"./data/schema\";\nimport type {\n InputEvent,\n KeyEvent,\n MouseButtonEvent,\n MouseMoveEvent,\n MouseWheelEvent,\n} from \"./events\";\nimport type { EngineHooks } from \"./sim\";\nimport type { System } from \"./system\";\n\nexport type BloopOpts<B extends Bag> = {\n /** defaults to \"Game\" */\n name?: string;\n /**\n * component definitions, defaults to empty object\n *\n * use `defineComponents` to generate component definitions from a simple schema\n */\n // components?: SchemaWithLayout<CS>;\n /**\n * input map, defaults to empty object\n */\n // inputMap?: IM;\n /**\n * bag definition, defaults to empty object\n *\n */\n bag?: B;\n // schema: GS;\n};\n\nexport class Bloop<GS extends BloopSchema> {\n #systems: System<GS>[] = [];\n #context: Context<GS>;\n #engineBuffer: ArrayBuffer = new ArrayBuffer(0);\n\n /**\n * Bloop.create() is the way to create a new bloop instance.\n */\n static create<\n // S extends Schema,\n // RS extends ResourceSchema,\n B extends Bag,\n // const IM extends InputMap,\n // >(opts: GameOpts<S, RS, B, IM> = {}) {\n >(opts: BloopOpts<B> = {}): Bloop<MakeGS<B>> {\n return new Bloop<MakeGS<B>>(opts, \"dontCallMeDirectly\");\n }\n\n /**\n * DO NOT USE `new Bloop` - use `Bloop.create()` instead for proper type hints.\n */\n constructor(opts: BloopOpts<GS[\"B\"]> = {}, dontCallMeDirectly: string) {\n if (dontCallMeDirectly !== \"dontCallMeDirectly\") {\n throw new Error(\n \"Bloop constructor is private. Use Bloop.create() to create a new game instance.\",\n );\n }\n\n const inputs = new InputContext();\n this.#context = {\n bag: opts.bag ?? {},\n time: new TimeContext(),\n inputs,\n get players() {\n return inputs.players;\n },\n rawPointer: -1,\n net: new NetContext(),\n };\n }\n\n /**\n * Read the game singleton bag\n */\n get bag(): GS[\"B\"] {\n return this.#context.bag;\n }\n\n /**\n * Read the game context object\n */\n get context(): Readonly<Context<GS>> {\n return this.#context;\n }\n\n /**\n * Register a system with the game loop.\n */\n system(label: string, system: System<GS>): number {\n system.label ??= label;\n this.#systems.push(system);\n return this.#systems.length;\n }\n\n /**\n * Low level hooks to engine functionality. Editing these is for advanced use cases, defaults should usually work.\n */\n hooks: EngineHooks = {\n /**\n * Take a snapshot of the game state outside the engine\n * @returns linear memory representation of the game state that the engine is unaware of\n */\n serialize: () => {\n const str = JSON.stringify(this.#context.bag);\n const encoder = new TextEncoder();\n const textBytes = encoder.encode(str);\n\n return {\n size: textBytes.byteLength,\n write: (buffer: ArrayBufferLike, ptr: EnginePointer) => {\n const memoryView = new Uint8Array(buffer, ptr, textBytes.byteLength);\n memoryView.set(textBytes);\n },\n };\n },\n\n /**\n * Restore a snapshot of the game state outside the engine\n * @returns linear memory representation of the game state that the engine is unaware of\n */\n deserialize: (buffer, ptr, len) => {\n const bagBytes = new Uint8Array(buffer, ptr, len);\n const decoder = new TextDecoder();\n const str = decoder.decode(bagBytes);\n\n try {\n this.#context.bag = JSON.parse(str);\n } catch (e) {\n console.error(\"failed to deserialize bag\", { json: str, error: e });\n }\n },\n\n setBuffer: (buffer: ArrayBuffer) => {\n this.#engineBuffer = buffer;\n },\n\n setContext: (ptr: EnginePointer) => {\n if (!this.#engineBuffer) {\n throw new Error(\"Tried to set context before engine buffer\");\n }\n const dv = new DataView(this.#engineBuffer, ptr);\n const timeCtxPtr = dv.getUint32(TIME_CTX_OFFSET, true);\n const inputCtxPtr = dv.getUint32(INPUT_CTX_OFFSET, true);\n const netCtxPtr = dv.getUint32(NET_CTX_OFFSET, true);\n\n this.#context.rawPointer = ptr;\n\n if (\n !this.#context.inputs.hasDataView() ||\n this.#context.inputs.dataView.buffer !== this.#engineBuffer ||\n this.#context.inputs.dataView.byteOffset !== inputCtxPtr\n ) {\n this.#context.inputs.dataView = new DataView(\n this.#engineBuffer,\n inputCtxPtr,\n );\n }\n\n if (\n this.#context.time.dataView?.buffer !== this.#engineBuffer ||\n this.#context.time.dataView?.byteOffset !== timeCtxPtr\n ) {\n this.#context.time.dataView = new DataView(\n this.#engineBuffer,\n timeCtxPtr,\n );\n }\n\n if (\n this.#context.net.dataView?.buffer !== this.#engineBuffer ||\n this.#context.net.dataView?.byteOffset !== netCtxPtr\n ) {\n this.#context.net.dataView = new DataView(\n this.#engineBuffer,\n netCtxPtr,\n );\n }\n },\n\n systemsCallback: (system_handle: number, ptr: EnginePointer) => {\n this.hooks.setContext(ptr);\n const dv = new DataView(this.#engineBuffer, ptr);\n const eventsPtr = dv.getUint32(EVENTS_OFFSET, true);\n const eventsDataView = new DataView(this.#engineBuffer, eventsPtr);\n\n for (const system of this.#systems) {\n system.update?.(this.#context);\n\n // EventBuffer: count (u16) + padding (2 bytes) + events\n // TODO: it would be better to have all the offset math centralized to the\n // engine package, and just do something like\n // const {jsEvent, size} = engine.decodeEvent(eventPtr, eventOffset)\n // eventOffset += size;\n\n const eventCount = eventsDataView.getUint16(0, true);\n let offset = 4; // Skip count (u16) + padding (2 bytes)\n\n for (let i = 0; i < eventCount; i++) {\n // Event layout: kind (u8) + source (u8) + padding (2 bytes) + payload (8 bytes) = 12 bytes\n const eventType = eventsDataView.getUint8(offset);\n const eventSource = eventsDataView.getUint8(offset + 1);\n const payloadOffset = offset + 4; // Skip kind + source + padding\n const payloadByte = eventsDataView.getUint8(payloadOffset);\n const payloadVec2 = {\n x: eventsDataView.getFloat32(payloadOffset, true),\n y: eventsDataView.getFloat32(\n payloadOffset + Float32Array.BYTES_PER_ELEMENT,\n true,\n ),\n };\n\n switch (eventType) {\n case Enums.EventType.KeyDown: {\n system.keydown?.(\n attachEvent<KeyEvent, GS>(this.#context, {\n key: keyCodeToKey(payloadByte),\n }),\n );\n break;\n }\n case Enums.EventType.KeyUp:\n system.keyup?.(\n attachEvent<KeyEvent, GS>(this.#context, {\n key: keyCodeToKey(payloadByte),\n }),\n );\n break;\n case Enums.EventType.MouseDown:\n system.mousedown?.(\n attachEvent<MouseButtonEvent, GS>(this.#context, {\n button: mouseButtonCodeToMouseButton(payloadByte),\n }),\n );\n break;\n case Enums.EventType.MouseUp:\n system.mouseup?.(\n attachEvent<MouseButtonEvent, GS>(this.#context, {\n button: mouseButtonCodeToMouseButton(payloadByte),\n }),\n );\n break;\n case Enums.EventType.MouseMove:\n system.mousemove?.(\n attachEvent<MouseMoveEvent, GS>(this.#context, {\n x: payloadVec2.x,\n y: payloadVec2.y,\n }),\n );\n break;\n case Enums.EventType.MouseWheel:\n system.mousewheel?.(\n attachEvent<MouseWheelEvent, GS>(this.#context, {\n x: payloadVec2.x,\n y: payloadVec2.y,\n }),\n );\n break;\n case Enums.EventType.NetJoinOk: {\n // Room code is 8 bytes starting at payload offset\n const roomCodeBytes: number[] = [];\n for (let j = 0; j < 8; j++) {\n const byte = eventsDataView.getUint8(payloadOffset + j);\n if (byte === 0) break;\n roomCodeBytes.push(byte);\n }\n const roomCode = String.fromCharCode(...roomCodeBytes);\n (this.#context as any).event = {\n type: \"join:ok\",\n data: { roomCode },\n };\n system.netcode?.(\n this.#context as Context<GS> & { event: NetEvent },\n );\n break;\n }\n case Enums.EventType.NetJoinFail: {\n // Reason is stored at payload offset as u8\n const reasonCode = eventsDataView.getUint8(payloadOffset);\n const reasons = [\n \"unknown\",\n \"timeout\",\n \"room_full\",\n \"room_not_found\",\n \"already_in_room\",\n ];\n const reason = reasons[reasonCode] ?? \"unknown\";\n (this.#context as any).event = {\n type: \"join:fail\",\n data: { reason },\n };\n system.netcode?.(\n this.#context as Context<GS> & { event: NetEvent },\n );\n break;\n }\n case Enums.EventType.NetPeerJoin: {\n const peerId = eventsDataView.getUint8(payloadOffset);\n (this.#context as any).event = {\n type: \"peer:join\",\n data: { peerId },\n };\n system.netcode?.(\n this.#context as Context<GS> & { event: NetEvent },\n );\n break;\n }\n case Enums.EventType.NetPeerLeave: {\n const peerId = eventsDataView.getUint8(payloadOffset);\n (this.#context as any).event = {\n type: \"peer:leave\",\n data: { peerId },\n };\n system.netcode?.(\n this.#context as Context<GS> & { event: NetEvent },\n );\n break;\n }\n case Enums.EventType.NetSessionInit:\n console.log(\"[bloop] NetSessionInit event received\");\n (this.#context as any).event = {\n type: \"session:start\",\n };\n system.netcode?.(\n this.#context as Context<GS> & { event: NetEvent },\n );\n break;\n default:\n // Session lifecycle and other internal events are handled by engine\n // They don't need to be dispatched to game systems\n break;\n }\n // Event is 12 bytes: kind (1) + source (1) + padding (2) + payload (8)\n offset += 12;\n }\n (this.#context as any).event = undefined;\n }\n },\n };\n}\n\nfunction attachEvent<IE extends InputEvent, GS extends BloopSchema>(\n context: Context<GS>,\n event: IE,\n): Context<GS> & { event: IE } {\n (context as any).event = event;\n return context as Context<GS> & { event: IE };\n}\n\ntype MakeGS<B extends Bag> = BloopSchema<B>;\n"
10
10
  ],
11
- "mappings": "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AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,KAAK,GAA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AO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,EAErC,SAAS,CAAC,MAAM;AAAA,IACd,IAAI;AAAA,IACJ,IAAI,KAAK,WAAW,IAAI,IAAI,GAAG;AAAA,MAC7B,QAAQ,KAAK,WAAW,IAAI,IAAI;AAAA,IAClC,EAAO;AAAA,MACL,QAAQ,EAAE,MAAM,OAAO,MAAM,OAAO,IAAI,MAAM;AAAA,MAC9C,KAAK,WAAW,IAAI,MAAM,KAAK;AAAA;AAAA,IAEjC,MAAM,OAAO,CAAC,EAAE,KAAK,UAAU,SAAS,IAAI,IAAI;AAAA,IAChD,MAAM,OAAO,MAAM,QAAQ,EAAE,KAAK,UAAU,SAAS,IAAI,IAAI;AAAA,IAC7D,MAAM,KAAK,CAAC,MAAM,QAAQ,CAAC,EAAE,KAAK,UAAU,SAAS,IAAI,IAAI;AAAA,IAC7D,OAAO;AAAA;AAEX;AAEA,IAAI,YAAY;AAChB,IAAI,qBAAqB;AACzB,IAAI,gBAAgB;AACpB,IAAI,6BAA6B;AACjC,IAAI,yBAAyB;AAC7B,IAAI,4BAA4B;AAChC,IAAI,wBAAwB;AAC5B,IAAI,kBAAkB;AACtB,IAAI,kBAAkB;AACtB,IAAI,aAAa;AAAA,EACf,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAAA;AAEA,MAAM,WAAW;AAAA,EACf;AAAA,EACA,SAAS,MAAM,KAAK,EAAE,QAAQ,UAAU,GAAG,OAAO;AAAA,IAChD,SAAS;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,EACP,EAAE;AAAA,EACF,eAAe,CAAC;AAAA,EAChB,WAAW,CAAC,UAAU;AAAA,IACpB,KAAK,WAAW;AAAA;AAAA,EAElB,eAAe,GAAG;AAAA,IAChB,IAAI,CAAC,KAAK;AAAA,MACR,OAAO;AAAA,IACT,OAAO,KAAK,SAAS,OAAO,aAAa;AAAA;AAAA,MAEvC,SAAS,GAAG;AAAA,IACd,IAAI,CAAC,KAAK,gBAAgB,GAAG;AAAA,MAC3B,MAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAAA,IACA,OAAO,KAAK,SAAS,SAAS,CAAC;AAAA;AAAA,MAE7B,WAAW,GAAG;AAAA,IAChB,IAAI,CAAC,KAAK,gBAAgB,GAAG;AAAA,MAC3B,MAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAAA,IACA,OAAO,KAAK,SAAS,SAAS,CAAC;AAAA;AAAA,MAE7B,WAAW,GAAG;AAAA,IAChB,IAAI,CAAC,KAAK,gBAAgB,GAAG;AAAA,MAC3B,MAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAAA,IACA,OAAO,KAAK,SAAS,SAAS,CAAC,MAAM;AAAA;AAAA,MAEnC,MAAM,GAAG;AAAA,IACX,IAAI,CAAC,KAAK,gBAAgB,GAAG;AAAA,MAC3B,MAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAAA,IACA,MAAM,aAAa,KAAK,SAAS,SAAS,CAAC;AAAA,IAC3C,OAAO,WAAW,eAAe;AAAA;AAAA,MAE/B,UAAU,GAAG;AAAA,IACf,IAAI,CAAC,KAAK,gBAAgB,GAAG;AAAA,MAC3B,MAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAAA,IACA,OAAO,KAAK,SAAS,UAAU,GAAG,IAAI;AAAA;AAAA,MAEpC,iBAAiB,GAAG;AAAA,IACtB,IAAI,CAAC,KAAK,gBAAgB,GAAG;AAAA,MAC3B,MAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAAA,IACA,OAAO,KAAK,SAAS,UAAU,GAAG,IAAI;AAAA;AAAA,MAEpC,QAAQ,GAAG;AAAA,IACb,IAAI,CAAC,KAAK,gBAAgB,GAAG;AAAA,MAC3B,MAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAAA,IACA,MAAM,QAAQ,CAAC;AAAA,IACf,SAAS,IAAI,EAAE,IAAI,GAAG,KAAK;AAAA,MACzB,MAAM,OAAO,KAAK,SAAS,SAAS,KAAK,CAAC;AAAA,MAC1C,IAAI,SAAS;AAAA,QACX;AAAA,MACF,MAAM,KAAK,IAAI;AAAA,IACjB;AAAA,IACA,OAAO,OAAO,aAAa,GAAG,KAAK;AAAA;AAAA,MAEjC,aAAa,GAAG;AAAA,IAClB,IAAI,CAAC,KAAK,gBAAgB,GAAG;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,MAAM,QAAQ,CAAC;AAAA,IACf,SAAS,IAAI,EAAE,IAAI,GAAG,KAAK;AAAA,MACzB,MAAM,OAAO,KAAK,SAAS,SAAS,KAAK,CAAC;AAAA,MAC1C,IAAI,SAAS;AAAA,QACX;AAAA,MACF,MAAM,KAAK,IAAI;AAAA,IACjB;AAAA,IACA,OAAO,MAAM,SAAS,IAAI,OAAO,aAAa,GAAG,KAAK,IAAI;AAAA;AAAA,MAExD,aAAa,CAAC,MAAM;AAAA,IACtB,IAAI,CAAC,KAAK,gBAAgB,GAAG;AAAA,MAC3B,MAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAAA,IACA,SAAS,IAAI,EAAE,IAAI,GAAG,KAAK;AAAA,MACzB,KAAK,SAAS,SAAS,KAAK,GAAG,CAAC;AAAA,IAClC;AAAA,IACA,IAAI,MAAM;AAAA,MACR,SAAS,IAAI,EAAE,IAAI,KAAK,IAAI,KAAK,QAAQ,CAAC,GAAG,KAAK;AAAA,QAChD,KAAK,SAAS,SAAS,KAAK,GAAG,KAAK,WAAW,CAAC,CAAC;AAAA,MACnD;AAAA,IACF;AAAA;AAAA,MAEE,eAAe,GAAG;AAAA,IACpB,IAAI,CAAC,KAAK,gBAAgB,GAAG;AAAA,MAC3B,OAAO;AAAA,IACT;AAAA,IACA,OAAO,KAAK,SAAS,SAAS,EAAE,MAAM;AAAA;AAAA,MAEpC,eAAe,CAAC,OAAO;AAAA,IACzB,IAAI,CAAC,KAAK,gBAAgB,GAAG;AAAA,MAC3B,MAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAAA,IACA,KAAK,SAAS,SAAS,IAAI,QAAQ,IAAI,CAAC;AAAA;AAAA,MAEtC,KAAK,GAAG;AAAA,IACV,IAAI,CAAC,KAAK,gBAAgB,GAAG;AAAA,MAC3B,MAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAAA,IACA,MAAM,KAAK,KAAK;AAAA,IAChB,MAAM,cAAc,KAAK;AAAA,IACzB,MAAM,aAAa,KAAK;AAAA,IACxB,IAAI,eAAe;AAAA,IACnB,SAAS,IAAI,EAAE,IAAI,WAAW,KAAK;AAAA,MACjC,IAAI,MAAM;AAAA,QACR;AAAA,MACF,MAAM,aAAa,qBAAqB,IAAI;AAAA,MAC5C,IAAI,GAAG,SAAS,aAAa,qBAAqB,MAAM;AAAA,QACtD;AAAA,MACF,MAAM,MAAM,GAAG,SAAS,aAAa,iBAAiB,IAAI;AAAA,MAC1D,IAAI,MAAM;AAAA,QACR;AAAA,MACF,IAAI,iBAAiB,MAAM,MAAM,cAAc;AAAA,QAC7C,eAAe;AAAA,MACjB;AAAA,IACF;AAAA,IACA,KAAK,aAAa,SAAS;AAAA,IAC3B,SAAS,IAAI,EAAE,IAAI,WAAW,KAAK;AAAA,MACjC,MAAM,aAAa,qBAAqB,IAAI;AAAA,MAC5C,IAAI,GAAG,SAAS,aAAa,qBAAqB,MAAM;AAAA,QACtD;AAAA,MACF,MAAM,OAAO,KAAK,OAAO;AAAA,MACzB,IAAI,CAAC,MAAM;AAAA,QACT,MAAM,IAAI,MAAM,2CAA2C,GAAG;AAAA,MAChE;AAAA,MACA,MAAM,UAAU,MAAM;AAAA,MACtB,KAAK,UAAU;AAAA,MACf,IAAI,SAAS;AAAA,QACX,KAAK,MAAM;AAAA,QACX,KAAK,MAAM;AAAA,MACb,EAAO;AAAA,QACL,KAAK,MAAM,GAAG,SAAS,aAAa,iBAAiB,IAAI;AAAA,QACzD,KAAK,MAAM,GAAG,SAAS,aAAa,iBAAiB,IAAI;AAAA;AAAA,MAE3D,KAAK,aAAa,KAAK,IAAI;AAAA,IAC7B;AAAA,IACA,OAAO,KAAK;AAAA;AAAA,MAEV,iBAAiB,GAAG;AAAA,IACtB,IAAI,CAAC,KAAK,gBAAgB,GAAG;AAAA,MAC3B,MAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAAA,IACA,OAAO,KAAK,SAAS,UAAU,4BAA4B,IAAI;AAAA;AAAA,MAE7D,cAAc,GAAG;AAAA,IACnB,IAAI,CAAC,KAAK,gBAAgB,GAAG;AAAA,MAC3B,MAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAAA,IACA,OAAO,KAAK,SAAS,UAAU,wBAAwB,IAAI;AAAA;AAAA,MAEzD,iBAAiB,GAAG;AAAA,IACtB,IAAI,CAAC,KAAK,gBAAgB,GAAG;AAAA,MAC3B,MAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAAA,IACA,OAAO,OAAO,KAAK,SAAS,aAAa,2BAA2B,IAAI,CAAC;AAAA;AAE7E;AAAA;AAEA,MAAM,YAAY;AAAA,EAChB;AAAA,EACA,WAAW,CAAC,UAAU;AAAA,IACpB,KAAK,WAAW;AAAA;AAAA,MAEd,KAAK,GAAG;AAAA,IACV,IAAI,CAAC,KAAK,UAAU;AAAA,MAClB,MAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AAAA,IACA,OAAO,KAAK,SAAS,UAAU,GAAG,IAAI;AAAA;AAAA,MAEpC,EAAE,GAAG;AAAA,IACP,IAAI,CAAC,KAAK,UAAU;AAAA,MAClB,MAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AAAA,IACA,OAAO,KAAK,SAAS,UAAU,GAAG,IAAI,IAAI;AAAA;AAAA,MAExC,IAAI,GAAG;AAAA,IACT,IAAI,CAAC,KAAK,UAAU;AAAA,MAClB,MAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AAAA,IACA,OAAO,KAAK,SAAS,UAAU,GAAG,IAAI,IAAI;AAAA;AAE9C;AAEA,IAAI,aAAa;AACjB,SAAS,cAAc,CAAC,MAAM;AAAA,EAC5B,MAAM,OAAO,IAAI,SAAS,KAAK,QAAQ,KAAK,YAAY,KAAK,UAAU;AAAA,EACvE,MAAM,QAAQ,KAAK,UAAU,GAAG,IAAI;AAAA,EACpC,IAAI,UAAU,YAAY;AAAA,IACxB,MAAM,IAAI,MAAM,uCAAuC,WAAW,SAAS,EAAE,UAAU,MAAM,SAAS,EAAE,GAAG;AAAA,EAC7G;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA,SAAS,KAAK,UAAU,GAAG,IAAI;AAAA,IAC/B,YAAY,KAAK,UAAU,GAAG,IAAI;AAAA,IAClC,YAAY,KAAK,UAAU,IAAI,IAAI;AAAA,IACnC,YAAY,KAAK,UAAU,IAAI,IAAI;AAAA,EACrC;AAAA;AAGF,IAAI,mBAAmB,IAAI,IAAI,0DAA0D;AAGzF,IAAI,sBAAsB;AAC1B,IAAI,kBAAkB;AACtB,IAAI,mBAAmB,kBAAkB;AACzC,IAAI,gBAAgB,mBAAmB;AACvC,IAAI,iBAAiB,gBAAgB;AACrC,IAAI,sBAAsB;AAC1B,IAAI,kCAAkC;AACtC,IAAI,oCAAoC;;AC/uCxC,IAAM,kBAAmB,WAAmB;AAE5C,IAAM,OAAO,MAAM;AAEnB,IAAM,cAAc,OAAO,YACzB,OAAO,KAAK,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CACvD;AAEA,SAAS,WAAW,GAAG;AAAA,EACpB,WAAW,UAAiC;AAAA;AAG/C,SAAS,aAAa,GAAG;AAAA,EACtB,WAAW,UAAiC;AAAA;AAAA;AA+DxC,MAAM,IAAI;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAqB;AAAA,EAMrB;AAAA,EAMA;AAAA,EAEA,WAAW,CACT,MACA,QACA,MACA;AAAA,IACA,KAAK,OAAO;AAAA,IACZ,KAAK,UAAU;AAAA,IACf,KAAK,QAAQ,IAAI,YACf,IAAI,SAAS,KAAK,QAAQ,QAAQ,KAAK,KAAK,aAAa,CAAC,CAC5D;AAAA,IAEA,KAAK,KAAK,GAAG,KAAK,MAAM,KAAK,OAAO,IAAI,GAAS;AAAA,IAEjD,KAAK,aAAa,MAAM;AAAA,IACxB,KAAK,OAAO,IAAI;AAAA;AAAA,EAWlB,IAAI,CAAC,IAAqB;AAAA,IACxB,IAAI,KAAK,WAAW;AAAA,MAClB,OAAO;AAAA,IACT;AAAA,IACA,OAAO,KAAK,KAAK,KAAK,MAAM,EAAE;AAAA;AAAA,EAQhC,IAAI,CAAC,gBAAgC;AAAA,IACnC,KAAK,KAAK,KAAK,kBAAkB,KAAK;AAAA;AAAA,EASxC,YAAY,CAAC,QAAmB;AAAA,IAC9B,IAAI,OAAO,aAAa;AAAA,MACtB,KAAK,SAAS,OAAO,SAAS,CAAC;AAAA,IACjC;AAAA,IACA,KAAK,QAAQ,OAAO,SAAS,CAAC;AAAA;AAAA,EAMhC,KAAK,GAAG;AAAA,IACN,KAAK,YAAY;AAAA;AAAA,EAMnB,OAAO,GAAG;AAAA,IACR,KAAK,YAAY;AAAA;AAAA,MAMf,QAAQ,GAAY;AAAA,IACtB,OAAO,KAAK;AAAA;AAAA,EAMd,QAAQ,GAAG;AAAA,IACT,IAAI,KAAK,KAAK,UAAU,GAAG;AAAA,MACzB;AAAA,IACF;AAAA,IAEA,KAAK,KAAK,KAAK,KAAK,QAAQ,CAAC;AAAA;AAAA,EAU/B,IAAI,CAAC,OAAe,WAAqB;AAAA,IACvC,OACE,KAAK,YACL,oDACF;AAAA,IAEA,MAAM,cAAc,YAAY,QAAQ,IAAI;AAAA,IAE5C,MAAM,aAAa,QAAQ,KAAK,KAAK;AAAA,IACrC,IAAI,YAAY;AAAA,MACd,YAAY;AAAA,IACd;AAAA,IACA,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,IAAI,YAAY;AAAA,MACd,cAAc;AAAA,IAChB;AAAA;AAAA,EAMF,QAAQ,GAA4B;AAAA,IAClC,MAAM,aAAa,KAAK,aAAa,KAAK,WAAW,IAAI;AAAA,IACzD,MAAM,OAAO,aAAa,WAAW,OAAO;AAAA,IAE5C,MAAM,MAAM,KAAK,KAAK,cAAc,IAAI;AAAA,IACxC,MAAM,SAAS,IAAI,YAAY,KAAK,QAAQ,QAAQ,KAAK,CAAC;AAAA,IAC1D,MAAM,eACJ,kCAAkC,YAAY;AAAA,IAChD,MAAM,iBACJ,oCAAoC,YAAY;AAAA,IAClD,OAAO,OAAO,eAAe,4BAA4B;AAAA,IACzD,OAAO,OAAO,iBAAiB,8BAA8B;AAAA,IAC7D,MAAM,SAAS,OAAO,gBAAgB,OAAO;AAAA,IAC7C,MAAM,aAAa,IAAI,WAAW,KAAK,QAAQ,QAAQ,KAAK,MAAM;AAAA,IAElE,MAAM,OAAO,IAAI,WAAW,MAAM;AAAA,IAClC,KAAK,IAAI,UAAU;AAAA,IAEnB,OAAO;AAAA;AAAA,SAMO,2BAA2B,IAAI,OAAO;AAAA,EAOtD,MAAM,CACJ,YAAoB,KACpB,iBAAyB,IAAI,0BAC7B;AAAA,IACA,MAAM,aAAa,KAAK,aAAa,KAAK,WAAW,IAAI;AAAA,IACzD,MAAM,OAAO,aAAa,WAAW,OAAO;AAAA,IAC5C,MAAM,SAAS,KAAK,KAAK,gBAAgB,MAAM,WAAW,cAAc;AAAA,IACxE,IAAI,WAAW,GAAG;AAAA,MAChB,MAAM,IAAI,MAAM,yCAAyC,QAAQ;AAAA,IACnE;AAAA;AAAA,EAMF,QAAQ,GAA4B;AAAA,IAClC,MAAM,UAAU,KAAK,KAAK,aAAa;AAAA,IACvC,MAAM,UAAU,KAAK,KAAK,aAAa;AAAA,IACvC,MAAM,aAAa,IAAI,WAAW,KAAK,QAAQ,QAAQ,SAAS,OAAO;AAAA,IAEvE,MAAM,OAAO,IAAI,WAAW,OAAO;AAAA,IACnC,KAAK,IAAI,UAAU;AAAA,IAEnB,OAAO;AAAA;AAAA,EAQT,QAAQ,CAAC,MAAkB,SAA2B;AAAA,IACpD,MAAM,UAAU,KAAK,KAAK,MAAM,KAAK,UAAU;AAAA,IAC/C,OACE,UAAU,GACV,sBAAsB,KAAK,2CAA2C,SACxE;AAAA,IAGA,MAAM,aAAa,IAAI,WACrB,KAAK,QAAQ,QACb,SACA,KAAK,UACP;AAAA,IACA,WAAW,IAAI,IAAI;AAAA,IAGnB,IAAI,KAAK,aAAa;AAAA,MACpB,KAAK,KAAK,eAAe;AAAA,IAC3B;AAAA,IACA,MAAM,qBAAqB,SAAS,sBAAsB;AAAA,IAC1D,MAAM,oBAAoB,SAAS,qBAAqB,KAAK,OAAO;AAAA,IACpE,MAAM,SAAS,KAAK,KAAK,UACvB,SACA,KAAK,YACL,oBACA,iBACF;AAAA,IACA,OAAO,WAAW,GAAG,mCAAmC,QAAQ;AAAA,IAGhE,KAAK,KAAK,KAAK,SAAS,KAAK,UAAU;AAAA;AAAA,EAMzC,OAAO,CAAC,UAAsB;AAAA,IAC5B,MAAM,UAAU,KAAK,KAAK,MAAM,SAAS,UAAU;AAAA,IACnD,OACE,UAAU,GACV,sBAAsB,SAAS,kDAAkD,SACnF;AAAA,IAGA,MAAM,aAAa,IAAI,WACrB,KAAK,QAAQ,QACb,SACA,SAAS,UACX;AAAA,IACA,WAAW,IAAI,QAAQ;AAAA,IAGvB,KAAK,KAAK,QAAQ,OAAO;AAAA,IAGzB,KAAK,KAAK,KAAK,SAAS,SAAS,UAAU;AAAA;AAAA,EAM7C,OAAO,GAAG;AAAA,IACR,KAAK,KAAK,OAAO;AAAA;AAAA,MAGf,IAAI,GAAgB;AAAA,IACtB,IACE,CAAC,KAAK,MAAM,YACZ,KAAK,MAAM,SAAS,WAAW,KAAK,QAAQ,QAC5C;AAAA,MAEA,KAAK,MAAM,WAAW,IAAI,SACxB,KAAK,QAAQ,QACb,KAAK,KAAK,aAAa,CACzB;AAAA,IACF;AAAA,IACA,OAAO,KAAK;AAAA;AAAA,MAGV,GAAG,GAAe;AAAA,IACpB,IACE,CAAC,KAAK,KAAK,YACX,KAAK,KAAK,SAAS,WAAW,KAAK,QAAQ,QAC3C;AAAA,MAEA,KAAK,KAAK,WAAW,IAAI,SACvB,KAAK,QAAQ,QACb,KAAK,KAAK,YAAY,CACxB;AAAA,IACF;AAAA,IACA,OAAO,KAAK;AAAA;AAAA,MAGV,MAAM,GAAgB;AAAA,IACxB,OAAO,KAAK,QAAQ;AAAA;AAAA,MAGlB,WAAW,GAAY;AAAA,IACzB,OAAO,QAAQ,KAAK,KAAK,aAAa,CAAC;AAAA;AAAA,MAGrC,WAAW,GAAY;AAAA,IACzB,OAAO,QAAQ,KAAK,KAAK,aAAa,CAAC;AAAA;AAAA,MAGrC,UAAU,GAAY;AAAA,IACxB,OAAO,KAAK,eAAe,KAAK;AAAA;AAAA,EAGlC,OAAO;AAAA,IACL,SAAS,CAAC,KAAU,SAAiB,MAAY;AAAA,MAC/C,KAAK,KAAK,aAAa,aAAa,GAAG,GAAG,MAAM;AAAA;AAAA,IAElD,OAAO,CAAC,KAAU,SAAiB,MAAY;AAAA,MAC7C,KAAK,KAAK,WAAW,aAAa,GAAG,GAAG,MAAM;AAAA;AAAA,IAEhD,WAAW,CAAC,GAAW,GAAW,SAAiB,MAAY;AAAA,MAC7D,KAAK,KAAK,eAAe,GAAG,GAAG,MAAM;AAAA;AAAA,IAEvC,WAAW,CAAC,QAAqB,SAAiB,MAAY;AAAA,MAC5D,KAAK,KAAK,eAAe,6BAA6B,MAAM,GAAG,MAAM;AAAA;AAAA,IAEvE,SAAS,CAAC,QAAqB,SAAiB,MAAY;AAAA,MAC1D,KAAK,KAAK,aAAa,6BAA6B,MAAM,GAAG,MAAM;AAAA;AAAA,IAErE,YAAY,CAAC,GAAW,GAAW,SAAiB,MAAY;AAAA,MAC9D,KAAK,KAAK,gBAAgB,GAAG,GAAG,MAAM;AAAA;AAAA,IAMxC,SAAS,CACP,MACA,SACS;AAAA,MACT,QAAQ;AAAA,aACD,WAAW;AAAA,UACd,MAAM,WAAY,KAA8B;AAAA,UAChD,MAAM,UAAU,IAAI,YAAY,EAAE,OAAO,QAAQ;AAAA,UACjD,MAAM,MAAM,KAAK,KAAK,MAAM,QAAQ,MAAM;AAAA,UAC1C,IAAI,WAAW,KAAK,QAAQ,QAAQ,KAAK,QAAQ,MAAM,EAAE,IAAI,OAAO;AAAA,UACpE,KAAK,KAAK,iBAAiB,KAAK,QAAQ,MAAM;AAAA,UAC9C,KAAK,KAAK,KAAK,KAAK,QAAQ,MAAM;AAAA,UAClC;AAAA,QACF;AAAA,aACK;AAAA,UACH,KAAK,KAAK,mBAAmB,CAAC;AAAA,UAC9B;AAAA,aACG,aAAa;AAAA,UAChB,MAAM,SAAU,KAA4B;AAAA,UAC5C,KAAK,KAAK,mBAAmB,MAAM;AAAA,UACnC;AAAA,QACF;AAAA,aACK,cAAc;AAAA,UACjB,MAAM,SAAU,KAA4B;AAAA,UAC5C,KAAK,KAAK,oBAAoB,MAAM;AAAA,UACpC;AAAA,QACF;AAAA,aACK,wBAAwB;AAAA,UAC3B,MAAM,SAAU,KAA4B;AAAA,UAC5C,KAAK,KAAK,8BAA8B,MAAM;AAAA,UAC9C;AAAA,QACF;AAAA,aACK;AAAA,UACH,KAAK,KAAK,sBAAsB;AAAA,UAChC;AAAA,aACG;AAAA,UACH,KAAK,KAAK,qBAAqB;AAAA,UAC/B;AAAA;AAAA;AAAA,IAON,QAAQ,CAAC,SAA2B;AAAA,MAClC,IAAI,KAAK,WAAW,GAAG;AAAA,QACrB;AAAA,MACF;AAAA,MAGA,MAAM,MAAM,KAAK,KAAK,MAAM,KAAK,UAAU;AAAA,MAC3C,OACE,MAAM,GACN,sBAAsB,KAAK,sCAC7B;AAAA,MAEA,MAAM,aAAa,IAAI,WACrB,KAAK,QAAQ,QACb,KACA,KAAK,UACP;AAAA,MACA,WAAW,IAAI,IAAI;AAAA,MAGnB,MAAM,SAAS,KAAK,KAAK,oBAAoB,KAAK,KAAK,UAAU;AAAA,MAGjE,KAAK,KAAK,KAAK,KAAK,KAAK,UAAU;AAAA,MAGnC,IAAI,WAAW,GAAG;AAAA,QAChB,MAAM,gBAAwC;AAAA,UAC5C,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,QACA,MAAM,IAAI,MACR,cAAc,WAAW,yBAAyB,QACpD;AAAA,MACF;AAAA;AAAA,EAEJ;AAAA,EAWA,iBAAiB,CAAC,YAAoD;AAAA,IAEpE,KAAK,KAAK,sBAAsB,UAAU;AAAA,IAE1C,MAAM,MAAM,KAAK,KAAK,wBAAwB;AAAA,IAC9C,IAAI,QAAQ,GAAG;AAAA,MACb,MAAM,IAAI,MAAM,yCAAyC,YAAY;AAAA,IACvE;AAAA,IAEA,MAAM,MAAM,KAAK,KAAK,oBAAoB;AAAA,IAC1C,OAAO,MAAM,GAAG,oCAAoC,KAAK;AAAA,IAGzD,MAAM,aAAa,IAAI,WAAW,KAAK,QAAQ,QAAQ,KAAK,GAAG;AAAA,IAC/D,MAAM,OAAO,IAAI,WAAW,GAAG;AAAA,IAC/B,KAAK,IAAI,UAAU;AAAA,IAEnB,OAAO;AAAA;AAEX;;;AC/fA,eAAsB,KAAK,CACzB,WACA,SACsB;AAAA,EACtB,MAAM,UAAU,SAAS,WAAW;AAAA,EACpC,MAAM,iBAAiB,SAAS,kBAAkB;AAAA,EAClD,QAAQ,WAAW,mBAAmB,oBAAoB,SAAS,IAAI;AAAA,EAGvE,MAAM,QAAQ,MAAM,MAAM,OAAO,EAC9B,KAAK,CAAC,QAAQ,IAAI,YAAY,CAAC,EAC/B,MAAM,CAAC,MAAM;AAAA,IACZ,QAAQ,MAAM,2BAA2B,WAAW,CAAC;AAAA,IACrD,MAAM;AAAA,GACP;AAAA,EAIH,MAAM,SAAS,IAAI,YAAY,OAAO,EAAE,SAAS,KAAK,SAAS,KAAK,CAAC;AAAA,EAGrE,IAAI;AAAA,EAEJ,MAAM,yBAAyB,MAAM,YAAY,YAAY,OAAO;AAAA,IAClE,KAAK;AAAA,MACH;AAAA,MACA,WAAW,QAAS,CAAC,eAAuB,KAAa;AAAA,QACvD,UAAU,MAAM,UAAU,OAAO,MAAM;AAAA,QACvC,UAAU,MAAM,gBAAgB,eAAe,GAAG;AAAA;AAAA,MAEpD,gBAAgB,QAAS,CAAC,KAAoB,OAAe;AAAA,QAC3D,IAAI;AAAA,UAEF,UAAU,MAAM,UAAU,OAAO,MAAM;AAAA,UACvC,UAAU,MAAM,WAAW,GAAG;AAAA,UAC9B,UAAU,MAAM,cAAc,KAAK;AAAA,UACnC,OAAO,GAAG;AAAA,UACV,QAAQ,MAAM,8BAA8B,CAAC;AAAA;AAAA;AAAA,MAGjD,gBAAgB,QAAS,CAAC,SAAiB;AAAA,QACzC,IAAI,CAAC,KAAK;AAAA,UACR,MAAM,IAAI,MAAM,qCAAqC;AAAA,QACvD;AAAA,QACA,MAAM,YAAY,IAAI,SAAS;AAAA,QAC/B,IAAI,IAAI,YAAY;AAAA,UAClB,IAAI,WAAW,SAAS;AAAA,QAC1B,EAAO;AAAA,UACL,MAAM,OAAO,UAAU,SAAS;AAAA,UAChC,MAAM,WAAW,IAAI,KAAK;AAAA,UAC1B,MAAM,cAAc,OAAO;AAAA,UAE3B,QAAQ,KAAK,gCAAgC;AAAA,YAC3C,MAAM,IAAI,UAAU,SAAS,MAAM,QAAQ,CAAC;AAAA,YAC5C,UAAU,GAAG,IAAI,KAAK,KAAK,QAAQ,CAAC;AAAA,YACpC,aAAa,GAAG,YAAY,QAAQ,CAAC;AAAA,UACvC,CAAC;AAAA;AAAA;AAAA,MAGL,aAAa,QAAS,CAAC,KAAoB,KAAa;AAAA,QACtD,MAAM,SAAQ,IAAI,WAAW,OAAO,QAAQ,KAAK,GAAG;AAAA,QACpD,MAAM,SAAS,IAAI,YAAY,OAAO,EAAE,OAAO,MAAK;AAAA,QACpD,QAAQ,IAAI,MAAM;AAAA;AAAA,MAEpB,iBAAiB,QAAS,GAAG;AAAA,QAC3B,MAAM,aAAa,UAAU,MAAM,UAAU;AAAA,QAC7C,OAAO,aAAa,WAAW,OAAO;AAAA;AAAA,MAExC,qBAAqB,QAAS,CAAC,KAAoB,KAAa;AAAA,QAC9D,MAAM,aAAa,UAAU,MAAM,UAAU;AAAA,QAC7C,OACE,QAAQ,WAAW,MACnB,iDAAiD,WAAW,YAAY,KAC1E;AAAA,QACA,WAAW,MAAM,OAAO,QAAQ,GAAG;AAAA;AAAA,MAErC,uBAAuB,QAAS,CAAC,KAAoB,KAAa;AAAA,QAChE,UAAU,MAAM,YAAY,OAAO,QAAQ,KAAK,GAAG;AAAA;AAAA,IAEvD;AAAA,EACF,CAAC;AAAA,EACD,MAAM,OAAO,uBAAuB,SAAS;AAAA,EAE7C,MAAM,gBAAgB,KAAK,WAAW;AAAA,EACtC,MAAM,IAAI,IAAI,MAAM,QAAQ;AAAA,IAC1B,WAAW,UAAU,MAAM;AAAA,EAC7B,CAAC;AAAA,EAED,IAAI,gBAAgB;AAAA,IAClB,IAAI,OAAO,WAAW,cAAc;AAAA,EACtC;AAAA,EAEA,UAAU,MAAM,UAAU,OAAO,MAAM;AAAA,EACvC,UAAU,MAAM,WAAW,aAAa;AAAA,EAExC,OAAO;AAAA,IACL;AAAA,EACF;AAAA;AAoCF,SAAS,mBAAmB,CAAC,MAG3B;AAAA,EACA,IAAI;AAAA,EAEJ,IAAI,CAAC,MAAM;AAAA,IACT,YAAY;AAAA,EACd,EAAO,SAAI,eAAe,MAAM;AAAA,IAC9B,YAAY,KAAK;AAAA,EACnB,EAAO;AAAA,IAGL,MAAM,YAAY,KAAK,yBAAyB;AAAA,IAChD,YAAY,KAAK,KAAK,KAAK,WAAW,KAAK,SAAS;AAAA;AAAA,EAGtD,MAAM,YAAY,MAAM,aAAa;AAAA,EAGrC,MAAM,iBAAiB,YAAY,IAAI,IAAI;AAAA,EAE3C,OAAO,EAAE,WAAW,eAAe;AAAA;;AChI9B,MAAM,MAA8B;AAAA,EACzC,WAAyB,CAAC;AAAA,EAC1B;AAAA,EACA,gBAA6B,IAAI,YAAY,CAAC;AAAA,SAKvC,MAMN,CAAC,OAAqB,CAAC,GAAqB;AAAA,IAC3C,OAAO,IAAI,MAAiB,MAAM,oBAAoB;AAAA;AAAA,EAMxD,WAAW,CAAC,OAA2B,CAAC,GAAG,oBAA4B;AAAA,IACrE,IAAI,uBAAuB,sBAAsB;AAAA,MAC/C,MAAM,IAAI,MACR,iFACF;AAAA,IACF;AAAA,IAEA,MAAM,SAAS,IAAI;AAAA,IACnB,KAAK,WAAW;AAAA,MACd,KAAK,KAAK,OAAO,CAAC;AAAA,MAClB,MAAM,IAAI;AAAA,MACV;AAAA,UACI,OAAO,GAAG;AAAA,QACZ,OAAO,OAAO;AAAA;AAAA,MAEhB,YAAY;AAAA,MACZ,KAAK,IAAI;AAAA,IACX;AAAA;AAAA,MAME,GAAG,GAAY;AAAA,IACjB,OAAO,KAAK,SAAS;AAAA;AAAA,MAMnB,OAAO,GAA0B;AAAA,IACnC,OAAO,KAAK;AAAA;AAAA,EAMd,MAAM,CAAC,OAAe,QAA4B;AAAA,IAChD,OAAO,UAAU;AAAA,IACjB,KAAK,SAAS,KAAK,MAAM;AAAA,IACzB,OAAO,KAAK,SAAS;AAAA;AAAA,EAMvB,QAAqB;AAAA,IAKnB,WAAW,MAAM;AAAA,MACf,MAAM,MAAM,KAAK,UAAU,KAAK,SAAS,GAAG;AAAA,MAC5C,MAAM,UAAU,IAAI;AAAA,MACpB,MAAM,YAAY,QAAQ,OAAO,GAAG;AAAA,MAEpC,OAAO;AAAA,QACL,MAAM,UAAU;AAAA,QAChB,OAAO,CAAC,QAAyB,QAAuB;AAAA,UACtD,MAAM,aAAa,IAAI,WAAW,QAAQ,KAAK,UAAU,UAAU;AAAA,UACnE,WAAW,IAAI,SAAS;AAAA;AAAA,MAE5B;AAAA;AAAA,IAOF,aAAa,CAAC,QAAQ,KAAK,QAAQ;AAAA,MACjC,MAAM,WAAW,IAAI,WAAW,QAAQ,KAAK,GAAG;AAAA,MAChD,MAAM,UAAU,IAAI;AAAA,MACpB,MAAM,MAAM,QAAQ,OAAO,QAAQ;AAAA,MAEnC,IAAI;AAAA,QACF,KAAK,SAAS,MAAM,KAAK,MAAM,GAAG;AAAA,QAClC,OAAO,GAAG;AAAA,QACV,QAAQ,MAAM,6BAA6B,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;AAAA;AAAA;AAAA,IAItE,WAAW,CAAC,WAAwB;AAAA,MAClC,KAAK,gBAAgB;AAAA;AAAA,IAIvB,YAAY,CAAC,QAAuB;AAAA,MAClC,IAAI,CAAC,KAAK,eAAe;AAAA,QACvB,MAAM,IAAI,MAAM,2CAA2C;AAAA,MAC7D;AAAA,MACA,MAAM,KAAK,IAAI,SAAS,KAAK,eAAe,GAAG;AAAA,MAC/C,MAAM,aAAa,GAAG,UAAU,iBAAiB,IAAI;AAAA,MACrD,MAAM,cAAc,GAAG,UAAU,kBAAkB,IAAI;AAAA,MACvD,MAAM,YAAY,GAAG,UAAU,gBAAgB,IAAI;AAAA,MAEnD,KAAK,SAAS,aAAa;AAAA,MAE3B,KAAK,SAAS,OAAO,WAAW,IAAI,SAClC,KAAK,eACL,WACF;AAAA,MACA,KAAK,SAAS,KAAK,WAAW,IAAI,SAChC,KAAK,eACL,UACF;AAAA,MACA,KAAK,SAAS,IAAI,WAAW,IAAI,SAAS,KAAK,eAAe,SAAS;AAAA;AAAA,IAGzE,iBAAiB,CAAC,eAAuB,QAAuB;AAAA,MAC9D,KAAK,MAAM,WAAW,GAAG;AAAA,MACzB,MAAM,KAAK,IAAI,SAAS,KAAK,eAAe,GAAG;AAAA,MAC/C,MAAM,YAAY,GAAG,UAAU,eAAe,IAAI;AAAA,MAClD,MAAM,iBAAiB,IAAI,SAAS,KAAK,eAAe,SAAS;AAAA,MAEjE,WAAW,UAAU,KAAK,UAAU;AAAA,QAClC,OAAO,SAAS,KAAK,QAAQ;AAAA,QAQ7B,MAAM,aAAa,eAAe,UAAU,GAAG,IAAI;AAAA,QACnD,IAAI,SAAS;AAAA,QAEb,SAAS,IAAI,EAAG,IAAI,YAAY,KAAK;AAAA,UAEnC,MAAM,YAAY,eAAe,SAAS,MAAM;AAAA,UAChD,MAAM,cAAc,eAAe,SAAS,SAAS,CAAC;AAAA,UACtD,MAAM,gBAAgB,SAAS;AAAA,UAC/B,MAAM,cAAc,eAAe,SAAS,aAAa;AAAA,UACzD,MAAM,cAAc;AAAA,YAClB,GAAG,eAAe,WAAW,eAAe,IAAI;AAAA,YAChD,GAAG,eAAe,WAChB,gBAAgB,aAAa,mBAC7B,IACF;AAAA,UACF;AAAA,UAEA,QAAQ;AAAA,iBACD,cAAM,UAAU,SAAS;AAAA,cAC5B,OAAO,UACL,YAA0B,KAAK,UAAU;AAAA,gBACvC,KAAK,aAAa,WAAW;AAAA,cAC/B,CAAC,CACH;AAAA,cACA;AAAA,YACF;AAAA,iBACK,cAAM,UAAU;AAAA,cACnB,OAAO,QACL,YAA0B,KAAK,UAAU;AAAA,gBACvC,KAAK,aAAa,WAAW;AAAA,cAC/B,CAAC,CACH;AAAA,cACA;AAAA,iBACG,cAAM,UAAU;AAAA,cACnB,OAAO,YACL,YAAkC,KAAK,UAAU;AAAA,gBAC/C,QAAQ,6BAA6B,WAAW;AAAA,cAClD,CAAC,CACH;AAAA,cACA;AAAA,iBACG,cAAM,UAAU;AAAA,cACnB,OAAO,UACL,YAAkC,KAAK,UAAU;AAAA,gBAC/C,QAAQ,6BAA6B,WAAW;AAAA,cAClD,CAAC,CACH;AAAA,cACA;AAAA,iBACG,cAAM,UAAU;AAAA,cACnB,OAAO,YACL,YAAgC,KAAK,UAAU;AAAA,gBAC7C,GAAG,YAAY;AAAA,gBACf,GAAG,YAAY;AAAA,cACjB,CAAC,CACH;AAAA,cACA;AAAA,iBACG,cAAM,UAAU;AAAA,cACnB,OAAO,aACL,YAAiC,KAAK,UAAU;AAAA,gBAC9C,GAAG,YAAY;AAAA,gBACf,GAAG,YAAY;AAAA,cACjB,CAAC,CACH;AAAA,cACA;AAAA,iBACG,cAAM,UAAU,WAAW;AAAA,cAE9B,MAAM,gBAA0B,CAAC;AAAA,cACjC,SAAS,IAAI,EAAG,IAAI,GAAG,KAAK;AAAA,gBAC1B,MAAM,OAAO,eAAe,SAAS,gBAAgB,CAAC;AAAA,gBACtD,IAAI,SAAS;AAAA,kBAAG;AAAA,gBAChB,cAAc,KAAK,IAAI;AAAA,cACzB;AAAA,cACA,MAAM,WAAW,OAAO,aAAa,GAAG,aAAa;AAAA,cACpD,KAAK,SAAiB,QAAQ;AAAA,gBAC7B,MAAM;AAAA,gBACN,MAAM,EAAE,SAAS;AAAA,cACnB;AAAA,cACA,OAAO,UACL,KAAK,QACP;AAAA,cACA;AAAA,YACF;AAAA,iBACK,cAAM,UAAU,aAAa;AAAA,cAEhC,MAAM,aAAa,eAAe,SAAS,aAAa;AAAA,cACxD,MAAM,UAAU;AAAA,gBACd;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,cACA,MAAM,SAAS,QAAQ,eAAe;AAAA,cACrC,KAAK,SAAiB,QAAQ;AAAA,gBAC7B,MAAM;AAAA,gBACN,MAAM,EAAE,OAAO;AAAA,cACjB;AAAA,cACA,OAAO,UACL,KAAK,QACP;AAAA,cACA;AAAA,YACF;AAAA,iBACK,cAAM,UAAU,aAAa;AAAA,cAChC,MAAM,SAAS,eAAe,SAAS,aAAa;AAAA,cACnD,KAAK,SAAiB,QAAQ;AAAA,gBAC7B,MAAM;AAAA,gBACN,MAAM,EAAE,OAAO;AAAA,cACjB;AAAA,cACA,OAAO,UACL,KAAK,QACP;AAAA,cACA;AAAA,YACF;AAAA,iBACK,cAAM,UAAU,cAAc;AAAA,cACjC,MAAM,SAAS,eAAe,SAAS,aAAa;AAAA,cACnD,KAAK,SAAiB,QAAQ;AAAA,gBAC7B,MAAM;AAAA,gBACN,MAAM,EAAE,OAAO;AAAA,cACjB;AAAA,cACA,OAAO,UACL,KAAK,QACP;AAAA,cACA;AAAA,YACF;AAAA;AAAA,cAIE;AAAA;AAAA,UAGJ,UAAU;AAAA,QACZ;AAAA,QACC,KAAK,SAAiB,QAAQ;AAAA,MACjC;AAAA;AAAA,EAEJ;AACF;AAEA,SAAS,WAA0D,CACjE,SACA,OAC6B;AAAA,EAC5B,QAAgB,QAAQ;AAAA,EACzB,OAAO;AAAA;",
12
- "debugId": "53D4C6C8E955612164756E2164756E21",
11
+ "mappings": "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;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,CAAC,GAAG;AAAA,IACN,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,EAAe;AAAA;AAAA,MAEnC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,SAAS,GAAG;AAAA,IACd,OAAO,KAAK,UAAU,EAAkB;AAAA;AAAA,MAEtC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,QAAQ,GAAG;AAAA,IACb,OAAO,KAAK,UAAU,EAAiB;AAAA;AAAA,MAErC,SAAS,GAAG;AAAA,IACd,OAAO,KAAK,UAAU,EAAkB;AAAA;AAAA,MAEtC,QAAQ,GAAG;AAAA,IACb,OAAO,KAAK,UAAU,EAAiB;AAAA;AAAA,MAErC,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,EAAoB;AAAA;AAAA,MAExC,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,EAAoB;AAAA;AAAA,MAExC,YAAY,GAAG;AAAA,IACjB,OAAO,KAAK,UAAU,EAAqB;AAAA;AAAA,MAEzC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,QAAQ,GAAG;AAAA,IACb,OAAO,KAAK,UAAU,EAAiB;AAAA;AAAA,MAErC,SAAS,GAAG;AAAA,IACd,OAAO,KAAK,UAAU,EAAkB;AAAA;AAAA,MAEtC,SAAS,GAAG;AAAA,IACd,OAAO,KAAK,UAAU,EAAkB;AAAA;AAAA,MAEtC,UAAU,GAAG;AAAA,IACf,OAAO,KAAK,UAAU,EAAmB;AAAA;AAAA,MAEvC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,EAAY;AAAA;AAAA,MAEhC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,QAAQ,GAAG;AAAA,IACb,OAAO,KAAK,UAAU,EAAiB;AAAA;AAAA,MAErC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,EAAc;AAAA;AAAA,MAElC,UAAU,GAAG;AAAA,IACf,OAAO,KAAK,UAAU,EAAmB;AAAA;AAAA,MAEvC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,EAAe;AAAA;AAAA,MAEnC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,EAAY;AAAA;AAAA,MAEhC,IAAI,GAAG;AAAA,IACT,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,IAAI,GAAG;AAAA,IACT,OAAO,KAAK,UAAU,EAAa;AAAA;AAAA,MAEjC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,EAAe;AAAA;AAAA,MAEnC,QAAQ,GAAG;AAAA,IACb,OAAO,KAAK,UAAU,EAAiB;AAAA;AAAA,MAErC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,EAAe;AAAA;AAAA,MAEnC,SAAS,GAAG;AAAA,IACd,OAAO,KAAK,UAAU,EAAkB;AAAA;AAAA,MAEtC,SAAS,GAAG;AAAA,IACd,OAAO,KAAK,UAAU,EAAkB;AAAA;AAAA,MAEtC,UAAU,GAAG;AAAA,IACf,OAAO,KAAK,UAAU,EAAmB;AAAA;AAAA,MAEvC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,EAAgB;AAAA;AAAA,MAEpC,SAAS,GAAG;AAAA,IACd,OAAO,KAAK,UAAU,EAAkB;AAAA;AAAA,MAEtC,eAAe,GAAG;AAAA,IACpB,OAAO,KAAK,UAAU,EAAwB;AAAA;AAAA,MAE5C,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,EAAoB;AAAA;AAAA,MAExC,gBAAgB,GAAG;AAAA,IACrB,OAAO,KAAK,UAAU,EAAyB;AAAA;AAAA,MAE7C,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,EAAoB;AAAA;AAAA,MAExC,aAAa,GAAG;AAAA,IAClB,OAAO,KAAK,UAAU,GAAuB;AAAA;AAAA,MAE3C,YAAY,GAAG;AAAA,IACjB,OAAO,KAAK,UAAU,GAAsB;AAAA;AAAA,MAE1C,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,GAAqB;AAAA;AAAA,MAEzC,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,GAAqB;AAAA;AAAA,MAEzC,UAAU,GAAG;AAAA,IACf,OAAO,KAAK,UAAU,GAAoB;AAAA;AAAA,MAExC,eAAe,GAAG;AAAA,IACpB,OAAO,KAAK,UAAU,GAAyB;AAAA;AAAA,MAE7C,iBAAiB,GAAG;AAAA,IACtB,OAAO,KAAK,UAAU,GAA2B;AAAA;AAAA,MAE/C,kBAAkB,GAAG;AAAA,IACvB,OAAO,KAAK,UAAU,GAA4B;AAAA;AAAA,MAEhD,iBAAiB,GAAG;AAAA,IACtB,OAAO,KAAK,UAAU,GAA2B;AAAA;AAAA,MAE/C,oBAAoB,GAAG;AAAA,IACzB,OAAO,KAAK,UAAU,GAA8B;AAAA;AAAA,MAElD,cAAc,GAAG;AAAA,IACnB,OAAO,KAAK,UAAU,GAAwB;AAAA;AAAA,MAE5C,eAAe,GAAG;AAAA,IACpB,OAAO,KAAK,UAAU,GAAyB;AAAA;AAAA,MAE7C,gBAAgB,GAAG;AAAA,IACrB,OAAO,KAAK,UAAU,GAA0B;AAAA;AAAA,MAE9C,UAAU,GAAG;AAAA,IACf,OAAO,KAAK,UAAU,GAAoB;AAAA;AAAA,MAExC,cAAc,GAAG;AAAA,IACnB,OAAO,KAAK,UAAU,GAAwB;AAAA;AAAA,MAE5C,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,GAAgB;AAAA;AAAA,MAEpC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,GAAgB;AAAA;AAAA,MAEpC,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,GAAqB;AAAA;AAAA,MAEzC,UAAU,GAAG;AAAA,IACf,OAAO,KAAK,UAAU,GAAoB;AAAA;AAAA,MAExC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,GAAqB;AAAA;AAAA,MAEzC,gBAAgB,GAAG;AAAA,IACrB,OAAO,KAAK,UAAU,GAA0B;AAAA;AAAA,MAE9C,cAAc,GAAG;AAAA,IACnB,OAAO,KAAK,UAAU,GAAwB;AAAA;AAAA,MAE5C,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,GAAqB;AAAA;AAAA,MAEzC,cAAc,GAAG;AAAA,IACnB,OAAO,KAAK,UAAU,GAAwB;AAAA;AAAA,MAE5C,aAAa,GAAG;AAAA,IAClB,OAAO,KAAK,UAAU,GAAuB;AAAA;AAAA,MAE3C,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,GAAqB;AAAA;AAAA,MAEzC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,UAAU,GAAG;AAAA,IACf,OAAO,KAAK,UAAU,GAAoB;AAAA;AAAA,MAExC,UAAU,GAAG;AAAA,IACf,OAAO,KAAK,UAAU,GAAoB;AAAA;AAAA,MAExC,UAAU,GAAG;AAAA,IACf,OAAO,KAAK,UAAU,GAAoB;AAAA;AAAA,MAExC,cAAc,GAAG;AAAA,IACnB,OAAO,KAAK,UAAU,GAAwB;AAAA;AAAA,MAE5C,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK,UAAU,GAAqB;AAAA;AAAA,MAEzC,SAAS,GAAG;AAAA,IACd,OAAO,KAAK,UAAU,GAAmB;AAAA;AAAA,MAEvC,cAAc,GAAG;AAAA,IACnB,OAAO,KAAK,UAAU,GAAwB;AAAA;AAAA,MAE5C,kBAAkB,GAAG;AAAA,IACvB,OAAO,KAAK,UAAU,GAA4B;AAAA;AAAA,MAEhD,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,eAAe,GAAG;AAAA,IACpB,OAAO,KAAK,UAAU,GAAyB;AAAA;AAAA,MAE7C,eAAe,GAAG;AAAA,IACpB,OAAO,KAAK,UAAU,GAAyB;AAAA;AAAA,MAE7C,aAAa,GAAG;AAAA,IAClB,OAAO,KAAK,UAAU,GAAuB;AAAA;AAAA,MAE3C,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,GAAgB;AAAA;AAAA,MAEpC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,GAAgB;AAAA;AAAA,MAEpC,OAAO,GAAG;AAAA,IACZ,OAAO,KAAK,UAAU,GAAiB;AAAA;AAAA,MAErC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,IAAI,GAAG;AAAA,IACT,OAAO,KAAK,UAAU,GAAc;AAAA;AAAA,MAElC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,IAAI,GAAG;AAAA,IACT,OAAO,KAAK,UAAU,GAAc;AAAA;AAAA,MAElC,IAAI,GAAG;AAAA,IACT,OAAO,KAAK,UAAU,GAAc;AAAA;AAAA,MAElC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,KAAK,GAAG;AAAA,IACV,OAAO,KAAK,UAAU,GAAe;AAAA;AAAA,MAEnC,MAAM,GAAG;AAAA,IACX,OAAO,KAAK,UAAU,GAAgB;AAAA;AAAA,MAEpC,IAAI,GAAG;AAAA,IACT,OAAO,KAAK,UAAU,GAAc;AAAA;AAAA,MAElC,QAAQ,GAAG;AAAA,IACb,OAAO,KAAK,UAAU,GAAkB;AAAA;AAAA,MAEtC,QAAQ,GAAG;AAAA,IACb,OAAO,KAAK,UAAU,GAAkB;AAAA;AAAA,MAEtC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,EAAE,GAAG;AAAA,IACP,OAAO,KAAK,UAAU,GAAY;AAAA;AAAA,MAEhC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,MAEjC,GAAG,GAAG;AAAA,IACR,OAAO,KAAK,UAAU,GAAa;AAAA;AAAA,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",
12
+ "debugId": "86FA3B16C67B33F564756E2164756E21",
13
13
  "names": []
14
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,WAAW,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG9C;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,WAAW,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,KAAK,CACzB,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,WAAW,CAAC,CA+FtB;AAED,MAAM,MAAM,WAAW,GAAG,CACtB;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GACrB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAAE,CACvD,GAAG;IACF;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB;;OAEG;IACH,OAAO,CAAC,EAAE,GAAG,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,GAAG,CAAC;CACV,CAAC"}
1
+ {"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,WAAW,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG9C;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,WAAW,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,KAAK,CACzB,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,WAAW,CAAC,CAgGtB;AAED,MAAM,MAAM,WAAW,GAAG,CACtB;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GACrB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAAE,CACvD,GAAG;IACF;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB;;OAEG;IACH,OAAO,CAAC,EAAE,GAAG,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,GAAG,CAAC;CACV,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bloopjs/bloop",
3
- "version": "0.0.88",
3
+ "version": "0.0.89",
4
4
  "author": "Neil Sarkar",
5
5
  "type": "module",
6
6
  "repository": {
@@ -35,7 +35,7 @@
35
35
  "@types/bun": "latest"
36
36
  },
37
37
  "dependencies": {
38
- "@bloopjs/engine": "0.0.88"
38
+ "@bloopjs/engine": "0.0.89"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "typescript": "^5"
package/src/bloop.ts CHANGED
@@ -152,7 +152,6 @@ export class Bloop<GS extends BloopSchema> {
152
152
  this.#engineBuffer = buffer;
153
153
  },
154
154
 
155
- // TODO - move this to engine
156
155
  setContext: (ptr: EnginePointer) => {
157
156
  if (!this.#engineBuffer) {
158
157
  throw new Error("Tried to set context before engine buffer");
@@ -163,16 +162,37 @@ export class Bloop<GS extends BloopSchema> {
163
162
  const netCtxPtr = dv.getUint32(NET_CTX_OFFSET, true);
164
163
 
165
164
  this.#context.rawPointer = ptr;
166
- // TODO - only rebuild these if the buffer has changed due to memory growth or the pointers have changed
167
- this.#context.inputs.dataView = new DataView(
168
- this.#engineBuffer,
169
- inputCtxPtr,
170
- );
171
- this.#context.time.dataView = new DataView(
172
- this.#engineBuffer,
173
- timeCtxPtr,
174
- );
175
- this.#context.net.dataView = new DataView(this.#engineBuffer, netCtxPtr);
165
+
166
+ if (
167
+ !this.#context.inputs.hasDataView() ||
168
+ this.#context.inputs.dataView.buffer !== this.#engineBuffer ||
169
+ this.#context.inputs.dataView.byteOffset !== inputCtxPtr
170
+ ) {
171
+ this.#context.inputs.dataView = new DataView(
172
+ this.#engineBuffer,
173
+ inputCtxPtr,
174
+ );
175
+ }
176
+
177
+ if (
178
+ this.#context.time.dataView?.buffer !== this.#engineBuffer ||
179
+ this.#context.time.dataView?.byteOffset !== timeCtxPtr
180
+ ) {
181
+ this.#context.time.dataView = new DataView(
182
+ this.#engineBuffer,
183
+ timeCtxPtr,
184
+ );
185
+ }
186
+
187
+ if (
188
+ this.#context.net.dataView?.buffer !== this.#engineBuffer ||
189
+ this.#context.net.dataView?.byteOffset !== netCtxPtr
190
+ ) {
191
+ this.#context.net.dataView = new DataView(
192
+ this.#engineBuffer,
193
+ netCtxPtr,
194
+ );
195
+ }
176
196
  },
177
197
 
178
198
  systemsCallback: (system_handle: number, ptr: EnginePointer) => {
@@ -313,6 +333,15 @@ export class Bloop<GS extends BloopSchema> {
313
333
  );
314
334
  break;
315
335
  }
336
+ case Enums.EventType.NetSessionInit:
337
+ console.log("[bloop] NetSessionInit event received");
338
+ (this.#context as any).event = {
339
+ type: "session:start",
340
+ };
341
+ system.netcode?.(
342
+ this.#context as Context<GS> & { event: NetEvent },
343
+ );
344
+ break;
316
345
  default:
317
346
  // Session lifecycle and other internal events are handled by engine
318
347
  // They don't need to be dispatched to game systems
package/src/mount.ts CHANGED
@@ -47,6 +47,7 @@ export async function mount(
47
47
  memory,
48
48
  __systems: function (system_handle: number, ptr: number) {
49
49
  mountable.hooks.setBuffer(memory.buffer);
50
+ mountable.hooks.setContext(ptr);
50
51
  mountable.hooks.systemsCallback(system_handle, ptr);
51
52
  },
52
53
  __before_frame: function (ptr: EnginePointer, frame: number) {