@latticexyz/world 2.2.22-050dfd5c0f540bc4145db05ca6798926fdecff4c → 2.2.22-09ca9d34ea0d53b2e8d007a5fa35dcd624c00bd1

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 (77) hide show
  1. package/dist/{chunk-6KRKTNJ5.js → chunk-WKPUHKX4.js} +2 -1
  2. package/dist/{chunk-6KRKTNJ5.js.map → chunk-WKPUHKX4.js.map} +1 -1
  3. package/dist/internal.d.ts +16 -2
  4. package/dist/internal.js +114 -46
  5. package/dist/internal.js.map +1 -1
  6. package/dist/mud.config.js +1 -1
  7. package/dist/node.js +63 -42
  8. package/dist/node.js.map +1 -1
  9. package/out/AccessManagementSystem.sol/AccessManagementSystem.json +1 -1
  10. package/out/AccessManagementSystemLib.sol/AccessManagementSystemLib.json +1 -1
  11. package/out/AccessManagementSystemLib.sol/_grantAccess_ResourceId_address.json +1 -1
  12. package/out/AccessManagementSystemLib.sol/_renounceOwnership_ResourceId.json +1 -1
  13. package/out/AccessManagementSystemLib.sol/_revokeAccess_ResourceId_address.json +1 -1
  14. package/out/AccessManagementSystemLib.sol/_transferOwnership_ResourceId_address.json +1 -1
  15. package/out/BalanceTransferSystem.sol/BalanceTransferSystem.json +1 -1
  16. package/out/BalanceTransferSystemLib.sol/BalanceTransferSystemLib.json +1 -1
  17. package/out/BalanceTransferSystemLib.sol/_transferBalanceToAddress_ResourceId_address_uint256.json +1 -1
  18. package/out/BalanceTransferSystemLib.sol/_transferBalanceToNamespace_ResourceId_ResourceId_uint256.json +1 -1
  19. package/out/BatchCall.t.sol/BatchCallTest.json +1 -1
  20. package/out/BatchCall.t.sol/TestSystem.json +1 -1
  21. package/out/BatchCallSystem.sol/BatchCallSystem.json +1 -1
  22. package/out/BatchCallSystemLib.sol/BatchCallSystemLib.json +1 -1
  23. package/out/BatchCallSystemLib.sol/_batchCallFrom_SystemCallFromDataArray.json +1 -1
  24. package/out/BatchCallSystemLib.sol/_batchCall_SystemCallDataArray.json +1 -1
  25. package/out/DelegationControl.sol/DelegationControl.json +1 -1
  26. package/out/DelegationControlMock.sol/DelegationControlMock.json +1 -1
  27. package/out/Factories.t.sol/FactoriesTest.json +1 -1
  28. package/out/IBaseWorld.sol/IBaseWorld.json +1 -1
  29. package/out/IWorldRegistrationSystem.sol/IWorldRegistrationSystem.json +1 -1
  30. package/out/InitModule.sol/InitModule.json +1 -1
  31. package/out/InitModule.t.sol/InitModuleTest.json +1 -1
  32. package/out/InitModule.t.sol/WorldMock.json +1 -1
  33. package/out/InitSystems.t.sol/LimitedCallContextTest.json +1 -1
  34. package/out/ModuleInstallationSystem.sol/ModuleInstallationSystem.json +1 -1
  35. package/out/ModuleInstallationSystemLib.sol/ModuleInstallationSystemLib.json +1 -1
  36. package/out/ModuleInstallationSystemLib.sol/_installModule_IModule_bytes.json +1 -1
  37. package/out/RegistrationSystem.sol/RegistrationSystem.json +1 -1
  38. package/out/RegistrationSystemLib.sol/RegistrationSystemLib.json +1 -1
  39. package/out/StoreRegistrationSystem.sol/StoreRegistrationSystem.json +1 -1
  40. package/out/StoreRegistrationSystemLib.sol/StoreRegistrationSystemLib.json +1 -1
  41. package/out/StoreRegistrationSystemLib.sol/_registerStoreHook_ResourceId_IStoreHook_uint8.json +1 -1
  42. package/out/StoreRegistrationSystemLib.sol/_registerTable_ResourceId_FieldLayout_Schema_Schema_stringArray_stringArray.json +1 -1
  43. package/out/StoreRegistrationSystemLib.sol/_unregisterStoreHook_ResourceId_IStoreHook.json +1 -1
  44. package/out/System.sol/System.json +1 -1
  45. package/out/System.t.sol/SystemTest.json +1 -1
  46. package/out/System.t.sol/TestSystem.json +1 -1
  47. package/out/Utils.t.sol/UtilsTest.json +1 -1
  48. package/out/Utils.t.sol/UtilsTestSystem.json +1 -1
  49. package/out/World.t.sol/EchoSystemHook.json +1 -1
  50. package/out/World.t.sol/IWorldTestSystem.json +1 -1
  51. package/out/World.t.sol/PayableFallbackSystem.json +1 -1
  52. package/out/World.t.sol/RevertSystemHook.json +1 -1
  53. package/out/World.t.sol/WorldTest.json +1 -1
  54. package/out/World.t.sol/WorldTestSystem.json +1 -1
  55. package/out/WorldBalance.t.sol/WorldBalanceTest.json +1 -1
  56. package/out/WorldBalance.t.sol/WorldBalanceTestSystem.json +1 -1
  57. package/out/WorldDynamicUpdate.t.sol/UpdateInDynamicFieldTest.json +1 -1
  58. package/out/WorldFactory.sol/WorldFactory.json +1 -1
  59. package/out/WorldProxy.sol/WorldProxy.json +1 -1
  60. package/out/WorldProxy.t.sol/WorldProxyTest.json +1 -1
  61. package/out/WorldProxyFactory.sol/WorldProxyFactory.json +1 -1
  62. package/out/WorldProxyFactory.t.sol/WorldProxyFactoryTest.json +1 -1
  63. package/out/WorldRegistrationSystem.sol/WorldRegistrationSystem.json +1 -1
  64. package/out/WorldRegistrationSystemLib.sol/WorldRegistrationSystemLib.json +1 -1
  65. package/out/WorldRegistrationSystemLib.sol/_registerDelegation_address_ResourceId_bytes.json +1 -1
  66. package/out/WorldRegistrationSystemLib.sol/_registerFunctionSelector_ResourceId_string.json +1 -1
  67. package/out/WorldRegistrationSystemLib.sol/_registerNamespaceDelegation_ResourceId_ResourceId_bytes.json +1 -1
  68. package/out/WorldRegistrationSystemLib.sol/_registerNamespace_ResourceId.json +1 -1
  69. package/out/WorldRegistrationSystemLib.sol/_registerRootFunctionSelector_ResourceId_string_string.json +1 -1
  70. package/out/WorldRegistrationSystemLib.sol/_registerSystemHook_ResourceId_ISystemHook_uint8.json +1 -1
  71. package/out/WorldRegistrationSystemLib.sol/_registerSystem_ResourceId_System_bool.json +1 -1
  72. package/out/WorldRegistrationSystemLib.sol/_unregisterDelegation_address.json +1 -1
  73. package/out/WorldRegistrationSystemLib.sol/_unregisterNamespaceDelegation_ResourceId.json +1 -1
  74. package/out/WorldRegistrationSystemLib.sol/_unregisterSystemHook_ResourceId_ISystemHook.json +1 -1
  75. package/out/build-info/{6366a746548e984842b93ef762b76b99.json → bf27acd14b2b959864c0abf4ffaa7965.json} +1 -1
  76. package/package.json +9 -9
  77. package/src/System.sol +1 -1
