@latticexyz/cli 2.0.0-alpha.78 → 2.0.0-alpha.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/{chunk-TPZUS44H.js → chunk-6V563IAZ.js} +5 -5
  2. package/dist/{chunk-O6HOO6WA.js → chunk-L4YLJHLJ.js} +1 -9
  3. package/dist/{chunk-TLEAEDUA.js → chunk-QAJBBYA2.js} +357 -224
  4. package/dist/{chunk-KPBNUPK6.js → chunk-SKNB74MT.js} +155 -159
  5. package/dist/chunk-VQTZJIFF.js +353 -0
  6. package/dist/{chunk-DO7OWTMM.js → chunk-WZFXLDPK.js} +7 -9
  7. package/dist/{chunk-XUNWAEP7.js → chunk-YL4GJLLL.js} +5345 -6628
  8. package/dist/index.d.ts +2 -4
  9. package/dist/index.js +0 -22
  10. package/dist/mud.js +311 -318
  11. package/dist/mud2.js +7 -9
  12. package/dist/render-solidity/index.d.ts +2 -3
  13. package/dist/render-solidity/index.js +3 -4
  14. package/dist/render-ts/index.d.ts +2 -3
  15. package/dist/render-ts/index.js +3 -4
  16. package/dist/utils/deprecated/index.js +2 -2
  17. package/dist/utils/index.d.ts +3 -15
  18. package/dist/utils/index.js +4 -15
  19. package/package.json +36 -37
  20. package/src/commands/deploy-v2.ts +8 -4
  21. package/src/commands/deprecated/test.ts +1 -1
  22. package/src/commands/gas-report.ts +54 -55
  23. package/src/commands/set-version.ts +39 -10
  24. package/src/commands/tablegen.ts +1 -1
  25. package/src/commands/tsgen.ts +1 -1
  26. package/src/commands/worldgen.ts +1 -2
  27. package/src/contracts/BulkUpload.sol +13 -20
  28. package/src/contracts/Deploy.sol +3 -3
  29. package/src/contracts/LibDeploy.sol +1 -1
  30. package/src/contracts/LibDeployStub.sol +1 -1
  31. package/src/index.ts +1 -15
  32. package/src/render-solidity/common.ts +4 -4
  33. package/src/render-solidity/renderTypesFromConfig.ts +1 -1
  34. package/src/render-solidity/tableOptions.ts +2 -2
  35. package/src/render-solidity/tablegen.ts +1 -1
  36. package/src/render-solidity/types.ts +1 -1
  37. package/src/render-solidity/userType.ts +1 -2
  38. package/src/render-solidity/worldgen.ts +3 -3
  39. package/src/render-ts/recsV1TableOptions.ts +2 -2
  40. package/src/render-ts/renderRecsV1Tables.ts +2 -2
  41. package/src/render-ts/tsgen.ts +1 -1
  42. package/src/render-ts/types.ts +1 -1
  43. package/src/utils/contractToInterface.ts +1 -1
  44. package/src/utils/deploy-v2.ts +79 -78
  45. package/src/utils/errors.ts +3 -23
  46. package/dist/chunk-5NC2OON2.js +0 -164
  47. package/dist/chunk-FFY7VTYB.js +0 -14358
  48. package/dist/chunk-MN3HYFJK.js +0 -442
  49. package/dist/config/index.d.ts +0 -409
  50. package/dist/config/index.js +0 -85
  51. package/dist/parseStoreConfig-8aa69ac9.d.ts +0 -377
  52. package/src/config/commonSchemas.ts +0 -34
  53. package/src/config/dynamicResolution.ts +0 -49
  54. package/src/config/index.ts +0 -24
  55. package/src/config/loadConfig.ts +0 -40
  56. package/src/config/loadStoreConfig.ts +0 -18
  57. package/src/config/parseStoreConfig.test-d.ts +0 -40
  58. package/src/config/parseStoreConfig.ts +0 -317
  59. package/src/config/validation.ts +0 -163
  60. package/src/config/world/index.ts +0 -4
  61. package/src/config/world/loadWorldConfig.test-d.ts +0 -11
  62. package/src/config/world/loadWorldConfig.ts +0 -26
  63. package/src/config/world/parseWorldConfig.ts +0 -56
  64. package/src/config/world/resolveWorldConfig.ts +0 -80
  65. package/src/config/world/userTypes.ts +0 -74
  66. package/src/utils/typeUtils.ts +0 -17
@@ -1,15 +1,10 @@
1
1
  import {
2
- deploy
3
- } from "./chunk-XUNWAEP7.js";
4
- import {
5
- MUDError,
6
- loadStoreConfig,
7
- loadWorldConfig,
2
+ deploy,
8
3
  logError
9
- } from "./chunk-MN3HYFJK.js";
4
+ } from "./chunk-YL4GJLLL.js";
10
5
  import {
11
6
  execLog
12
- } from "./chunk-FFY7VTYB.js";
7
+ } from "./chunk-VQTZJIFF.js";
13
8
  import {
14
9
  anvil,
15
10
  forge,
@@ -22,21 +17,21 @@ import {
22
17
  renderList,
23
18
  renderedSolidityHeader,
24
19
  tablegen
25
- } from "./chunk-DO7OWTMM.js";
20
+ } from "./chunk-WZFXLDPK.js";
26
21
  import {
27
22
  tsgen
28
- } from "./chunk-TPZUS44H.js";
23
+ } from "./chunk-6V563IAZ.js";
29
24
  import {
30
25
  formatAndWriteSolidity
31
- } from "./chunk-5NC2OON2.js";
26
+ } from "./chunk-SKNB74MT.js";
32
27
  import {
33
28
  __commonJS,
34
29
  __toESM
35
- } from "./chunk-O6HOO6WA.js";
30
+ } from "./chunk-L4YLJHLJ.js";
36
31
 
