movehat 0.0.1-alpha.0

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 (170) hide show
  1. package/README.md +236 -0
  2. package/bin/movehat.js +21 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +93 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/compile.d.ts +2 -0
  8. package/dist/commands/compile.d.ts.map +1 -0
  9. package/dist/commands/compile.js +71 -0
  10. package/dist/commands/compile.js.map +1 -0
  11. package/dist/commands/fork/create.d.ts +11 -0
  12. package/dist/commands/fork/create.d.ts.map +1 -0
  13. package/dist/commands/fork/create.js +56 -0
  14. package/dist/commands/fork/create.js.map +1 -0
  15. package/dist/commands/fork/fund.d.ts +12 -0
  16. package/dist/commands/fork/fund.d.ts.map +1 -0
  17. package/dist/commands/fork/fund.js +42 -0
  18. package/dist/commands/fork/fund.js.map +1 -0
  19. package/dist/commands/fork/list.d.ts +5 -0
  20. package/dist/commands/fork/list.d.ts.map +1 -0
  21. package/dist/commands/fork/list.js +61 -0
  22. package/dist/commands/fork/list.js.map +1 -0
  23. package/dist/commands/fork/serve.d.ts +10 -0
  24. package/dist/commands/fork/serve.d.ts.map +1 -0
  25. package/dist/commands/fork/serve.js +64 -0
  26. package/dist/commands/fork/serve.js.map +1 -0
  27. package/dist/commands/fork/view-resource.d.ts +11 -0
  28. package/dist/commands/fork/view-resource.d.ts.map +1 -0
  29. package/dist/commands/fork/view-resource.js +34 -0
  30. package/dist/commands/fork/view-resource.js.map +1 -0
  31. package/dist/commands/init.d.ts +2 -0
  32. package/dist/commands/init.d.ts.map +1 -0
  33. package/dist/commands/init.js +90 -0
  34. package/dist/commands/init.js.map +1 -0
  35. package/dist/commands/run.d.ts +2 -0
  36. package/dist/commands/run.d.ts.map +1 -0
  37. package/dist/commands/run.js +51 -0
  38. package/dist/commands/run.js.map +1 -0
  39. package/dist/commands/test.d.ts +2 -0
  40. package/dist/commands/test.d.ts.map +1 -0
  41. package/dist/commands/test.js +35 -0
  42. package/dist/commands/test.js.map +1 -0
  43. package/dist/core/config.d.ts +15 -0
  44. package/dist/core/config.d.ts.map +1 -0
  45. package/dist/core/config.js +121 -0
  46. package/dist/core/config.js.map +1 -0
  47. package/dist/core/contract.d.ts +20 -0
  48. package/dist/core/contract.d.ts.map +1 -0
  49. package/dist/core/contract.js +59 -0
  50. package/dist/core/contract.js.map +1 -0
  51. package/dist/core/deployments.d.ts +32 -0
  52. package/dist/core/deployments.d.ts.map +1 -0
  53. package/dist/core/deployments.js +122 -0
  54. package/dist/core/deployments.js.map +1 -0
  55. package/dist/core/shell.d.ts +25 -0
  56. package/dist/core/shell.d.ts.map +1 -0
  57. package/dist/core/shell.js +56 -0
  58. package/dist/core/shell.js.map +1 -0
  59. package/dist/errors.d.ts +12 -0
  60. package/dist/errors.d.ts.map +1 -0
  61. package/dist/errors.js +24 -0
  62. package/dist/errors.js.map +1 -0
  63. package/dist/fork/api.d.ts +33 -0
  64. package/dist/fork/api.d.ts.map +1 -0
  65. package/dist/fork/api.js +98 -0
  66. package/dist/fork/api.js.map +1 -0
  67. package/dist/fork/manager.d.ts +52 -0
  68. package/dist/fork/manager.d.ts.map +1 -0
  69. package/dist/fork/manager.js +221 -0
  70. package/dist/fork/manager.js.map +1 -0
  71. package/dist/fork/server.d.ts +55 -0
  72. package/dist/fork/server.d.ts.map +1 -0
  73. package/dist/fork/server.js +274 -0
  74. package/dist/fork/server.js.map +1 -0
  75. package/dist/fork/storage.d.ts +63 -0
  76. package/dist/fork/storage.d.ts.map +1 -0
  77. package/dist/fork/storage.js +183 -0
  78. package/dist/fork/storage.js.map +1 -0
  79. package/dist/fork/test.d.ts +75 -0
  80. package/dist/fork/test.d.ts.map +1 -0
  81. package/dist/fork/test.js +157 -0
  82. package/dist/fork/test.js.map +1 -0
  83. package/dist/helpers/assertions.d.ts +7 -0
  84. package/dist/helpers/assertions.d.ts.map +1 -0
  85. package/dist/helpers/assertions.js +17 -0
  86. package/dist/helpers/assertions.js.map +1 -0
  87. package/dist/helpers/banner.d.ts +3 -0
  88. package/dist/helpers/banner.d.ts.map +1 -0
  89. package/dist/helpers/banner.js +38 -0
  90. package/dist/helpers/banner.js.map +1 -0
  91. package/dist/helpers/index.d.ts +11 -0
  92. package/dist/helpers/index.d.ts.map +1 -0
  93. package/dist/helpers/index.js +7 -0
  94. package/dist/helpers/index.js.map +1 -0
  95. package/dist/helpers/setup.d.ts +10 -0
  96. package/dist/helpers/setup.d.ts.map +1 -0
  97. package/dist/helpers/setup.js +28 -0
  98. package/dist/helpers/setup.js.map +1 -0
  99. package/dist/index.d.ts +11 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +12 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/runtime.d.ts +26 -0
  104. package/dist/runtime.d.ts.map +1 -0
  105. package/dist/runtime.js +247 -0
  106. package/dist/runtime.js.map +1 -0
  107. package/dist/templates/.env.example +9 -0
  108. package/dist/templates/.mocharc.json +8 -0
  109. package/dist/templates/README.md +92 -0
  110. package/dist/templates/move/Counter.move +64 -0
  111. package/dist/templates/move/Move.toml +16 -0
  112. package/dist/templates/movehat.config.ts +37 -0
  113. package/dist/templates/package.json +24 -0
  114. package/dist/templates/scripts/deploy-counter.ts +48 -0
  115. package/dist/templates/tests/Counter.test.ts +75 -0
  116. package/dist/templates/tsconfig.json +15 -0
  117. package/dist/templates/types/movehat.d.ts +104 -0
  118. package/dist/types/config.d.ts +35 -0
  119. package/dist/types/config.d.ts.map +1 -0
  120. package/dist/types/config.js +2 -0
  121. package/dist/types/config.js.map +1 -0
  122. package/dist/types/fork.d.ts +37 -0
  123. package/dist/types/fork.d.ts.map +1 -0
  124. package/dist/types/fork.js +5 -0
  125. package/dist/types/fork.js.map +1 -0
  126. package/dist/types/runtime.d.ts +28 -0
  127. package/dist/types/runtime.d.ts.map +1 -0
  128. package/dist/types/runtime.js +2 -0
  129. package/dist/types/runtime.js.map +1 -0
  130. package/package.json +66 -0
  131. package/src/cli.ts +106 -0
  132. package/src/commands/compile.ts +84 -0
  133. package/src/commands/fork/create.ts +70 -0
  134. package/src/commands/fork/fund.ts +57 -0
  135. package/src/commands/fork/list.ts +67 -0
  136. package/src/commands/fork/serve.ts +77 -0
  137. package/src/commands/fork/view-resource.ts +46 -0
  138. package/src/commands/init.ts +150 -0
  139. package/src/commands/run.ts +59 -0
  140. package/src/commands/test.ts +42 -0
  141. package/src/core/config.ts +151 -0
  142. package/src/core/contract.ts +97 -0
  143. package/src/core/deployments.ts +164 -0
  144. package/src/core/shell.ts +66 -0
  145. package/src/errors.ts +21 -0
  146. package/src/fork/api.ts +117 -0
  147. package/src/fork/manager.ts +264 -0
  148. package/src/fork/server.ts +311 -0
  149. package/src/fork/storage.ts +224 -0
  150. package/src/fork/test.ts +195 -0
  151. package/src/helpers/assertions.ts +29 -0
  152. package/src/helpers/banner.ts +47 -0
  153. package/src/helpers/index.ts +26 -0
  154. package/src/helpers/setup.ts +49 -0
  155. package/src/index.ts +17 -0
  156. package/src/runtime.ts +322 -0
  157. package/src/templates/.env.example +9 -0
  158. package/src/templates/.mocharc.json +8 -0
  159. package/src/templates/README.md +92 -0
  160. package/src/templates/move/Counter.move +64 -0
  161. package/src/templates/move/Move.toml +16 -0
  162. package/src/templates/movehat.config.ts +37 -0
  163. package/src/templates/package.json +24 -0
  164. package/src/templates/scripts/deploy-counter.ts +48 -0
  165. package/src/templates/tests/Counter.test.ts +75 -0
  166. package/src/templates/tsconfig.json +15 -0
  167. package/src/templates/types/movehat.d.ts +104 -0
  168. package/src/types/config.ts +36 -0
  169. package/src/types/fork.ts +41 -0
  170. package/src/types/runtime.ts +49 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/fork/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ interface ForkServeOptions {
2
+ fork?: string;
3
+ port?: number;
4
+ }
5
+ /**
6
+ * Fork serve command: Start a local RPC server serving the fork
7
+ */
8
+ export default function forkServeCommand(options: ForkServeOptions): Promise<void>;
9
+ export {};
10
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/commands/fork/serve.ts"],"names":[],"mappings":"AAKA,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAA8B,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+DvF"}
@@ -0,0 +1,64 @@
1
+ import { join } from 'path';
2
+ import { existsSync } from 'fs';
3
+ import { loadUserConfig } from '../../core/config.js';
4
+ import { ForkServer } from '../../fork/server.js';
5
+ /**
6
+ * Fork serve command: Start a local RPC server serving the fork
7
+ */
8
+ export default async function forkServeCommand(options) {
9
+ try {
10
+ // Determine fork path
11
+ let forkPath;
12
+ if (options.fork) {
13
+ // Use specified path
14
+ forkPath = options.fork;
15
+ }
16
+ else {
17
+ // Use default fork path based on current network
18
+ const config = await loadUserConfig();
19
+ const networkName = process.env.MH_CLI_NETWORK || config.defaultNetwork || 'testnet';
20
+ // Lightweight validation: only check if network exists in config
21
+ // Don't validate accounts/keys since fork serve only reads data
22
+ if (!config.networks || !config.networks[networkName]) {
23
+ throw new Error(`Network "${networkName}" not found in config. Available networks: ${Object.keys(config.networks || {}).join(', ')}`);
24
+ }
25
+ forkPath = join(process.cwd(), '.movehat', 'forks', `${networkName}-fork`);
26
+ }
27
+ // Verify fork exists
28
+ if (!existsSync(join(forkPath, 'metadata.json'))) {
29
+ console.error(`\nError: Fork not found at ${forkPath}`);
30
+ console.error(`\nCreate a fork first with:`);
31
+ console.error(` movehat fork create --network <network> --name <name>`);
32
+ process.exit(1);
33
+ }
34
+ // Get port (already validated by Commander's parsePort in cli.ts)
35
+ const port = options.port ?? 8080;
36
+ // Create and start server
37
+ const server = new ForkServer(forkPath, port);
38
+ // Handle graceful shutdown (use 'once' to prevent duplicate shutdowns)
39
+ const shutdown = async () => {
40
+ console.log('\n\nShutting down...');
41
+ await server.stop();
42
+ process.exit(0);
43
+ };
44
+ // Use named handlers so we can remove them if needed
45
+ const sigintHandler = () => { void shutdown(); };
46
+ const sigtermHandler = () => { void shutdown(); };
47
+ process.once('SIGINT', sigintHandler);
48
+ process.once('SIGTERM', sigtermHandler);
49
+ try {
50
+ // Start server
51
+ await server.start();
52
+ }
53
+ finally {
54
+ // Remove handlers in case server is stopped by other means
55
+ process.removeListener('SIGINT', sigintHandler);
56
+ process.removeListener('SIGTERM', sigtermHandler);
57
+ }
58
+ }
59
+ catch (error) {
60
+ console.error(`\nError starting fork server:`, error.message);
61
+ process.exit(1);
62
+ }
63
+ }
64
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/commands/fork/serve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ interface ForkViewResourceOptions {
2
+ fork?: string;
3
+ account: string;
4
+ resource: string;
5
+ }
6
+ /**
7
+ * Fork view-resource command: View a resource from the fork
8
+ */
9
+ export default function forkViewResourceCommand(options: ForkViewResourceOptions): Promise<void>;
10
+ export {};
11
+ //# sourceMappingURL=view-resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-resource.d.ts","sourceRoot":"","sources":["../../../src/commands/fork/view-resource.ts"],"names":[],"mappings":"AAGA,UAAU,uBAAuB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAA8B,uBAAuB,CAAC,OAAO,EAAE,uBAAuB,iBAiCrF"}
@@ -0,0 +1,34 @@
1
+ import { join } from 'path';
2
+ import { ForkManager } from '../../fork/manager.js';
3
+ /**
4
+ * Fork view-resource command: View a resource from the fork
5
+ */
6
+ export default async function forkViewResourceCommand(options) {
7
+ try {
8
+ if (!options.account) {
9
+ throw new Error('--account is required');
10
+ }
11
+ if (!options.resource) {
12
+ throw new Error('--resource is required');
13
+ }
14
+ // Determine fork path
15
+ const forkPath = options.fork || join(process.cwd(), '.movehat', 'forks', 'testnet-fork');
16
+ console.log(`\n🔍 Viewing resource from fork`);
17
+ console.log(` Fork: ${forkPath}`);
18
+ console.log(` Account: ${options.account}`);
19
+ console.log(` Resource: ${options.resource}\n`);
20
+ // Load fork
21
+ const forkManager = new ForkManager(forkPath);
22
+ forkManager.load();
23
+ // Get resource
24
+ const resource = await forkManager.getResource(options.account, options.resource);
25
+ // Display result
26
+ console.log(JSON.stringify(resource, null, 2));
27
+ console.log('');
28
+ }
29
+ catch (error) {
30
+ console.error(`\n❌ Error: ${error.message}\n`);
31
+ process.exit(1);
32
+ }
33
+ }
34
+ //# sourceMappingURL=view-resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-resource.js","sourceRoot":"","sources":["../../../src/commands/fork/view-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAQpD;;GAEG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAgC;IACpF,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QAED,sBAAsB;QACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;QAE1F,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;QAElD,YAAY;QACZ,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC9C,WAAW,CAAC,IAAI,EAAE,CAAC;QAEnB,eAAe;QACf,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAElF,iBAAiB;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAElB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,cAAc,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export default function initCommand(projectName?: string): Promise<void>;
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AASA,wBAA8B,WAAW,CAAC,WAAW,CAAC,EAAE,MAAM,iBAuG7D"}
@@ -0,0 +1,90 @@
1
+ import fs from "fs/promises";
2
+ import path from "path";
3
+ import { fileURLToPath } from "url";
4
+ import prompts from "prompts";
5
+ import { printMovehatBanner } from "../helpers/banner.js";
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = path.dirname(__filename);
8
+ export default async function initCommand(projectName) {
9
+ // Show banner only on init command
10
+ printMovehatBanner();
11
+ // if name is not given
12
+ if (!projectName) {
13
+ const response = await prompts({
14
+ type: 'text',
15
+ name: 'projectName',
16
+ message: 'Project name:',
17
+ initial: 'first-project'
18
+ });
19
+ // If the user cancels (Ctrl+C), exit
20
+ if (!response.projectName) {
21
+ console.log('\n❌ Project initialization cancelled.');
22
+ process.exit(0);
23
+ }
24
+ projectName = response.projectName;
25
+ }
26
+ const targetDir = projectName;
27
+ const projectPath = path.resolve(process.cwd(), targetDir);
28
+ console.log(`\nInitializing new Movehat project in ${projectPath}...`);
29
+ try {
30
+ await fs.mkdir(projectPath, { recursive: true });
31
+ const templatesDir = path.join(__dirname, "..", "templates");
32
+ console.log("📁 Creating project structure...");
33
+ await copyFile(path.join(templatesDir, "package.json"), path.join(projectPath, "package.json"), { projectName: projectName });
34
+ await copyFile(path.join(templatesDir, "tsconfig.json"), path.join(projectPath, "tsconfig.json"));
35
+ await copyFile(path.join(templatesDir, ".mocharc.json"), path.join(projectPath, ".mocharc.json"));
36
+ await copyFile(path.join(templatesDir, "movehat.config.ts"), path.join(projectPath, "movehat.config.ts"));
37
+ await copyFile(path.join(templatesDir, ".env.example"), path.join(projectPath, ".env.example"));
38
+ await copyFile(path.join(templatesDir, ".gitignore"), path.join(projectPath, ".gitignore"));
39
+ await copyFile(path.join(templatesDir, "README.md"), path.join(projectPath, "README.md"), { projectName: projectName });
40
+ // 3. Copiar carpeta move/
41
+ console.log("📦 Setting up Move project...");
42
+ await copyDir(path.join(templatesDir, "move"), path.join(projectPath, "move"));
43
+ // 4. Copiar scripts/
44
+ console.log("📜 Adding deployment scripts...");
45
+ await copyDir(path.join(templatesDir, "scripts"), path.join(projectPath, "scripts"));
46
+ // 5. Copiar tests/
47
+ console.log("🧪 Adding test files...");
48
+ await copyDir(path.join(templatesDir, "tests"), path.join(projectPath, "tests"));
49
+ console.log("\n✅ Project created successfully!\n");
50
+ console.log("📝 Next steps:\n");
51
+ console.log(` cd ${projectName}`);
52
+ console.log(` cp .env.example .env`);
53
+ console.log(` # Edit .env with your credentials`);
54
+ console.log(` npm install`);
55
+ console.log(` npx movehat compile`);
56
+ console.log(` npm test\n`);
57
+ }
58
+ catch (error) {
59
+ console.error(`Failed to initialize project: ${error}`);
60
+ }
61
+ }
62
+ async function copyFile(src, dest, replacements) {
63
+ let content = await fs.readFile(src, "utf-8");
64
+ if (replacements) {
65
+ for (const [key, value] of Object.entries(replacements)) {
66
+ const regex = new RegExp(`{{${key}}}`, "g");
67
+ content = content.replace(regex, value);
68
+ }
69
+ }
70
+ await fs.writeFile(dest, content);
71
+ }
72
+ async function copyDir(src, dest) {
73
+ await fs.mkdir(dest, { recursive: true });
74
+ const entries = await fs.readdir(src, { withFileTypes: true });
75
+ for (const entry of entries) {
76
+ // Skip template development files
77
+ if (entry.name === 'types' || entry.name === '.vscode') {
78
+ continue;
79
+ }
80
+ const srcPath = path.join(src, entry.name);
81
+ const destPath = path.join(dest, entry.name);
82
+ if (entry.isDirectory()) {
83
+ await copyDir(srcPath, destPath);
84
+ }
85
+ else {
86
+ await fs.copyFile(srcPath, destPath);
87
+ }
88
+ }
89
+ }
90
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export default function runCommand(scriptPath: string): Promise<void>;
2
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAKA,wBAA8B,UAAU,CAAC,UAAU,EAAE,MAAM,iBAqD1D"}
@@ -0,0 +1,51 @@
1
+ import { spawn } from "child_process";
2
+ import { resolve, extname, dirname, join } from "path";
3
+ import { existsSync } from "fs";
4
+ import { fileURLToPath } from "url";
5
+ export default async function runCommand(scriptPath) {
6
+ if (!scriptPath) {
7
+ console.error("❌ Error: No script path provided");
8
+ console.error("Usage: movehat run <script-path> [--network <name>]");
9
+ console.error("Example: movehat run scripts/deploy-counter.ts --network testnet");
10
+ process.exit(1);
11
+ }
12
+ const fullPath = resolve(process.cwd(), scriptPath);
13
+ // Check if file exists
14
+ if (!existsSync(fullPath)) {
15
+ console.error(`❌ Script not found: ${scriptPath}`);
16
+ process.exit(1);
17
+ }
18
+ // Check if it's a TypeScript or JavaScript file
19
+ const ext = extname(fullPath);
20
+ if (![".ts", ".js", ".mjs"].includes(ext)) {
21
+ console.error(`❌ Unsupported file type: ${ext}`);
22
+ console.error("Supported extensions: .ts, .js, .mjs");
23
+ process.exit(1);
24
+ }
25
+ const network = process.env.MH_CLI_NETWORK;
26
+ console.log(`🚀 Running script: ${scriptPath}`);
27
+ if (network) {
28
+ console.log(` Network: ${network}`);
29
+ }
30
+ console.log();
31
+ // Find tsx from movehat's node_modules
32
+ const __filename = fileURLToPath(import.meta.url);
33
+ const __dirname = dirname(__filename);
34
+ const tsxPath = join(__dirname, "..", "..", "node_modules", ".bin", "tsx");
35
+ // Execute script with tsx (handles both .ts and .js files)
36
+ const child = spawn(tsxPath, [fullPath], {
37
+ stdio: "inherit",
38
+ env: {
39
+ ...process.env,
40
+ // MH_CLI_NETWORK is already set by the CLI hook
41
+ },
42
+ });
43
+ child.on("exit", (code) => {
44
+ process.exit(code || 0);
45
+ });
46
+ child.on("error", (error) => {
47
+ console.error(`❌ Failed to execute script: ${error.message}`);
48
+ process.exit(1);
49
+ });
50
+ }
51
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,UAAU,CAAC,UAAkB;IACzD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACrE,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IAEpD,uBAAuB;IACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,gDAAgD;IAChD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,CAAC,KAAK,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;IAChD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,uCAAuC;IACvC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAE3E,2DAA2D;IAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE;QACvC,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,gDAAgD;SACjD;KACF,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACxB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QAC1B,OAAO,CAAC,KAAK,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export default function testCommand(): Promise<void>;
2
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAIA,wBAA8B,WAAW,kBAqCxC"}
@@ -0,0 +1,35 @@
1
+ import { spawn } from "child_process";
2
+ import { join } from "path";
3
+ import { existsSync } from "fs";
4
+ export default async function testCommand() {
5
+ const testDir = join(process.cwd(), "tests");
6
+ if (!existsSync(testDir)) {
7
+ console.error("❌ No tests directory found.");
8
+ console.error(" Create a 'tests' directory with your TypeScript test files.");
9
+ process.exit(1);
10
+ }
11
+ console.log("🧪 Running TypeScript tests with Mocha...\n");
12
+ // Find mocha from project's node_modules
13
+ const mochaPath = join(process.cwd(), "node_modules", ".bin", "mocha");
14
+ if (!existsSync(mochaPath)) {
15
+ console.error("❌ Mocha not found in project dependencies.");
16
+ console.error(" Install it with: npm install --save-dev mocha");
17
+ process.exit(1);
18
+ }
19
+ // Run mocha with TypeScript support
20
+ const child = spawn(mochaPath, [], {
21
+ stdio: "inherit",
22
+ env: {
23
+ ...process.env,
24
+ // Inherit network if set
25
+ },
26
+ });
27
+ child.on("exit", (code) => {
28
+ process.exit(code || 0);
29
+ });
30
+ child.on("error", (error) => {
31
+ console.error(`❌ Failed to run tests: ${error.message}`);
32
+ process.exit(1);
33
+ });
34
+ }
35
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,WAAW;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;IAE7C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAE3D,yCAAyC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAEvE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC5D,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,oCAAoC;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE;QACjC,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,yBAAyB;SAC1B;KACF,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACxB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QAC1B,OAAO,CAAC,KAAK,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { MovehatConfig, MovehatUserConfig } from "../types/config.js";
2
+ /**
3
+ * Loads the user's movehat.config.js from the current working directory.
4
+ *
5
+ * @throws {Error} If the configuration file is not found or fails to load
6
+ * @security This function loads and executes code from the current working directory.
7
+ * It should only be called from trusted project directories.
8
+ */
9
+ export declare function loadUserConfig(): Promise<MovehatUserConfig>;
10
+ /**
11
+ * Resolve configuration for a specific network
12
+ * Merges global settings with network-specific settings
13
+ */
14
+ export declare function resolveNetworkConfig(userConfig: MovehatUserConfig, networkName?: string): Promise<MovehatConfig>;
15
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEtE;;;;;;GAMG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAyDjE;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,iBAAiB,EAC7B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC,CAwExB"}
@@ -0,0 +1,121 @@
1
+ import { pathToFileURL } from "url";
2
+ import { join } from "path";
3
+ import { existsSync } from "fs";
4
+ /**
5
+ * Loads the user's movehat.config.js from the current working directory.
6
+ *
7
+ * @throws {Error} If the configuration file is not found or fails to load
8
+ * @security This function loads and executes code from the current working directory.
9
+ * It should only be called from trusted project directories.
10
+ */
11
+ export async function loadUserConfig() {
12
+ const cwd = process.cwd();
13
+ // Try to find config file (.ts first, then .js)
14
+ const possiblePaths = [
15
+ join(cwd, "movehat.config.ts"),
16
+ join(cwd, "movehat.config.js"),
17
+ ];
18
+ let configPath = null;
19
+ for (const path of possiblePaths) {
20
+ if (existsSync(path)) {
21
+ configPath = path;
22
+ break;
23
+ }
24
+ }
25
+ if (!configPath) {
26
+ throw new Error("Configuration file not found. Expected 'movehat.config.ts' or 'movehat.config.js' in the current directory.");
27
+ }
28
+ try {
29
+ let configModule;
30
+ if (configPath.endsWith('.ts')) {
31
+ // For TypeScript files, we need to use tsx's import system
32
+ // Register tsx loader for .ts files
33
+ const { register } = await import('tsx/esm/api');
34
+ const unregister = register();
35
+ try {
36
+ const configUrl = pathToFileURL(configPath).href;
37
+ configModule = await import(configUrl + '?t=' + Date.now());
38
+ }
39
+ finally {
40
+ unregister();
41
+ }
42
+ }
43
+ else {
44
+ // For .js files, use standard import
45
+ const configUrl = pathToFileURL(configPath).href;
46
+ configModule = await import(configUrl + '?t=' + Date.now());
47
+ }
48
+ const userConfig = configModule.default;
49
+ // Validate that networks are defined
50
+ if (!userConfig.networks || Object.keys(userConfig.networks).length === 0) {
51
+ throw new Error("No networks defined in configuration. Add at least one network in the 'networks' field.");
52
+ }
53
+ return userConfig;
54
+ }
55
+ catch (error) {
56
+ throw new Error(`Failed to load configuration file '${configPath}': ${error}`);
57
+ }
58
+ }
59
+ /**
60
+ * Resolve configuration for a specific network
61
+ * Merges global settings with network-specific settings
62
+ */
63
+ export async function resolveNetworkConfig(userConfig, networkName) {
64
+ // Determine which network to use
65
+ const selectedNetwork = networkName ||
66
+ process.env.MH_CLI_NETWORK ||
67
+ process.env.MH_DEFAULT_NETWORK ||
68
+ userConfig.defaultNetwork ||
69
+ "testnet";
70
+ // Check if network exists in config
71
+ const networkConfig = userConfig.networks[selectedNetwork];
72
+ if (!networkConfig) {
73
+ const availableNetworks = Object.keys(userConfig.networks).join(", ");
74
+ throw new Error(`Network '${selectedNetwork}' not found in configuration.\nAvailable networks: ${availableNetworks}`);
75
+ }
76
+ // Get accounts using Hardhat-style resolution:
77
+ // 1. Network-specific accounts (if defined)
78
+ // 2. Global accounts from config (if defined)
79
+ // 3. PRIVATE_KEY environment variable (Hardhat-style, no MH_ prefix)
80
+ // 4. Error if nothing found
81
+ let accounts = [];
82
+ // 1. Check network-specific accounts
83
+ if (networkConfig.accounts && networkConfig.accounts.length > 0) {
84
+ accounts = [...networkConfig.accounts].filter(Boolean);
85
+ }
86
+ // 2. If no network-specific accounts, use global accounts
87
+ if (accounts.length === 0 && userConfig.accounts && userConfig.accounts.length > 0) {
88
+ accounts = [...userConfig.accounts].filter(Boolean);
89
+ }
90
+ // 3. If still no accounts, check PRIVATE_KEY env var (Hardhat-style)
91
+ if (accounts.length === 0 && process.env.PRIVATE_KEY) {
92
+ accounts = [process.env.PRIVATE_KEY];
93
+ }
94
+ // 4. Validate we have at least one account
95
+ if (accounts.length === 0 || !accounts[0]) {
96
+ throw new Error(`Network '${selectedNetwork}' has no accounts configured.\n` +
97
+ `Options:\n` +
98
+ ` 1. Set PRIVATE_KEY in your .env file (recommended)\n` +
99
+ ` 2. Add 'accounts: ["0x..."]' globally in movehat.config.ts\n` +
100
+ ` 3. Add 'accounts: ["0x..."]' to the '${selectedNetwork}' network config`);
101
+ }
102
+ // Merge named addresses (network-specific overrides global)
103
+ const mergedNamedAddresses = {
104
+ ...(userConfig.namedAddresses || {}),
105
+ ...(networkConfig.namedAddresses || {}),
106
+ };
107
+ // Build resolved config
108
+ const resolvedConfig = {
109
+ network: selectedNetwork,
110
+ rpc: networkConfig.url,
111
+ privateKey: accounts[0],
112
+ allAccounts: accounts,
113
+ profile: networkConfig.profile || "default",
114
+ moveDir: userConfig.moveDir || "./move",
115
+ account: "", // Will be derived from privateKey in runtime
116
+ namedAddresses: mergedNamedAddresses,
117
+ networkConfig: networkConfig,
118
+ };
119
+ return resolvedConfig;
120
+ }
121
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { Account, Aptos } from "@aptos-labs/ts-sdk";
2
+ export interface TransactionResult {
3
+ hash: string;
4
+ success: boolean;
5
+ vm_status: string;
6
+ }
7
+ export declare class MoveContract {
8
+ private aptos;
9
+ private moduleAddress;
10
+ private moduleName;
11
+ constructor(aptos: Aptos, moduleAddress: string, moduleName: string);
12
+ call(signer: Account, functionName: string, args?: any[], typeArgs?: string[]): Promise<TransactionResult>;
13
+ view<T = any>(functionName: string, args?: any[], typeArgs?: string[]): Promise<T>;
14
+ getModuleId(): string;
15
+ }
16
+ /**
17
+ * Factory function to create a contract instance
18
+ */
19
+ export declare function getContract(aptos: Aptos, moduleAddress: string, moduleName: string): MoveContract;
20
+ //# sourceMappingURL=contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/core/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,EAGN,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,YAAY;IAErB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,UAAU;gBAFV,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM;IAGtB,IAAI,CACR,MAAM,EAAE,OAAO,EACf,YAAY,EAAE,MAAM,EACpB,IAAI,GAAE,GAAG,EAAO,EAChB,QAAQ,GAAE,MAAM,EAAO,GACtB,OAAO,CAAC,iBAAiB,CAAC;IAuCvB,IAAI,CAAC,CAAC,GAAG,GAAG,EAChB,YAAY,EAAE,MAAM,EACpB,IAAI,GAAE,GAAG,EAAO,EAChB,QAAQ,GAAE,MAAM,EAAO,GACtB,OAAO,CAAC,CAAC,CAAC;IAcb,WAAW,IAAI,MAAM;CAGtB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACvB,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GACnB,YAAY,CAEd"}
@@ -0,0 +1,59 @@
1
+ export class MoveContract {
2
+ aptos;
3
+ moduleAddress;
4
+ moduleName;
5
+ constructor(aptos, moduleAddress, moduleName) {
6
+ this.aptos = aptos;
7
+ this.moduleAddress = moduleAddress;
8
+ this.moduleName = moduleName;
9
+ }
10
+ async call(signer, functionName, args = [], typeArgs = []) {
11
+ const functionFullName = `${this.moduleAddress}::${this.moduleName}::${functionName}`;
12
+ console.log(`📝 Calling ${functionFullName}...`);
13
+ const transaction = await this.aptos.transaction.build.simple({
14
+ sender: signer.accountAddress,
15
+ data: {
16
+ function: functionFullName,
17
+ typeArguments: typeArgs,
18
+ functionArguments: args,
19
+ },
20
+ });
21
+ const signature = this.aptos.transaction.sign({
22
+ signer,
23
+ transaction,
24
+ });
25
+ const committedTxn = await this.aptos.transaction.submit.simple({
26
+ transaction,
27
+ senderAuthenticator: signature,
28
+ });
29
+ const response = await this.aptos.waitForTransaction({
30
+ transactionHash: committedTxn.hash,
31
+ });
32
+ console.log(`✅ Transaction ${committedTxn.hash} committed with status: ${response.vm_status}\n`);
33
+ return {
34
+ hash: committedTxn.hash,
35
+ success: response.success,
36
+ vm_status: response.vm_status,
37
+ };
38
+ }
39
+ async view(functionName, args = [], typeArgs = []) {
40
+ const functionFullName = `${this.moduleAddress}::${this.moduleName}::${functionName}`;
41
+ const payload = {
42
+ function: functionFullName,
43
+ typeArguments: typeArgs,
44
+ functionArguments: args,
45
+ };
46
+ const result = await this.aptos.view({ payload });
47
+ return (result.length === 1 ? result[0] : result);
48
+ }
49
+ getModuleId() {
50
+ return `${this.moduleAddress}::${this.moduleName}`;
51
+ }
52
+ }
53
+ /**
54
+ * Factory function to create a contract instance
55
+ */
56
+ export function getContract(aptos, moduleAddress, moduleName) {
57
+ return new MoveContract(aptos, moduleAddress, moduleName);
58
+ }
59
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/core/contract.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,YAAY;IAEb;IACA;IACA;IAHV,YACU,KAAY,EACZ,aAAqB,EACrB,UAAkB;QAFlB,UAAK,GAAL,KAAK,CAAO;QACZ,kBAAa,GAAb,aAAa,CAAQ;QACrB,eAAU,GAAV,UAAU,CAAQ;IACzB,CAAC;IAEJ,KAAK,CAAC,IAAI,CACR,MAAe,EACf,YAAoB,EACpB,OAAc,EAAE,EAChB,WAAqB,EAAE;QAEvB,MAAM,gBAAgB,GAAG,GAAG,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,UAAU,KAAK,YAAY,EAAE,CAAC;QAEtF,OAAO,CAAC,GAAG,CAAC,cAAc,gBAAgB,KAAK,CAAC,CAAC;QAEjD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;YAC5D,MAAM,EAAE,MAAM,CAAC,cAAc;YAC7B,IAAI,EAAE;gBACJ,QAAQ,EAAE,gBAAkC;gBAC5C,aAAa,EAAE,QAAQ;gBACvB,iBAAiB,EAAE,IAAI;aACxB;SACF,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;YAC5C,MAAM;YACN,WAAW;SACZ,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;YAC9D,WAAW;YACX,mBAAmB,EAAE,SAAS;SAC/B,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;YACnD,eAAe,EAAE,YAAY,CAAC,IAAI;SACnC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CACT,iBAAiB,YAAY,CAAC,IAAI,2BAA2B,QAAQ,CAAC,SAAS,IAAI,CACpF,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,YAAY,CAAC,IAAI;YACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CACR,YAAoB,EACpB,OAAc,EAAE,EAChB,WAAqB,EAAE;QAEvB,MAAM,gBAAgB,GAAG,GAAG,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,UAAU,KAAK,YAAY,EAAE,CAAC;QAEtF,MAAM,OAAO,GAA0B;YACrC,QAAQ,EAAE,gBAAkC;YAC5C,aAAa,EAAE,QAAQ;YACvB,iBAAiB,EAAE,IAAI;SACxB,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAElD,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAM,CAAC;IACzD,CAAC;IAED,WAAW;QACT,OAAO,GAAG,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;IACrD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACvB,KAAY,EACZ,aAAqB,EACrB,UAAkB;IAElB,OAAO,IAAI,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;AAC9D,CAAC"}