package/dist/node.js CHANGED
@@ -258,6 +258,7 @@ import {
258
258
  renderedSolidityHeader as renderedSolidityHeader2,
259
259
  renderImports as renderImports2
260
260
  } from "@latticexyz/common/codegen";
261
+ import { stringToHex } from "viem";
261
262
  function renderSystemLibrary(options) {
262
263
  const {
263
264
  imports: systemImports,
@@ -273,6 +274,9 @@ function renderSystemLibrary(options) {
273
274
  } = options;
274
275
  const functions = functionsInput.map((func) => ({
275
276
  ...func,
277
+ // Format parameters (add auxiliary argument names, replace calldata location)
278
+ parameters: formatParams(func.parameters),
279
+ // Remove `payable` from stateMutability for library functions
276
280
  stateMutability: func.stateMutability.replace("payable", "")
277
281
  }));
278
282
  const imports = [
@@ -394,7 +398,7 @@ function renderErrors(errors) {
394
398
  }
395
399
  function renderUserTypeFunction(contractFunction, userTypeName) {
396
400
  const { name, parameters, stateMutability, returnParameters } = contractFunction;
397
- const args = [`${userTypeName} self`, ...parameters].map((arg) => arg.replace(/ calldata /, " memory "));
401
+ const args = [`${userTypeName} self`, ...parameters];
398
402
  const functionSignature = `
399
403
  function ${name}(
400
404
  ${renderArguments2(args)}
@@ -411,7 +415,7 @@ function renderUserTypeFunction(contractFunction, userTypeName) {
411
415
  }
412
416
  function renderCallWrapperFunction(contractFunction, callingFromRootSystemErrorName) {
413
417
  const { name, parameters, stateMutability, returnParameters } = contractFunction;
414
- const args = [`CallWrapper memory self`, ...parameters].map((arg) => arg.replace(/ calldata /, " memory "));
418
+ const args = [`CallWrapper memory self`, ...parameters];
415
419
  const functionSignature = `
416
420
  function ${name}(
417
421
  ${renderArguments2(args)}
@@ -455,7 +459,7 @@ function renderRootCallWrapperFunction(contractFunction, namespace) {
455
459
  if (namespace === "" && stateMutability != "") {
456
460
  return "";
457
461
  }
458
- const args = ["RootCallWrapper memory self", ...parameters].map((arg) => arg.replace(/ calldata /, " memory "));
462
+ const args = ["RootCallWrapper memory self", ...parameters];
459
463
  const functionSignature = `
460
464
  function ${name}(
461
465
  ${renderArguments2(args)}
@@ -496,7 +500,7 @@ function renderFunctionInterface(contractFunction) {
496
500
  }
497
501
  function functionInterfaceName(contractFunction) {
498
502
  const { name, parameters } = contractFunction;
499
- const paramTypes = parameters.map((param) => param.split(" ")[0]).map((type5) => type5.replace("[]", "Array")).join("_");
503
+ const paramTypes = parameters.map((param) => param.split(" ")[0]).map((type5) => type5.replace("[]", "Array")).map((type5) => type5.replace(/\[.+\]/, (match2) => stringToHex(match2))).join("_");
500
504
  return `_${name}${paramTypes.length === 0 ? "" : `_${paramTypes}`}`;
501
505
  }
502
506
  function renderEncodeSystemCall(contractFunction) {
@@ -516,6 +520,14 @@ function renderReturnParameters2(returnParameters) {
516
520
  if (returnParameters.length == 0) return "";
517
521
  return `returns (${renderArguments2(returnParameters)})`;
518
522
  }
523
+ function formatParams(params) {
524
+ let auxCount = 0;
525
+ return params.map((arg) => arg.replace(/ calldata /, " memory ")).map((arg) => {
526
+ const items = arg.split(" ");
527
+ const needsAux = items.length === 1 || items.length === 2 && items[1] === "memory";
528
+ return needsAux ? `${arg} __aux${auxCount++}` : arg;
529
+ });
530
+ }
519
531
 
520
532
  // ts/node/render-solidity/renderWorldInterface.ts
521
533
  import { renderArguments as renderArguments3, renderedSolidityHeader as renderedSolidityHeader3, renderImports as renderImports3 } from "@latticexyz/common/codegen";
@@ -557,7 +569,7 @@ function renderWorldInterface({
557
569
  }
558
570
 
559
571
  // ts/node/render-solidity/worldgen.ts
560
- import fs from "node:fs/promises";
572
+ import fs2 from "node:fs/promises";
561
573
  import path4 from "node:path";
562
574
  import { formatAndWriteSolidity, contractToInterface } from "@latticexyz/common/codegen";
563
575
 
@@ -566,6 +578,7 @@ import { isHex } from "viem";
566
578
 
567
579
  // ts/node/getSystemContracts.ts
568
580
  import path3 from "node:path";
581
+ import fs from "node:fs/promises";
569
582
 
570
583
  // ts/node/findSolidityFiles.ts
571
584
  import path2 from "node:path";
@@ -5274,8 +5287,8 @@ var PathScurryBase = class {
5274
5287
  *
5275
5288
  * @internal
5276
5289
  */
5277
- constructor(cwd = process.cwd(), pathImpl, sep2, { nocase, childrenCacheSize = 16 * 1024, fs: fs3 = defaultFS } = {}) {
5278
- this.#fs = fsFromOption(fs3);
5290
+ constructor(cwd = process.cwd(), pathImpl, sep2, { nocase, childrenCacheSize = 16 * 1024, fs: fs4 = defaultFS } = {}) {
5291
+ this.#fs = fsFromOption(fs4);
5279
5292
  if (cwd instanceof URL || cwd.startsWith("file://")) {
5280
5293
  cwd = fileURLToPath(cwd);
5281
5294
  }
@@ -5833,8 +5846,8 @@ var PathScurryWin32 = class extends PathScurryBase {
5833
5846
  /**
5834
5847
  * @internal
5835
5848
  */
5836
- newRoot(fs3) {
5837
- return new PathWin32(this.rootPath, IFDIR, void 0, this.roots, this.nocase, this.childrenCache(), { fs: fs3 });
5849
+ newRoot(fs4) {
5850
+ return new PathWin32(this.rootPath, IFDIR, void 0, this.roots, this.nocase, this.childrenCache(), { fs: fs4 });
5838
5851
  }
5839
5852
  /**
5840
5853
  * Return true if the provided path string is an absolute path
@@ -5862,8 +5875,8 @@ var PathScurryPosix = class extends PathScurryBase {
5862
5875
  /**
5863
5876
  * @internal
5864
5877
  */
5865
- newRoot(fs3) {
5866
- return new PathPosix(this.rootPath, IFDIR, void 0, this.roots, this.nocase, this.childrenCache(), { fs: fs3 });
5878
+ newRoot(fs4) {
5879
+ return new PathPosix(this.rootPath, IFDIR, void 0, this.roots, this.nocase, this.childrenCache(), { fs: fs4 });
5867
5880
  }
5868
5881
  /**
5869
5882
  * Return true if the provided path string is an absolute path
@@ -6951,19 +6964,25 @@ async function findSolidityFiles({ cwd, pattern = "**" }) {
6951
6964
  }
6952
6965
 
6953
6966
  // ts/node/getSystemContracts.ts
6967
+ import { parseSystem } from "@latticexyz/common/codegen";
6968
+ import { isDefined } from "@latticexyz/common/utils";
6954
6969
  async function getSystemContracts({
6955
6970
  rootDir,
6956
6971
  config
6957
6972
  }) {
6958
- const solidityFiles = await findSolidityFiles({
6973
+ const filePaths = await findSolidityFiles({
6959
6974
  cwd: rootDir,
6960
6975
  pattern: path3.join(config.sourceDirectory, "**")
6961
6976
  });
6962
- return solidityFiles.filter(
6963
- (file) => file.basename.endsWith("System") && // exclude the base System contract
6964
- file.basename !== "System" && // exclude interfaces
6965
- !/^I[A-Z]/.test(file.basename)
6966
- ).map((file) => {
6977
+ const files = await Promise.all(
6978
+ filePaths.map(async (file) => {
6979
+ const source = await fs.readFile(path3.join(rootDir, file.filename), "utf-8");
6980
+ return { ...file, source };
6981
+ })
6982
+ );
6983
+ return files.map((file) => {
6984
+ const parsedSystem = parseSystem(file.source, file.basename);
6985
+ if (!parsedSystem) return;
6967
6986
  const namespaceLabel = (() => {
6968
6987
  if (!config.multipleNamespaces && config.namespace != null) return config.namespace;
6969
6988
  const relativePath = path3.relative(path3.join(rootDir, config.sourceDirectory), file.filename);
@@ -6980,7 +6999,7 @@ async function getSystemContracts({
6980
6999
  namespaceLabel,
6981
7000
  systemLabel: file.basename
6982
7001
  };
6983
- });
7002
+ }).filter(isDefined);
6984
7003
  }
6985
7004
 
6986
7005
  // ts/node/resolveSystems.ts
@@ -7038,7 +7057,7 @@ async function worldgen({
7038
7057
  config.codegen.outputDirectory,
7039
7058
  config.codegen.worldgenDirectory
7040
7059
  );
7041
- const systems = (await resolveSystems({ rootDir, config })).filter((system) => system.deploy.registerWorldFunctions).map((system) => {
7060
+ const systems = (await resolveSystems({ rootDir, config })).filter((system) => system.deploy.registerWorldFunctions || config.codegen.generateSystemLibraries).map((system) => {
7042
7061
  const interfaceName = `I${system.label}`;
7043
7062
  const libraryName = `${system.label}Lib`;
7044
7063
  const sourceDir = config.multipleNamespaces ? path4.join(config.sourceDirectory, "namespaces", system.namespaceLabel) : config.sourceDirectory;
@@ -7058,12 +7077,12 @@ async function worldgen({
7058
7077
  if (clean) {
7059
7078
  const libraryDirs = [...new Set(systems.map(({ libraryPath }) => path4.dirname(libraryPath)))];
7060
7079
  await Promise.all([
7061
- fs.rm(worldgenOutDir, { recursive: true, force: true }),
7062
- ...libraryDirs.map((dir) => fs.rm(dir, { recursive: true, force: true }))
7080
+ fs2.rm(worldgenOutDir, { recursive: true, force: true }),
7081
+ ...libraryDirs.map((dir) => fs2.rm(dir, { recursive: true, force: true }))
7063
7082
  ]);
7064
7083
  }
7065
7084
  const outputPath = path4.join(worldgenOutDir, config.codegen.worldInterfaceName + ".sol");
7066
- const worldImports = systems.map(
7085
+ const worldImports = systems.filter((system) => system.deploy.registerWorldFunctions).map(
7067
7086
  (system) => ({
7068
7087
  symbol: system.interfaceName,
7069
7088
  path: "./" + path4.relative(path4.dirname(outputPath), system.interfacePath)
@@ -7073,22 +7092,24 @@ async function worldgen({
7073
7092
  const worldImportPath = config.codegen.worldImportPath.startsWith(".") ? "./" + path4.relative(path4.dirname(outputPath), path4.join(rootDir, config.codegen.worldImportPath)) : config.codegen.worldImportPath;
7074
7093
  await Promise.all(
7075
7094
  systems.map(async (system) => {
7076
- const source = await fs.readFile(path4.join(rootDir, system.sourcePath), "utf8");
7095
+ const source = await fs2.readFile(path4.join(rootDir, system.sourcePath), "utf8");
7077
7096
  const { functions, errors, symbolImports } = contractToInterface(source, system.label);
7078
- const interfaceImports = symbolImports.map(
7079
- ({ symbol, path: importPath }) => ({
7080
- symbol,
7081
- path: importPath.startsWith(".") ? "./" + path4.relative(worldgenOutDir, path4.join(rootDir, path4.dirname(system.sourcePath), importPath)) : importPath
7082
- })
7083
- );
7084
- const systemInterface = renderSystemInterface({
7085
- name: system.interfaceName,
7086
- functionPrefix: system.namespace === "" ? "" : `${system.namespace}__`,
7087
- functions,
7088
- errors,
7089
- imports: interfaceImports
7090
- });
7091
- await formatAndWriteSolidity(systemInterface, system.interfacePath, "Generated system interface");
7097
+ if (system.deploy.registerWorldFunctions) {
7098
+ const interfaceImports = symbolImports.map(
7099
+ ({ symbol, path: importPath }) => ({
7100
+ symbol,
7101
+ path: importPath.startsWith(".") ? "./" + path4.relative(worldgenOutDir, path4.join(rootDir, path4.dirname(system.sourcePath), importPath)) : importPath
7102
+ })
7103
+ );
7104
+ const systemInterface = renderSystemInterface({
7105
+ name: system.interfaceName,
7106
+ functionPrefix: system.namespace === "" ? "" : `${system.namespace}__`,
7107
+ functions,
7108
+ errors,
7109
+ imports: interfaceImports
7110
+ });
7111
+ await formatAndWriteSolidity(systemInterface, system.interfacePath, "Generated system interface");
7112
+ }
7092
7113
  if (config.codegen.generateSystemLibraries) {
7093
7114
  const systemImport = {
7094
7115
  symbol: system.label,
@@ -7133,7 +7154,7 @@ async function worldgen({
7133
7154
  import path5 from "node:path";
7134
7155
  import { readFile } from "node:fs/promises";
7135
7156
  import { type as type2 } from "arktype";
7136
- import { indent, isDefined } from "@latticexyz/common/utils";
7157
+ import { indent, isDefined as isDefined2 } from "@latticexyz/common/utils";
7137
7158
  import { size, sliceHex } from "viem";
7138
7159
 
7139
7160
  // ts/node/common.ts
@@ -7211,7 +7232,7 @@ ${indent(artifact.message)}`);
7211
7232
  return;
7212
7233
  }
7213
7234
  return artifact;
7214
- }).filter(isDefined).filter(hasMetadata).map((artifact) => {
7235
+ }).filter(isDefined2).filter(hasMetadata).map((artifact) => {
7215
7236
  artifact;
7216
7237
  const sourcePath = Object.keys(artifact.metadata.settings.compilationTarget)[0];
7217
7238
  const name = artifact.metadata.settings.compilationTarget[sourcePath];
@@ -7320,7 +7341,7 @@ async function buildSystemsManifest(opts) {
7320
7341
  }
7321
7342
 
7322
7343
  // ts/node/loadSystemsManifest.ts
7323
- import fs2 from "node:fs/promises";
7344
+ import fs3 from "node:fs/promises";
7324
7345
  import path7 from "node:path";
7325
7346
  import { type as type4 } from "arktype";
7326
7347
  import { indent as indent2 } from "@latticexyz/common/utils";
@@ -7328,13 +7349,13 @@ var parseManifest = type4("string").pipe.try((s) => JSON.parse(s), SystemsManife
7328
7349
  async function loadSystemsManifest(opts) {
7329
7350
  const outFile = path7.join(opts.rootDir, systemsManifestFilename);
7330
7351
  try {
7331
- await fs2.access(outFile, fs2.constants.F_OK | fs2.constants.R_OK);
7352
+ await fs3.access(outFile, fs3.constants.F_OK | fs3.constants.R_OK);
7332
7353
  } catch (error2) {
7333
7354
  throw new Error(
7334
7355
  `Systems manifest at "${systemsManifestFilename}" not found or not readable. Run \`mud build\` before trying again.`
7335
7356
  );
7336
7357
  }
7337
- const json = await fs2.readFile(outFile, "utf8");
7358
+ const json = await fs3.readFile(outFile, "utf8");
7338
7359
  const manifest = parseManifest(json);
7339
7360
  if (manifest instanceof type4.errors) {
7340
7361
  throw new Error(