37
- // ../../node_modules/@protobufjs/aspromise/index.js
32
+ // ../../node_modules/.pnpm/@protobufjs+aspromise@1.1.2/node_modules/@protobufjs/aspromise/index.js
38
33
  var require_aspromise = __commonJS({
39
- "../../node_modules/@protobufjs/aspromise/index.js"(exports2, module2) {
34
+ "../../node_modules/.pnpm/@protobufjs+aspromise@1.1.2/node_modules/@protobufjs/aspromise/index.js"(exports2, module2) {
40
35
  "use strict";
41
36
  module2.exports = asPromise;
42
37
  function asPromise(fn, ctx) {
@@ -70,9 +65,9 @@ var require_aspromise = __commonJS({
70
65
  }
71
66
  });
72
67
 
73
- // ../../node_modules/@protobufjs/base64/index.js
68
+ // ../../node_modules/.pnpm/@protobufjs+base64@1.1.2/node_modules/@protobufjs/base64/index.js
74
69
  var require_base64 = __commonJS({
75
- "../../node_modules/@protobufjs/base64/index.js"(exports2) {
70
+ "../../node_modules/.pnpm/@protobufjs+base64@1.1.2/node_modules/@protobufjs/base64/index.js"(exports2) {
76
71
  "use strict";
77
72
  var base64 = exports2;
78
73
  base64.length = function length(string) {
@@ -170,9 +165,9 @@ var require_base64 = __commonJS({
170
165
  }
171
166
  });
172
167
 
173
- // ../../node_modules/@protobufjs/eventemitter/index.js
168
+ // ../../node_modules/.pnpm/@protobufjs+eventemitter@1.1.0/node_modules/@protobufjs/eventemitter/index.js
174
169
  var require_eventemitter = __commonJS({
175
- "../../node_modules/@protobufjs/eventemitter/index.js"(exports2, module2) {
170
+ "../../node_modules/.pnpm/@protobufjs+eventemitter@1.1.0/node_modules/@protobufjs/eventemitter/index.js"(exports2, module2) {
176
171
  "use strict";
177
172
  module2.exports = EventEmitter;
178
173
  function EventEmitter() {
@@ -216,9 +211,9 @@ var require_eventemitter = __commonJS({
216
211
  }
217
212
  });
218
213
 
219
- // ../../node_modules/@protobufjs/float/index.js
214
+ // ../../node_modules/.pnpm/@protobufjs+float@1.0.2/node_modules/@protobufjs/float/index.js
220
215
  var require_float = __commonJS({
221
- "../../node_modules/@protobufjs/float/index.js"(exports2, module2) {
216
+ "../../node_modules/.pnpm/@protobufjs+float@1.0.2/node_modules/@protobufjs/float/index.js"(exports2, module2) {
222
217
  "use strict";
223
218
  module2.exports = factory(factory);
224
219
  function factory(exports3) {
@@ -414,9 +409,9 @@ var require_float = __commonJS({
414
409
  }
415
410
  });
416
411
 
417
- // ../../node_modules/@protobufjs/inquire/index.js
412
+ // ../../node_modules/.pnpm/@protobufjs+inquire@1.1.0/node_modules/@protobufjs/inquire/index.js
418
413
  var require_inquire = __commonJS({
419
- "../../node_modules/@protobufjs/inquire/index.js"(exports, module) {
414
+ "../../node_modules/.pnpm/@protobufjs+inquire@1.1.0/node_modules/@protobufjs/inquire/index.js"(exports, module) {
420
415
  "use strict";
421
416
  module.exports = inquire;
422
417
  function inquire(moduleName) {
@@ -431,9 +426,9 @@ var require_inquire = __commonJS({
431
426
  }
432
427
  });
433
428
 
434
- // ../../node_modules/@protobufjs/utf8/index.js
429
+ // ../../node_modules/.pnpm/@protobufjs+utf8@1.1.0/node_modules/@protobufjs/utf8/index.js
435
430
  var require_utf8 = __commonJS({
436
- "../../node_modules/@protobufjs/utf8/index.js"(exports2) {
431
+ "../../node_modules/.pnpm/@protobufjs+utf8@1.1.0/node_modules/@protobufjs/utf8/index.js"(exports2) {
437
432
  "use strict";
438
433
  var utf8 = exports2;
439
434
  utf8.length = function utf8_length(string) {
@@ -508,9 +503,9 @@ var require_utf8 = __commonJS({
508
503
  }
509
504
  });
510
505
 
511
- // ../../node_modules/@protobufjs/pool/index.js
506
+ // ../../node_modules/.pnpm/@protobufjs+pool@1.1.0/node_modules/@protobufjs/pool/index.js
512
507
  var require_pool = __commonJS({
513
- "../../node_modules/@protobufjs/pool/index.js"(exports2, module2) {
508
+ "../../node_modules/.pnpm/@protobufjs+pool@1.1.0/node_modules/@protobufjs/pool/index.js"(exports2, module2) {
514
509
  "use strict";
515
510
  module2.exports = pool;
516
511
  function pool(alloc, slice, size) {
@@ -534,9 +529,9 @@ var require_pool = __commonJS({
534
529
  }
535
530
  });
536
531
 
537
- // ../services/node_modules/protobufjs/src/util/longbits.js
532
+ // ../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/util/longbits.js
538
533
  var require_longbits = __commonJS({
539
- "../services/node_modules/protobufjs/src/util/longbits.js"(exports2, module2) {
534
+ "../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/util/longbits.js"(exports2, module2) {
540
535
  "use strict";
541
536
  module2.exports = LongBits;
542
537
  var util = require_minimal();
@@ -636,9 +631,9 @@ var require_longbits = __commonJS({
636
631
  }
637
632
  });
638
633
 
639
- // ../services/node_modules/protobufjs/src/util/minimal.js
634
+ // ../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/util/minimal.js
640
635
  var require_minimal = __commonJS({
641
- "../services/node_modules/protobufjs/src/util/minimal.js"(exports2) {
636
+ "../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/util/minimal.js"(exports2) {
642
637
  "use strict";
643
638
  var util = exports2;
644
639
  util.asPromise = require_aspromise();
@@ -746,7 +741,7 @@ var require_minimal = __commonJS({
746
741
  configurable: true
747
742
  },
748
743
  name: {
749
- get() {
744
+ get: function get() {
750
745
  return name;
751
746
  },
752
747
  set: void 0,
@@ -758,7 +753,7 @@ var require_minimal = __commonJS({
758
753
  configurable: true
759
754
  },
760
755
  toString: {
761
- value() {
756
+ value: function value() {
762
757
  return this.name + ": " + this.message;
763
758
  },
764
759
  writable: true,
@@ -811,9 +806,9 @@ var require_minimal = __commonJS({
811
806
  }
812
807
  });
813
808
 
814
- // ../services/node_modules/protobufjs/src/writer.js
809
+ // ../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/writer.js
815
810
  var require_writer = __commonJS({
816
- "../services/node_modules/protobufjs/src/writer.js"(exports2, module2) {
811
+ "../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/writer.js"(exports2, module2) {
817
812
  "use strict";
818
813
  module2.exports = Writer;
819
814
  var util = require_minimal();
@@ -1002,9 +997,9 @@ var require_writer = __commonJS({
1002
997
  }
1003
998
  });
1004
999
 
1005
- // ../services/node_modules/protobufjs/src/writer_buffer.js
1000
+ // ../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/writer_buffer.js
1006
1001
  var require_writer_buffer = __commonJS({
1007
- "../services/node_modules/protobufjs/src/writer_buffer.js"(exports2, module2) {
1002
+ "../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/writer_buffer.js"(exports2, module2) {
1008
1003
  "use strict";
1009
1004
  module2.exports = BufferWriter;
1010
1005
  var Writer = require_writer();
@@ -1053,9 +1048,9 @@ var require_writer_buffer = __commonJS({
1053
1048
  }
1054
1049
  });
1055
1050
 
1056
- // ../services/node_modules/protobufjs/src/reader.js
1051
+ // ../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/reader.js
1057
1052
  var require_reader = __commonJS({
1058
- "../services/node_modules/protobufjs/src/reader.js"(exports2, module2) {
1053
+ "../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/reader.js"(exports2, module2) {
1059
1054
  "use strict";
1060
1055
  module2.exports = Reader;
1061
1056
  var util = require_minimal();
@@ -1277,9 +1272,9 @@ var require_reader = __commonJS({
1277
1272
  }
1278
1273
  });
1279
1274
 
1280
- // ../services/node_modules/protobufjs/src/reader_buffer.js
1275
+ // ../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/reader_buffer.js
1281
1276
  var require_reader_buffer = __commonJS({
1282
- "../services/node_modules/protobufjs/src/reader_buffer.js"(exports2, module2) {
1277
+ "../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/reader_buffer.js"(exports2, module2) {
1283
1278
  "use strict";
1284
1279
  module2.exports = BufferReader;
1285
1280
  var Reader = require_reader();
@@ -1300,9 +1295,9 @@ var require_reader_buffer = __commonJS({
1300
1295
  }
1301
1296
  });
1302
1297
 
1303
- // ../services/node_modules/protobufjs/src/rpc/service.js
1298
+ // ../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/rpc/service.js
1304
1299
  var require_service = __commonJS({
1305
- "../services/node_modules/protobufjs/src/rpc/service.js"(exports2, module2) {
1300
+ "../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/rpc/service.js"(exports2, module2) {
1306
1301
  "use strict";
1307
1302
  module2.exports = Service;
1308
1303
  var util = require_minimal();
@@ -1375,26 +1370,26 @@ var require_service = __commonJS({
1375
1370
  }
1376
1371
  });
1377
1372
 
1378
- // ../services/node_modules/protobufjs/src/rpc.js
1373
+ // ../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/rpc.js
1379
1374
  var require_rpc = __commonJS({
1380
- "../services/node_modules/protobufjs/src/rpc.js"(exports2) {
1375
+ "../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/rpc.js"(exports2) {
1381
1376
  "use strict";
1382
1377
  var rpc = exports2;
1383
1378
  rpc.Service = require_service();
1384
1379
  }
1385
1380
  });
1386
1381
 
1387
- // ../services/node_modules/protobufjs/src/roots.js
1382
+ // ../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/roots.js
1388
1383
  var require_roots = __commonJS({
1389
- "../services/node_modules/protobufjs/src/roots.js"(exports2, module2) {
1384
+ "../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/roots.js"(exports2, module2) {
1390
1385
  "use strict";
1391
1386
  module2.exports = {};
1392
1387
  }
1393
1388
  });
1394
1389
 
1395
- // ../services/node_modules/protobufjs/src/index-minimal.js
1390
+ // ../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/index-minimal.js
1396
1391
  var require_index_minimal = __commonJS({
1397
- "../services/node_modules/protobufjs/src/index-minimal.js"(exports2) {
1392
+ "../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/src/index-minimal.js"(exports2) {
1398
1393
  "use strict";
1399
1394
  var protobuf = exports2;
1400
1395
  protobuf.build = "minimal";
@@ -1415,9 +1410,9 @@ var require_index_minimal = __commonJS({
1415
1410
  }
1416
1411
  });
1417
1412
 
1418
- // ../services/node_modules/protobufjs/minimal.js
1413
+ // ../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/minimal.js
1419
1414
  var require_minimal2 = __commonJS({
1420
- "../services/node_modules/protobufjs/minimal.js"(exports2, module2) {
1415
+ "../../node_modules/.pnpm/protobufjs@7.2.3/node_modules/protobufjs/minimal.js"(exports2, module2) {
1421
1416
  "use strict";
1422
1417
  module2.exports = require_index_minimal();
1423
1418
  }
@@ -1450,7 +1445,7 @@ var commandModule = {
1450
1445
  };
1451
1446
  var devnode_default = commandModule;
1452
1447
 
1453
- // ../services/node_modules/long/index.js
1448
+ // ../../node_modules/.pnpm/long@5.2.1/node_modules/long/index.js
1454
1449
  var wasm = null;
1455
1450
  try {
1456
1451
  wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([
@@ -2366,25 +2361,35 @@ var LinkedTwitterPair = {
2366
2361
  return writer;
2367
2362
  },
2368
2363
  decode(input, length) {
2369
- const reader = input instanceof import_minimal.default.Reader ? input : new import_minimal.default.Reader(input);
2364
+ const reader = input instanceof import_minimal.default.Reader ? input : import_minimal.default.Reader.create(input);
2370
2365
  let end = length === void 0 ? reader.len : reader.pos + length;
2371
2366
  const message = createBaseLinkedTwitterPair();
2372
2367
  while (reader.pos < end) {
2373
2368
  const tag = reader.uint32();
2374
2369
  switch (tag >>> 3) {
2375
2370
  case 1:
2371
+ if (tag != 10) {
2372
+ break;
2373
+ }
2376
2374
  message.username = reader.string();
2377
- break;
2375
+ continue;
2378
2376
  case 2:
2377
+ if (tag != 18) {
2378
+ break;
2379
+ }
2379
2380
  message.address = reader.string();
2380
- break;
2381
- default:
2382
- reader.skipType(tag & 7);
2383
- break;
2381
+ continue;
2382
+ }
2383
+ if ((tag & 7) == 4 || tag == 0) {
2384
+ break;
2384
2385
  }
2386
+ reader.skipType(tag & 7);
2385
2387
  }
2386
2388
  return message;
2387
2389
  },
2390
+ create(base) {
2391
+ return LinkedTwitterPair.fromPartial(base ?? {});
2392
+ },
2388
2393
  fromPartial(object) {
2389
2394
  const message = createBaseLinkedTwitterPair();
2390
2395
  message.username = object.username ?? "";
@@ -2406,25 +2411,35 @@ var DripRequest = {
2406
2411
  return writer;
2407
2412
  },
2408
2413
  decode(input, length) {
2409
- const reader = input instanceof import_minimal.default.Reader ? input : new import_minimal.default.Reader(input);
2414
+ const reader = input instanceof import_minimal.default.Reader ? input : import_minimal.default.Reader.create(input);
2410
2415
  let end = length === void 0 ? reader.len : reader.pos + length;
2411
2416
  const message = createBaseDripRequest();
2412
2417
  while (reader.pos < end) {
2413
2418
  const tag = reader.uint32();
2414
2419
  switch (tag >>> 3) {
2415
2420
  case 1:
2421
+ if (tag != 10) {
2422
+ break;
2423
+ }
2416
2424
  message.username = reader.string();
2417
- break;
2425
+ continue;
2418
2426
  case 2:
2427
+ if (tag != 18) {
2428
+ break;
2429
+ }
2419
2430
  message.address = reader.string();
2420
- break;
2421
- default:
2422
- reader.skipType(tag & 7);
2423
- break;
2431
+ continue;
2432
+ }
2433
+ if ((tag & 7) == 4 || tag == 0) {
2434
+ break;
2424
2435
  }
2436
+ reader.skipType(tag & 7);
2425
2437
  }
2426
2438
  return message;
2427
2439
  },
2440
+ create(base) {
2441
+ return DripRequest.fromPartial(base ?? {});
2442
+ },
2428
2443
  fromPartial(object) {
2429
2444
  const message = createBaseDripRequest();
2430
2445
  message.username = object.username ?? "";
@@ -2443,22 +2458,29 @@ var DripDevRequest = {
2443
2458
  return writer;
2444
2459
  },
2445
2460
  decode(input, length) {
2446
- const reader = input instanceof import_minimal.default.Reader ? input : new import_minimal.default.Reader(input);
2461
+ const reader = input instanceof import_minimal.default.Reader ? input : import_minimal.default.Reader.create(input);
2447
2462
  let end = length === void 0 ? reader.len : reader.pos + length;
2448
2463
  const message = createBaseDripDevRequest();
2449
2464
  while (reader.pos < end) {
2450
2465
  const tag = reader.uint32();
2451
2466
  switch (tag >>> 3) {
2452
2467
  case 1:
2468
+ if (tag != 10) {
2469
+ break;
2470
+ }
2453
2471
  message.address = reader.string();
2454
- break;
2455
- default:
2456
- reader.skipType(tag & 7);
2457
- break;
2472
+ continue;
2473
+ }
2474
+ if ((tag & 7) == 4 || tag == 0) {
2475
+ break;
2458
2476
  }
2477
+ reader.skipType(tag & 7);
2459
2478
  }
2460
2479
  return message;
2461
2480
  },
2481
+ create(base) {
2482
+ return DripDevRequest.fromPartial(base ?? {});
2483
+ },
2462
2484
  fromPartial(object) {
2463
2485
  const message = createBaseDripDevRequest();
2464
2486
  message.address = object.address ?? "";
@@ -2479,25 +2501,35 @@ var DripResponse = {
2479
2501
  return writer;
2480
2502
  },
2481
2503
  decode(input, length) {
2482
- const reader = input instanceof import_minimal.default.Reader ? input : new import_minimal.default.Reader(input);
2504
+ const reader = input instanceof import_minimal.default.Reader ? input : import_minimal.default.Reader.create(input);
2483
2505
  let end = length === void 0 ? reader.len : reader.pos + length;
2484
2506
  const message = createBaseDripResponse();
2485
2507
  while (reader.pos < end) {
2486
2508
  const tag = reader.uint32();
2487
2509
  switch (tag >>> 3) {
2488
2510
  case 1:
2511
+ if (tag != 10) {
2512
+ break;
2513
+ }
2489
2514
  message.dripTxHash = reader.string();
2490
- break;
2515
+ continue;
2491
2516
  case 2:
2517
+ if (tag != 18) {
2518
+ break;
2519
+ }
2492
2520
  message.ecsTxHash = reader.string();
2493
- break;
2494
- default:
2495
- reader.skipType(tag & 7);
2496
- break;
2521
+ continue;
2522
+ }
2523
+ if ((tag & 7) == 4 || tag == 0) {
2524
+ break;
2497
2525
  }
2526
+ reader.skipType(tag & 7);
2498
2527
  }
2499
2528
  return message;
2500
2529
  },
2530
+ create(base) {
2531
+ return DripResponse.fromPartial(base ?? {});
2532
+ },
2501
2533
  fromPartial(object) {
2502
2534
  const message = createBaseDripResponse();
2503
2535
  message.dripTxHash = object.dripTxHash ?? "";
@@ -2519,25 +2551,35 @@ var TimeUntilDripResponse = {
2519
2551
  return writer;
2520
2552
  },
2521
2553
  decode(input, length) {
2522
- const reader = input instanceof import_minimal.default.Reader ? input : new import_minimal.default.Reader(input);
2554
+ const reader = input instanceof import_minimal.default.Reader ? input : import_minimal.default.Reader.create(input);
2523
2555
  let end = length === void 0 ? reader.len : reader.pos + length;
2524
2556
  const message = createBaseTimeUntilDripResponse();
2525
2557
  while (reader.pos < end) {
2526
2558
  const tag = reader.uint32();
2527
2559
  switch (tag >>> 3) {
2528
2560
  case 1:
2561
+ if (tag != 9) {
2562
+ break;
2563
+ }
2529
2564
  message.timeUntilDripMinutes = reader.double();
2530
- break;
2565
+ continue;
2531
2566
  case 2:
2567
+ if (tag != 17) {
2568
+ break;
2569
+ }
2532
2570
  message.timeUntilDripSeconds = reader.double();
2533
- break;
2534
- default:
2535
- reader.skipType(tag & 7);
2536
- break;
2571
+ continue;
2572
+ }
2573
+ if ((tag & 7) == 4 || tag == 0) {
2574
+ break;
2537
2575
  }
2576
+ reader.skipType(tag & 7);
2538
2577
  }
2539
2578
  return message;
2540
2579
  },
2580
+ create(base) {
2581
+ return TimeUntilDripResponse.fromPartial(base ?? {});
2582
+ },
2541
2583
  fromPartial(object) {
2542
2584
  const message = createBaseTimeUntilDripResponse();
2543
2585
  message.timeUntilDripMinutes = object.timeUntilDripMinutes ?? 0;
@@ -2553,19 +2595,23 @@ var GetLinkedTwittersRequest = {
2553
2595
  return writer;
2554
2596
  },
2555
2597
  decode(input, length) {
2556
- const reader = input instanceof import_minimal.default.Reader ? input : new import_minimal.default.Reader(input);
2598
+ const reader = input instanceof import_minimal.default.Reader ? input : import_minimal.default.Reader.create(input);
2557
2599
  let end = length === void 0 ? reader.len : reader.pos + length;
2558
2600
  const message = createBaseGetLinkedTwittersRequest();
2559
2601
  while (reader.pos < end) {
2560
2602
  const tag = reader.uint32();
2561
2603
  switch (tag >>> 3) {
2562
- default:
2563
- reader.skipType(tag & 7);
2564
- break;
2565
2604
  }
2605
+ if ((tag & 7) == 4 || tag == 0) {
2606
+ break;
2607
+ }
2608
+ reader.skipType(tag & 7);
2566
2609
  }
2567
2610
  return message;
2568
2611
  },
2612
+ create(base) {
2613
+ return GetLinkedTwittersRequest.fromPartial(base ?? {});
2614
+ },
2569
2615
  fromPartial(_) {
2570
2616
  const message = createBaseGetLinkedTwittersRequest();
2571
2617
  return message;
@@ -2582,22 +2628,29 @@ var GetLinkedTwittersResponse = {
2582
2628
  return writer;
2583
2629
  },
2584
2630
  decode(input, length) {
2585
- const reader = input instanceof import_minimal.default.Reader ? input : new import_minimal.default.Reader(input);
2631
+ const reader = input instanceof import_minimal.default.Reader ? input : import_minimal.default.Reader.create(input);
2586
2632
  let end = length === void 0 ? reader.len : reader.pos + length;
2587
2633
  const message = createBaseGetLinkedTwittersResponse();
2588
2634
  while (reader.pos < end) {
2589
2635
  const tag = reader.uint32();
2590
2636
  switch (tag >>> 3) {
2591
2637
  case 1:
2638
+ if (tag != 10) {
2639
+ break;
2640
+ }
2592
2641
  message.linkedTwitters.push(LinkedTwitterPair.decode(reader, reader.uint32()));
2593
- break;
2594
- default:
2595
- reader.skipType(tag & 7);
2596
- break;
2642
+ continue;
2643
+ }
2644
+ if ((tag & 7) == 4 || tag == 0) {
2645
+ break;
2597
2646
  }
2647
+ reader.skipType(tag & 7);
2598
2648
  }
2599
2649
  return message;
2600
2650
  },
2651
+ create(base) {
2652
+ return GetLinkedTwittersResponse.fromPartial(base ?? {});
2653
+ },
2601
2654
  fromPartial(object) {
2602
2655
  const message = createBaseGetLinkedTwittersResponse();
2603
2656
  message.linkedTwitters = object.linkedTwitters?.map((e) => LinkedTwitterPair.fromPartial(e)) || [];
@@ -2615,22 +2668,29 @@ var LinkedTwitterForAddressRequest = {
2615
2668
  return writer;
2616
2669
  },
2617
2670
  decode(input, length) {
2618
- const reader = input instanceof import_minimal.default.Reader ? input : new import_minimal.default.Reader(input);
2671
+ const reader = input instanceof import_minimal.default.Reader ? input : import_minimal.default.Reader.create(input);
2619
2672
  let end = length === void 0 ? reader.len : reader.pos + length;
2620
2673
  const message = createBaseLinkedTwitterForAddressRequest();
2621
2674
  while (reader.pos < end) {
2622
2675
  const tag = reader.uint32();
2623
2676
  switch (tag >>> 3) {
2624
2677
  case 1:
2678
+ if (tag != 10) {
2679
+ break;
2680
+ }
2625
2681
  message.address = reader.string();
2626
- break;
2627
- default:
2628
- reader.skipType(tag & 7);
2629
- break;
2682
+ continue;
2683
+ }
2684
+ if ((tag & 7) == 4 || tag == 0) {
2685
+ break;
2630
2686
  }
2687
+ reader.skipType(tag & 7);
2631
2688
  }
2632
2689
  return message;
2633
2690
  },
2691
+ create(base) {
2692
+ return LinkedTwitterForAddressRequest.fromPartial(base ?? {});
2693
+ },
2634
2694
  fromPartial(object) {
2635
2695
  const message = createBaseLinkedTwitterForAddressRequest();
2636
2696
  message.address = object.address ?? "";
@@ -2648,22 +2708,29 @@ var LinkedTwitterForAddressResponse = {
2648
2708
  return writer;
2649
2709
  },
2650
2710
  decode(input, length) {
2651
- const reader = input instanceof import_minimal.default.Reader ? input : new import_minimal.default.Reader(input);
2711
+ const reader = input instanceof import_minimal.default.Reader ? input : import_minimal.default.Reader.create(input);
2652
2712
  let end = length === void 0 ? reader.len : reader.pos + length;
2653
2713
  const message = createBaseLinkedTwitterForAddressResponse();
2654
2714
  while (reader.pos < end) {
2655
2715
  const tag = reader.uint32();
2656
2716
  switch (tag >>> 3) {
2657
2717
  case 1:
2718
+ if (tag != 10) {
2719
+ break;
2720
+ }
2658
2721
  message.username = reader.string();
2659
- break;
2660
- default:
2661
- reader.skipType(tag & 7);
2662
- break;
2722
+ continue;
2723
+ }
2724
+ if ((tag & 7) == 4 || tag == 0) {
2725
+ break;
2663
2726
  }
2727
+ reader.skipType(tag & 7);
2664
2728
  }
2665
2729
  return message;
2666
2730
  },
2731
+ create(base) {
2732
+ return LinkedTwitterForAddressResponse.fromPartial(base ?? {});
2733
+ },
2667
2734
  fromPartial(object) {
2668
2735
  const message = createBaseLinkedTwitterForAddressResponse();
2669
2736
  message.username = object.username ?? "";
@@ -2681,22 +2748,29 @@ var LinkedAddressForTwitterRequest = {
2681
2748
  return writer;
2682
2749
  },
2683
2750
  decode(input, length) {
2684
- const reader = input instanceof import_minimal.default.Reader ? input : new import_minimal.default.Reader(input);
2751
+ const reader = input instanceof import_minimal.default.Reader ? input : import_minimal.default.Reader.create(input);
2685
2752
  let end = length === void 0 ? reader.len : reader.pos + length;
2686
2753
  const message = createBaseLinkedAddressForTwitterRequest();
2687
2754
  while (reader.pos < end) {
2688
2755
  const tag = reader.uint32();
2689
2756
  switch (tag >>> 3) {
2690
2757
  case 1:
2758
+ if (tag != 10) {
2759
+ break;
2760
+ }
2691
2761
  message.username = reader.string();
2692
- break;
2693
- default:
2694
- reader.skipType(tag & 7);
2695
- break;
2762
+ continue;
2763
+ }
2764
+ if ((tag & 7) == 4 || tag == 0) {
2765
+ break;
2696
2766
  }
2767
+ reader.skipType(tag & 7);
2697
2768
  }
2698
2769
  return message;
2699
2770
  },
2771
+ create(base) {
2772
+ return LinkedAddressForTwitterRequest.fromPartial(base ?? {});
2773
+ },
2700
2774
  fromPartial(object) {
2701
2775
  const message = createBaseLinkedAddressForTwitterRequest();
2702
2776
  message.username = object.username ?? "";
@@ -2714,22 +2788,29 @@ var LinkedAddressForTwitterResponse = {
2714
2788
  return writer;
2715
2789
  },
2716
2790
  decode(input, length) {
2717
- const reader = input instanceof import_minimal.default.Reader ? input : new import_minimal.default.Reader(input);
2791
+ const reader = input instanceof import_minimal.default.Reader ? input : import_minimal.default.Reader.create(input);
2718
2792
  let end = length === void 0 ? reader.len : reader.pos + length;
2719
2793
  const message = createBaseLinkedAddressForTwitterResponse();
2720
2794
  while (reader.pos < end) {
2721
2795
  const tag = reader.uint32();
2722
2796
  switch (tag >>> 3) {
2723
2797
  case 1:
2798
+ if (tag != 10) {
2799
+ break;
2800
+ }
2724
2801
  message.address = reader.string();
2725
- break;
2726
- default:
2727
- reader.skipType(tag & 7);
2728
- break;
2802
+ continue;
2803
+ }
2804
+ if ((tag & 7) == 4 || tag == 0) {
2805
+ break;
2729
2806
  }
2807
+ reader.skipType(tag & 7);
2730
2808
  }
2731
2809
  return message;
2732
2810
  },
2811
+ create(base) {
2812
+ return LinkedAddressForTwitterResponse.fromPartial(base ?? {});
2813
+ },
2733
2814
  fromPartial(object) {
2734
2815
  const message = createBaseLinkedAddressForTwitterResponse();
2735
2816
  message.address = object.address ?? "";
@@ -2753,28 +2834,41 @@ var SetLinkedTwitterRequest = {
2753
2834
  return writer;
2754
2835
  },
2755
2836
  decode(input, length) {
2756
- const reader = input instanceof import_minimal.default.Reader ? input : new import_minimal.default.Reader(input);
2837
+ const reader = input instanceof import_minimal.default.Reader ? input : import_minimal.default.Reader.create(input);
2757
2838
  let end = length === void 0 ? reader.len : reader.pos + length;
2758
2839
  const message = createBaseSetLinkedTwitterRequest();
2759
2840
  while (reader.pos < end) {
2760
2841
  const tag = reader.uint32();
2761
2842
  switch (tag >>> 3) {
2762
2843
  case 1:
2844
+ if (tag != 10) {
2845
+ break;
2846
+ }
2763
2847
  message.address = reader.string();
2764
- break;
2848
+ continue;
2765
2849
  case 2:
2850
+ if (tag != 18) {
2851
+ break;
2852
+ }
2766
2853
  message.username = reader.string();
2767
- break;
2854
+ continue;
2768
2855
  case 3:
2856
+ if (tag != 26) {
2857
+ break;
2858
+ }
2769
2859
  message.signature = reader.string();
2770
- break;
2771
- default:
2772
- reader.skipType(tag & 7);
2773
- break;
2860
+ continue;
2861
+ }
2862
+ if ((tag & 7) == 4 || tag == 0) {
2863
+ break;
2774
2864
  }
2865
+ reader.skipType(tag & 7);
2775
2866
  }
2776
2867
  return message;
2777
2868
  },
2869
+ create(base) {
2870
+ return SetLinkedTwitterRequest.fromPartial(base ?? {});
2871
+ },
2778
2872
  fromPartial(object) {
2779
2873
  const message = createBaseSetLinkedTwitterRequest();
2780
2874
  message.address = object.address ?? "";
@@ -2791,19 +2885,23 @@ var SetLinkedTwitterResponse = {
2791
2885
  return writer;
2792
2886
  },
2793
2887
  decode(input, length) {
2794
- const reader = input instanceof import_minimal.default.Reader ? input : new import_minimal.default.Reader(input);
2888
+ const reader = input instanceof import_minimal.default.Reader ? input : import_minimal.default.Reader.create(input);
2795
2889
  let end = length === void 0 ? reader.len : reader.pos + length;
2796
2890
  const message = createBaseSetLinkedTwitterResponse();
2797
2891
  while (reader.pos < end) {
2798
2892
  const tag = reader.uint32();
2799
2893
  switch (tag >>> 3) {
2800
- default:
2801
- reader.skipType(tag & 7);
2802
- break;
2803
2894
  }
2895
+ if ((tag & 7) == 4 || tag == 0) {
2896
+ break;
2897
+ }
2898
+ reader.skipType(tag & 7);
2804
2899
  }
2805
2900
  return message;
2806
2901
  },
2902
+ create(base) {
2903
+ return SetLinkedTwitterResponse.fromPartial(base ?? {});
2904
+ },
2807
2905
  fromPartial(_) {
2808
2906
  const message = createBaseSetLinkedTwitterResponse();
2809
2907
  return message;
@@ -2880,7 +2978,7 @@ var FaucetServiceDefinition = {
2880
2978
  }
2881
2979
  }
2882
2980
  };
2883
- var globalThis = (() => {
2981
+ var tsProtoGlobalThis = (() => {
2884
2982
  if (typeof globalThis !== "undefined") {
2885
2983
  return globalThis;
2886
2984
  }
@@ -2946,6 +3044,7 @@ import { readFileSync, writeFileSync, rmSync as rmSync2 } from "fs";
2946
3044
  import { execa } from "execa";
2947
3045
  import chalk2 from "chalk";
2948
3046
  import { table, getBorderCharacters } from "table";
3047
+ var tempFileSuffix = "MudGasReport";
2949
3048
  var commandModule3 = {
2950
3049
  command: "gas-report",
2951
3050
  describe: "Create a gas report",
@@ -2956,33 +3055,36 @@ var commandModule3 = {
2956
3055
  compare: { type: "string", desc: "Compare to an existing gas report" }
2957
3056
  });
2958
3057
  },
2959
- async handler({ path: path7, save, compare: compare2 }) {
2960
- let gasReport = [];
2961
- for (const file of path7) {
2962
- gasReport = gasReport.concat(await runGasReport(file));
3058
+ async handler({ path: files, save, compare: compare2 }) {
3059
+ const validFiles = files.filter((file) => file.endsWith(".t.sol"));
3060
+ const tempFiles = await Promise.all(validFiles.map((file) => createGasReport(file)));
3061
+ process.once("SIGINT", () => {
3062
+ console.log("caught sigint, deleting temp files");
3063
+ tempFiles.forEach((file) => rmSync2(file));
3064
+ });
3065
+ let gasReport;
3066
+ try {
3067
+ gasReport = await runGasReport();
3068
+ } catch {
3069
+ setTimeout(() => process.exit());
3070
+ return;
3071
+ } finally {
3072
+ tempFiles.forEach((file) => rmSync2(file));
2963
3073
  }
2964
- const compareGasReport = [];
2965
3074
  if (compare2) {
2966
3075
  try {
2967
- const compareFileContents = readFileSync(compare2, "utf8");
2968
- const compareGasReportRegex = new RegExp(/\((.*)\) \| (.*) \[(.*)\]: (.*)/g);
2969
- let compareGasReportMatch;
2970
- while ((compareGasReportMatch = compareGasReportRegex.exec(compareFileContents)) !== null) {
2971
- const source = compareGasReportMatch[1];
2972
- const name = compareGasReportMatch[2];
2973
- const functionCall = compareGasReportMatch[3];
2974
- const gasUsed = compareGasReportMatch[4];
2975
- compareGasReport.push({ source, name, functionCall, gasUsed: parseInt(gasUsed) });
2976
- }
3076
+ const compareGasReport = JSON.parse(readFileSync(compare2, "utf8"));
3077
+ gasReport = gasReport.map((entry) => {
3078
+ const prevEntry = compareGasReport.find(
3079
+ (e) => e.name === entry.name && e.functionCall === entry.functionCall
3080
+ );
3081
+ return { ...entry, prevGasUsed: prevEntry?.gasUsed };
3082
+ });
2977
3083
  } catch {
2978
3084
  console.log(chalk2.red(`Gas report to compare not found: ${compare2}`));
2979
3085
  compare2 = void 0;
2980
3086
  }
2981
3087
  }
2982
- gasReport = gasReport.map((entry) => {
2983
- const prevEntry = compareGasReport.find((e) => e.name === entry.name && e.functionCall === entry.functionCall);
2984
- return { ...entry, prevGasUsed: prevEntry?.gasUsed };
2985
- });
2986
3088
  printGasReport(gasReport, compare2);
2987
3089
  if (save)
2988
3090
  saveGasReport(gasReport, save);
@@ -2990,14 +3092,9 @@ var commandModule3 = {
2990
3092
  }
2991
3093
  };
2992
3094
  var gas_report_default = commandModule3;
2993
- async function runGasReport(path7) {
2994
- if (!path7.endsWith(".t.sol")) {
2995
- console.log("Skipping gas report for", chalk2.bold(path7), "(not a test file)");
2996
- return [];
2997
- }
2998
- console.log("Running gas report for", chalk2.bold(path7));
2999
- const gasReport = [];
3000
- const fileContents = readFileSync(path7, "utf8");
3095
+ async function createGasReport(filename) {
3096
+ console.log("Creating gas report for", chalk2.bold(filename));
3097
+ const fileContents = readFileSync(filename, "utf8");
3001
3098
  let newFile = fileContents;
3002
3099
  const functionRegex = new RegExp(/function (.*){/g);
3003
3100
  let functionMatch;
@@ -3017,33 +3114,38 @@ uint256 _gasreport;`);
3017
3114
  _gasreport = gasleft();
3018
3115
  ${functionCall}
3019
3116
  _gasreport = _gasreport - gasleft();
3020
- console.log("GAS REPORT: ${name} [${functionCall.replaceAll('"', '\\"')}]:", _gasreport);`
3117
+ console.log("GAS REPORT(${filename}): ${name} [${functionCall.replaceAll('"', '\\"')}]:", _gasreport);`
3021
3118
  );
3022
3119
  }
3023
3120
  newFile = newFile.replace(/pure/g, "view");
3024
- const tempFileName = path7.replace(/\.t\.sol$/, "MudGasReport.t.sol");
3121
+ const tempFileName = filename.replace(/\.t\.sol$/, `${tempFileSuffix}.t.sol`);
3025
3122
  writeFileSync(tempFileName, newFile);
3026
- const child = execa("forge", ["test", "--match-path", tempFileName, "-vvv"], {
3027
- stdio: ["inherit", "pipe", "inherit"]
3028
- });
3123
+ return tempFileName;
3124
+ }
3125
+ async function runGasReport() {
3126
+ console.log("Running gas report");
3127
+ const gasReport = [];
3029
3128
  let logs = "";
3030
3129
  try {
3130
+ const child = execa("forge", ["test", "--match-path", `*${tempFileSuffix}*`, "-vvv"], {
3131
+ stdio: ["inherit", "pipe", "inherit"]
3132
+ });
3031
3133
  logs = (await child).stdout;
3032
- rmSync2(tempFileName);
3033
- } catch (e) {
3034
- console.log(e.stdout ?? e);
3134
+ } catch (error) {
3135
+ console.log(error.stdout ?? error);
3035
3136
  console.log(chalk2.red("\n-----------\nError while running the gas report (see above)"));
3036
- rmSync2(tempFileName);
3037
- process.exit();
3137
+ throw error;
3038
3138
  }
3039
- const gasReportRegex = new RegExp(/GAS REPORT: (.*) \[(.*)\]: (.*)/g);
3139
+ const gasReportRegex = new RegExp(/GAS REPORT\((.*)\): (.*) \[(.*)\]: (.*)/g);
3040
3140
  let gasReportMatch;
3041
3141
  while ((gasReportMatch = gasReportRegex.exec(logs)) !== null) {
3042
- const name = gasReportMatch[1];
3043
- const functionCall = gasReportMatch[2].replace(";", "");
3044
- const gasUsed = gasReportMatch[3];
3045
- gasReport.push({ source: path7, name, functionCall, gasUsed: parseInt(gasUsed) });
3142
+ const source = gasReportMatch[1];
3143
+ const name = gasReportMatch[2];
3144
+ const functionCall = gasReportMatch[3].replace(";", "");
3145
+ const gasUsed = parseInt(gasReportMatch[4]);
3146
+ gasReport.push({ source, name, functionCall, gasUsed });
3046
3147
  }
3148
+ gasReport.sort((a, b) => a.source.localeCompare(b.source));
3047
3149
  return gasReport;
3048
3150
  }
3049
3151
  function printGasReport(gasReport, compare2) {
@@ -3068,8 +3170,8 @@ function printGasReport(gasReport, compare2) {
3068
3170
  }
3069
3171
  function saveGasReport(gasReport, path7) {
3070
3172
  console.log(chalk2.bold(`Saving gas report to ${path7}`));
3071
- const serializedGasReport = gasReport.map((entry) => `(${entry.source}) | ${entry.name} [${entry.functionCall}]: ${entry.gasUsed}`).join("\n");
3072
- writeFileSync(path7, serializedGasReport);
3173
+ writeFileSync(path7, `${JSON.stringify(gasReport, null, 2)}
3174
+ `);
3073
3175
  }
3074
3176
 
3075
3177
  // src/commands/hello.ts
@@ -3091,6 +3193,7 @@ var hello_default = commandModule4;
3091
3193
 
3092
3194
  // src/commands/tablegen.ts
3093
3195
  import path2 from "path";
3196
+ import { loadStoreConfig } from "@latticexyz/config";
3094
3197
  var commandModule5 = {
3095
3198
  command: "tablegen",
3096
3199
  describe: "Autogenerate MUD Store table libraries based on the config file",
@@ -3109,6 +3212,7 @@ var commandModule5 = {
3109
3212
  var tablegen_default = commandModule5;
3110
3213
 
3111
3214
  // src/commands/tsgen.ts
3215
+ import { loadStoreConfig as loadStoreConfig2 } from "@latticexyz/config";
3112
3216
  var commandModule6 = {
3113
3217
  command: "tsgen",
3114
3218
  describe: "Autogenerate MUD typescript definitions based on the config file",
@@ -3120,7 +3224,7 @@ var commandModule6 = {
3120
3224
  },
3121
3225
  async handler(args) {
3122
3226
  const { configPath, out } = args;
3123
- const config = await loadStoreConfig(configPath);
3227
+ const config = await loadStoreConfig2(configPath);
3124
3228
  await tsgen(config, out);
3125
3229
  process.exit(0);
3126
3230
  }
@@ -3131,6 +3235,8 @@ var tsgen_default = commandModule6;
3131
3235
  import chalk3 from "chalk";
3132
3236
  import glob from "glob";
3133
3237
  import path3, { basename } from "path";
3238
+ import { loadStoreConfig as loadStoreConfig3, loadWorldConfig } from "@latticexyz/config";
3239
+ import { MUDError } from "@latticexyz/config";
3134
3240
  import { mkdirSync, writeFileSync as writeFileSync2 } from "fs";
3135
3241
 
3136
3242
  // src/utils/getChainId.ts
@@ -3156,7 +3262,9 @@ var yDeployOptions = {
3156
3262
  default: 1
3157
3263
  },
3158
3264
  saveDeployment: { type: "boolean", desc: "Save the deployment info to a file", default: true },
3159
- rpc: { type: "string", desc: "The RPC URL to use. Defaults to the RPC url from the local foundry.toml" }
3265
+ rpc: { type: "string", desc: "The RPC URL to use. Defaults to the RPC url from the local foundry.toml" },
3266
+ worldAddress: { type: "string", desc: "Deploy to an existing World at the given address" },
3267
+ srcDir: { type: "string", desc: "Source directory. Defaults to foundry src directory." }
3160
3268
  };
3161
3269
  async function deployHandler(args) {
3162
3270
  args.profile = args.profile ?? process.env.FOUNDRY_PROFILE;
@@ -3172,10 +3280,10 @@ async function deployHandler(args) {
3172
3280
  if (clean)
3173
3281
  await forge(["clean"], { profile });
3174
3282
  await forge(["build"], { profile });
3175
- const srcDir = await getSrcDirectory();
3283
+ const srcDir = args?.srcDir ?? await getSrcDirectory();
3176
3284
  const existingContracts = glob.sync(`${srcDir}/**/*.sol`).map((path7) => basename(path7, ".sol"));
3177
3285
  const worldConfig = await loadWorldConfig(configPath, existingContracts);
3178
- const storeConfig = await loadStoreConfig(configPath);
3286
+ const storeConfig = await loadStoreConfig3(configPath);
3179
3287
  const mudConfig = { ...worldConfig, ...storeConfig };
3180
3288
  if (printConfig)
3181
3289
  console.log(chalk3.green("\nResolved config:\n"), JSON.stringify(mudConfig, null, 2));
@@ -3215,6 +3323,7 @@ var commandModule7 = {
3215
3323
  var deploy_v2_default = commandModule7;
3216
3324
 
3217
3325
  // src/commands/worldgen.ts
3326
+ import { loadStoreConfig as loadStoreConfig4, loadWorldConfig as loadWorldConfig2 } from "@latticexyz/config";
3218
3327
  import glob2 from "glob";
3219
3328
  import path5, { basename as basename2 } from "path";
3220
3329
 
@@ -3224,6 +3333,7 @@ import path4 from "path";
3224
3333
 
3225
3334
  // src/utils/contractToInterface.ts
3226
3335
  import { parse, visit } from "@solidity-parser/parser";
3336
+ import { MUDError as MUDError2 } from "@latticexyz/config";
3227
3337
  function contractToInterface(data, contractName) {
3228
3338
  const ast = parse(data);
3229
3339
  let withContract = false;
@@ -3241,7 +3351,7 @@ function contractToInterface(data, contractName) {
3241
3351
  if (isConstructor || isFallback || isReceiveEther)
3242
3352
  return;
3243
3353
  if (visibility === "default")
3244
- throw new MUDError(`Visibility is not specified`);
3354
+ throw new MUDError2(`Visibility is not specified`);
3245
3355
  if (visibility === "external" || visibility === "public") {
3246
3356
  functions.push({
3247
3357
  name: name === null ? "" : name,
@@ -3254,7 +3364,7 @@ function contractToInterface(data, contractName) {
3254
3364
  }
3255
3365
  }
3256
3366
  } catch (error) {
3257
- if (error instanceof MUDError) {
3367
+ if (error instanceof MUDError2) {
3258
3368
  error.message = `Function "${name}" in contract "${contractName}": ${error.message}`;
3259
3369
  }
3260
3370
  throw error;
@@ -3263,7 +3373,7 @@ function contractToInterface(data, contractName) {
3263
3373
  }
3264
3374
  });
3265
3375
  if (!withContract) {
3266
- throw new MUDError(`Contract not found: ${contractName}`);
3376
+ throw new MUDError2(`Contract not found: ${contractName}`);
3267
3377
  }
3268
3378
  return {
3269
3379
  functions,
@@ -3310,7 +3420,7 @@ function flattenTypeName(typeName) {
3310
3420
  stateMutability
3311
3421
  };
3312
3422
  } else {
3313
- throw new MUDError(`Invalid typeName.type ${typeName.type}`);
3423
+ throw new MUDError2(`Invalid typeName.type ${typeName.type}`);
3314
3424
  }
3315
3425
  }
3316
3426
  function typeNameToExternalSymbols(typeName) {
@@ -3388,10 +3498,10 @@ async function worldgen(config, existingContracts, outputBaseDirectory) {
3388
3498
  usedInPath: worldgenBaseDirectory
3389
3499
  }));
3390
3500
  const systemInterfaceName = `I${system.basename}`;
3391
- const { fileSelector } = config.systems[system.basename];
3501
+ const { name } = config.systems[system.basename];
3392
3502
  const output2 = renderSystemInterface({
3393
3503
  name: systemInterfaceName,
3394
- functionPrefix: config.namespace === "" ? "" : `${config.namespace}_${fileSelector}_`,
3504
+ functionPrefix: config.namespace === "" ? "" : `${config.namespace}_${name}_`,
3395
3505
  functions,
3396
3506
  imports
3397
3507
  });
@@ -3431,11 +3541,11 @@ var commandModule8 = {
3431
3541
  path: path7,
3432
3542
  basename: basename2(path7, ".sol")
3433
3543
  }));
3434
- const worldConfig = await loadWorldConfig(
3544
+ const worldConfig = await loadWorldConfig2(
3435
3545
  configPath,
3436
3546
  existingContracts.map(({ basename: basename3 }) => basename3)
3437
3547
  );
3438
- const storeConfig = await loadStoreConfig(configPath);
3548
+ const storeConfig = await loadStoreConfig4(configPath);
3439
3549
  const mudConfig = { ...worldConfig, ...storeConfig };
3440
3550
  const outputBaseDirectory = path5.join(srcDir, mudConfig.codegenDirectory);
3441
3551
  if (clean)
@@ -3450,65 +3560,56 @@ var worldgen_default = commandModule8;
3450
3560
  import chalk4 from "chalk";
3451
3561
  import { existsSync, readFileSync as readFileSync3, rmSync as rmSync4, writeFileSync as writeFileSync3 } from "fs";
3452
3562
  import path6 from "path";
3563
+ import { MUDError as MUDError3 } from "@latticexyz/config";
3453
3564
 
3454
3565
  // package.json
3455
3566
  var package_default = {
3456
3567
  name: "@latticexyz/cli",
3457
- version: "2.0.0-alpha.78+cf5f4bfe",
3568
+ version: "1.42.0",
3458
3569
  description: "Command line interface for mud",
3570
+ repository: {
3571
+ type: "git",
3572
+ url: "https://github.com/latticexyz/mud.git",
3573
+ directory: "packages/cli"
3574
+ },
3575
+ license: "MIT",
3576
+ type: "module",
3459
3577
  main: "dist/index.js",
3460
3578
  types: "dist/index.d.ts",
3461
- type: "module",
3462
- license: "MIT",
3463
3579
  bin: {
3464
3580
  mud: "./dist/mud.js",
3465
3581
  mud2: "./dist/mud2.js"
3466
3582
  },
3467
- repository: {
3468
- type: "git",
3469
- url: "https://github.com/latticexyz/mud.git",
3470
- directory: "packages/cli"
3471
- },
3472
3583
  scripts: {
3473
- prepare: "yarn build",
3474
- codegen: "ts-node --esm --files ./scripts/codegen.ts",
3475
- lint: "eslint . --ext .ts",
3476
- dev: "tsup --watch",
3477
3584
  build: "tsup",
3478
- link: "yarn link",
3479
- test: "vitest typecheck --run && yarn test:contracts",
3480
- "test:contracts": "yarn codegen && forge test",
3481
- release: "npm publish --access=public"
3482
- },
3483
- devDependencies: {
3484
- "@latticexyz/store": "^2.0.0-alpha.78+cf5f4bfe",
3485
- "@types/ejs": "^3.1.1",
3486
- "@types/glob": "^7.2.0",
3487
- "@types/node": "^17.0.34",
3488
- "@types/openurl": "^1.0.0",
3489
- "@types/yargs": "^17.0.10",
3490
- esbuild: "^0.15.16",
3491
- tsup: "^6.6.3",
3492
- vitest: "^0.29.8"
3585
+ codegen: "tsx ./scripts/codegen.ts",
3586
+ dev: "tsup --watch",
3587
+ lint: "eslint . --ext .ts",
3588
+ release: "npm publish --access=public",
3589
+ test: "tsc --noEmit && pnpm test:contracts",
3590
+ "test:contracts": "pnpm codegen && forge test"
3493
3591
  },
3494
3592
  dependencies: {
3593
+ "@ethersproject/abi": "^5.7.0",
3594
+ "@ethersproject/providers": "^5.7.2",
3495
3595
  "@improbable-eng/grpc-web": "^0.15.0",
3496
3596
  "@improbable-eng/grpc-web-node-http-transport": "^0.15.0",
3497
- "@latticexyz/schema-type": "^2.0.0-alpha.78+cf5f4bfe",
3498
- "@latticexyz/services": "^2.0.0-alpha.78+cf5f4bfe",
3499
- "@latticexyz/solecs": "^2.0.0-alpha.78+cf5f4bfe",
3500
- "@latticexyz/std-contracts": "^2.0.0-alpha.78+cf5f4bfe",
3597
+ "@latticexyz/config": "workspace:*",
3598
+ "@latticexyz/schema-type": "workspace:*",
3599
+ "@latticexyz/services": "workspace:*",
3600
+ "@latticexyz/solecs": "workspace:*",
3601
+ "@latticexyz/std-contracts": "workspace:*",
3602
+ "@latticexyz/store": "workspace:*",
3603
+ "@latticexyz/world": "workspace:*",
3501
3604
  "@solidity-parser/parser": "^0.16.0",
3502
- "@typechain/ethers-v5": "^10.1.1",
3605
+ "@typechain/ethers-v5": "^10.2.0",
3503
3606
  chalk: "^5.0.1",
3504
3607
  chokidar: "^3.5.3",
3505
3608
  dotenv: "^16.0.3",
3506
3609
  "ds-test": "https://github.com/dapphub/ds-test.git#c9ce3f25bde29fc5eb9901842bf02850dfd2d084",
3507
3610
  ejs: "^3.1.8",
3508
- esbuild: "^0.17.14",
3509
3611
  ethers: "^5.7.2",
3510
3612
  execa: "^7.0.0",
3511
- "find-up": "^6.3.0",
3512
3613
  "forge-std": "https://github.com/foundry-rs/forge-std.git#b4f121555729b3afb3c5ffccb62ff4b6e2818fd3",
3513
3614
  glob: "^8.0.3",
3514
3615
  "nice-grpc-web": "^2.0.1",
@@ -3517,14 +3618,23 @@ var package_default = {
3517
3618
  prettier: "^2.8.4",
3518
3619
  "prettier-plugin-solidity": "^1.1.2",
3519
3620
  table: "^6.8.1",
3520
- "ts-node": "^10.9.1",
3521
3621
  typechain: "^8.1.1",
3522
3622
  typescript: "^4.9.5",
3523
3623
  yargs: "^17.7.1",
3524
3624
  zod: "^3.21.4",
3525
- "zod-validation-error": "^1.0.1"
3625
+ "zod-validation-error": "^1.3.0"
3526
3626
  },
3527
- gitHead: "cf5f4bfe0d1d14e70efbf10ebef47d39f39e7239"
3627
+ devDependencies: {
3628
+ "@types/ejs": "^3.1.1",
3629
+ "@types/glob": "^7.2.0",
3630
+ "@types/node": "^17.0.34",
3631
+ "@types/openurl": "^1.0.0",
3632
+ "@types/yargs": "^17.0.10",
3633
+ tsup: "^6.6.3",
3634
+ tsx: "^3.12.6",
3635
+ vitest: "^0.29.8"
3636
+ },
3637
+ gitHead: "914a1e0ae4a573d685841ca2ea921435057deb8f"
3528
3638
  };
3529
3639
 
3530
3640
  // src/commands/set-version.ts
@@ -3541,13 +3651,17 @@ var commandModule9 = {
3541
3651
  description: `Backup fails if a "${BACKUP_FILE}" file is found, unless --force is provided`
3542
3652
  },
3543
3653
  restore: { type: "boolean", description: `Restore the previous MUD versions from "${BACKUP_FILE}"` },
3544
- mudVersion: { alias: "v", type: "string", description: "The MUD version to install" }
3654
+ mudVersion: { alias: "v", type: "string", description: "The MUD version to install" },
3655
+ link: { alias: "l", type: "string", description: "Relative path to the local MUD root directory to link" }
3545
3656
  });
3546
3657
  },
3547
3658
  async handler(options) {
3548
3659
  try {
3549
- if (!options.mudVersion && !options.restore) {
3550
- throw new MUDError(`Version parameter is required unless --restore is provided.`);
3660
+ if (!options.mudVersion && !options.link && !options.restore) {
3661
+ throw new MUDError3("`--mudVersion` or `--link` is required unless --restore is provided.");
3662
+ }
3663
+ if (options.link && options.mudVersion) {
3664
+ throw new MUDError3("Options `--link` and `--mudVersion` are mutually exclusive");
3551
3665
  }
3552
3666
  options.mudVersion = options.mudVersion === "canary" ? await getCanaryVersion(package_default.name) : options.mudVersion;
3553
3667
  const rootPath = "./package.json";
@@ -3566,10 +3680,14 @@ var commandModule9 = {
3566
3680
  }
3567
3681
  };
3568
3682
  function updatePackageJson(filePath, options) {
3569
- const { backup, restore, force, mudVersion } = options;
3683
+ const { restore, force, link } = options;
3684
+ let { backup, mudVersion } = options;
3570
3685
  const backupFilePath = path6.join(path6.dirname(filePath), BACKUP_FILE);
3571
- if (backup && !force && existsSync(backupFilePath)) {
3572
- throw new MUDError(
3686
+ const backupFileExists = existsSync(backupFilePath);
3687
+ if (link && !backupFileExists)
3688
+ backup = true;
3689
+ if (backup && !force && backupFileExists) {
3690
+ throw new MUDError3(
3573
3691
  `A backup file already exists at ${backupFilePath}.
3574
3692
  Use --force to overwrite it or --restore to restore it.`
3575
3693
  );
@@ -3597,12 +3715,12 @@ Use --force to overwrite it or --restore to restore it.`
3597
3715
  }
3598
3716
  for (const key in packageJson.dependencies) {
3599
3717
  if (key.startsWith(MUD_PREFIX)) {
3600
- packageJson.dependencies[key] = restore && backupJson ? backupJson.dependencies[key] : mudVersion || packageJson.dependencies[key];
3718
+ packageJson.dependencies[key] = resolveMudVersion(key, "dependencies");
3601
3719
  }
3602
3720
  }
3603
3721
  for (const key in packageJson.devDependencies) {
3604
3722
  if (key.startsWith(MUD_PREFIX)) {
3605
- packageJson.devDependencies[key] = restore && backupJson ? backupJson.devDependencies[key] : mudVersion || packageJson.devDependencies[key];
3723
+ packageJson.devDependencies[key] = resolveMudVersion(key, "devDependencies");
3606
3724
  }
3607
3725
  }
3608
3726
  writeFileSync3(filePath, JSON.stringify(packageJson, null, 2) + "\n");
@@ -3614,13 +3732,22 @@ Use --force to overwrite it or --restore to restore it.`
3614
3732
  console.log(chalk4.green(`Cleaned up ${backupFilePath}`));
3615
3733
  }
3616
3734
  return packageJson;
3735
+ function resolveMudVersion(key, type) {
3736
+ if (restore && backupJson)
3737
+ return backupJson[type][key];
3738
+ if (link)
3739
+ mudVersion = resolveLinkPath(filePath, link, key);
3740
+ if (!mudVersion)
3741
+ return packageJson[type][key];
3742
+ return mudVersion;
3743
+ }
3617
3744
  }
3618
3745
  function readPackageJson(path7) {
3619
3746
  try {
3620
3747
  const jsonString = readFileSync3(path7, "utf8");
3621
3748
  return JSON.parse(jsonString);
3622
3749
  } catch {
3623
- throw new MUDError("Could not read JSON at " + path7);
3750
+ throw new MUDError3("Could not read JSON at " + path7);
3624
3751
  }
3625
3752
  }
3626
3753
  async function getCanaryVersion(pkg) {
@@ -3631,7 +3758,7 @@ async function getCanaryVersion(pkg) {
3631
3758
  console.log(chalk4.green("MUD canary version:", canary));
3632
3759
  return canary;
3633
3760
  } catch (e) {
3634
- throw new MUDError(`Could not fetch canary version of ${pkg}`);
3761
+ throw new MUDError3(`Could not fetch canary version of ${pkg}`);
3635
3762
  }
3636
3763
  }
3637
3764
  function logComparison(prev, curr) {
@@ -3641,6 +3768,12 @@ function logComparison(prev, curr) {
3641
3768
  }
3642
3769
  }
3643
3770
  }
3771
+ function resolveLinkPath(packageJsonPath, mudLinkPath, pkg) {
3772
+ const pkgName = pkg.replace(MUD_PREFIX, "");
3773
+ const packageJsonToRootPath = path6.relative(path6.dirname(packageJsonPath), process.cwd());
3774
+ const linkPath = path6.join(packageJsonToRootPath, mudLinkPath, "packages", pkgName);
3775
+ return "link:" + linkPath;
3776
+ }
3644
3777
  var set_version_default = commandModule9;
3645
3778
 
3646
3779
  // src/commands/test-v2.ts