movehat 0.1.1 → 0.1.2
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.
- package/dist/commands/compile.d.ts +13 -0
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +31 -11
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/fork/create.d.ts +20 -1
- package/dist/commands/fork/create.d.ts.map +1 -1
- package/dist/commands/fork/create.js +54 -20
- package/dist/commands/fork/create.js.map +1 -1
- package/dist/commands/fork/list.d.ts +12 -1
- package/dist/commands/fork/list.d.ts.map +1 -1
- package/dist/commands/fork/list.js +50 -22
- package/dist/commands/fork/list.js.map +1 -1
- package/dist/commands/init.d.ts +19 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +64 -29
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/update.d.ts +11 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +44 -18
- package/dist/commands/update.js.map +1 -1
- package/dist/helpers/banner.d.ts +17 -0
- package/dist/helpers/banner.d.ts.map +1 -1
- package/dist/helpers/banner.js +38 -23
- package/dist/helpers/banner.js.map +1 -1
- package/dist/helpers/version-check.d.ts +12 -1
- package/dist/helpers/version-check.d.ts.map +1 -1
- package/dist/helpers/version-check.js +17 -7
- package/dist/helpers/version-check.js.map +1 -1
- package/dist/ui/colors.d.ts +77 -0
- package/dist/ui/colors.d.ts.map +1 -0
- package/dist/ui/colors.js +121 -0
- package/dist/ui/colors.js.map +1 -0
- package/dist/ui/formatters.d.ts +171 -0
- package/dist/ui/formatters.d.ts.map +1 -0
- package/dist/ui/formatters.js +186 -0
- package/dist/ui/formatters.js.map +1 -0
- package/dist/ui/index.d.ts +58 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +60 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/logger.d.ts +160 -0
- package/dist/ui/logger.d.ts.map +1 -0
- package/dist/ui/logger.js +206 -0
- package/dist/ui/logger.js.map +1 -0
- package/dist/ui/spinner.d.ts +106 -0
- package/dist/ui/spinner.d.ts.map +1 -0
- package/dist/ui/spinner.js +120 -0
- package/dist/ui/spinner.js.map +1 -0
- package/dist/ui/symbols.d.ts +50 -0
- package/dist/ui/symbols.d.ts.map +1 -0
- package/dist/ui/symbols.js +64 -0
- package/dist/ui/symbols.js.map +1 -0
- package/dist/ui/table.d.ts +67 -0
- package/dist/ui/table.d.ts.map +1 -0
- package/dist/ui/table.js +143 -0
- package/dist/ui/table.js.map +1 -0
- package/package.json +8 -1
- package/src/commands/compile.ts +32 -11
- package/src/commands/fork/create.ts +59 -20
- package/src/commands/fork/list.ts +52 -22
- package/src/commands/init.ts +111 -74
- package/src/commands/update.ts +52 -19
- package/src/helpers/banner.ts +45 -29
- package/src/helpers/version-check.ts +20 -8
- package/src/ui/colors.ts +141 -0
- package/src/ui/formatters.ts +246 -0
- package/src/ui/index.ts +62 -0
- package/src/ui/logger.ts +226 -0
- package/src/ui/spinner.ts +171 -0
- package/src/ui/symbols.ts +74 -0
- package/src/ui/table.ts +191 -0
|
@@ -1,2 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compile Move smart contracts using the Movement CLI
|
|
3
|
+
*
|
|
4
|
+
* This command:
|
|
5
|
+
* - Detects named addresses used in Move modules
|
|
6
|
+
* - Merges auto-detected addresses with user-configured addresses
|
|
7
|
+
* - Auto-assigns development addresses (0xcafe) for missing addresses
|
|
8
|
+
* - Executes `movement move build` with proper named address mappings
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* // Compile contracts in default ./move directory
|
|
12
|
+
* await compileCommand();
|
|
13
|
+
*/
|
|
1
14
|
export default function compileCommand(): Promise<void>;
|
|
2
15
|
//# sourceMappingURL=compile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"AAuFA;;;;;;;;;;;;GAYG;AACH,wBAA8B,cAAc,kBAyF3C"}
|
package/dist/commands/compile.js
CHANGED
|
@@ -3,6 +3,7 @@ import path from "path";
|
|
|
3
3
|
import { exec } from "child_process";
|
|
4
4
|
import { loadUserConfig } from "../core/config.js";
|
|
5
5
|
import { validateAndEscapePath, escapeShellArg } from "../core/shell.js";
|
|
6
|
+
import { logger } from "../ui/index.js";
|
|
6
7
|
/**
|
|
7
8
|
* Recursively find all .move files in a directory
|
|
8
9
|
* @param dir - Directory to search
|
|
@@ -73,16 +74,31 @@ function run(command, cwd) {
|
|
|
73
74
|
});
|
|
74
75
|
});
|
|
75
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Compile Move smart contracts using the Movement CLI
|
|
79
|
+
*
|
|
80
|
+
* This command:
|
|
81
|
+
* - Detects named addresses used in Move modules
|
|
82
|
+
* - Merges auto-detected addresses with user-configured addresses
|
|
83
|
+
* - Auto-assigns development addresses (0xcafe) for missing addresses
|
|
84
|
+
* - Executes `movement move build` with proper named address mappings
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* // Compile contracts in default ./move directory
|
|
88
|
+
* await compileCommand();
|
|
89
|
+
*/
|
|
76
90
|
export default async function compileCommand() {
|
|
77
91
|
try {
|
|
78
92
|
// Compile is network-independent - only uses global config
|
|
79
93
|
const userConfig = await loadUserConfig();
|
|
80
|
-
|
|
94
|
+
logger.newline();
|
|
95
|
+
logger.info('Compiling Move contracts...');
|
|
81
96
|
const moveDir = path.resolve(process.cwd(), userConfig.moveDir || "./move");
|
|
82
97
|
if (!fs.existsSync(moveDir)) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
98
|
+
logger.error(`Move directory not found: ${moveDir}`);
|
|
99
|
+
logger.plain(` Update movehat.config.ts -> moveDir`);
|
|
100
|
+
logger.newline();
|
|
101
|
+
process.exit(1);
|
|
86
102
|
}
|
|
87
103
|
// Validate and escape to prevent command injection
|
|
88
104
|
const safeMoveDir = validateAndEscapePath(moveDir, "Move directory");
|
|
@@ -120,22 +136,26 @@ export default async function compileCommand() {
|
|
|
120
136
|
namedAddressesArg = `--named-addresses ${escapeShellArg(escapedAddresses)}`;
|
|
121
137
|
}
|
|
122
138
|
const command = `movement move build --package-dir ${safeMoveDir} ${namedAddressesArg}`.trim();
|
|
123
|
-
|
|
139
|
+
logger.kv('Move directory', moveDir, 2);
|
|
124
140
|
if (detectedAddresses.size > 0) {
|
|
125
|
-
|
|
141
|
+
logger.kv('Detected addresses', Array.from(detectedAddresses).join(", "), 2);
|
|
126
142
|
}
|
|
127
143
|
if (Object.keys(userConfig.namedAddresses ?? {}).length > 0) {
|
|
128
|
-
|
|
144
|
+
logger.kv('Configured addresses', Object.keys(userConfig.namedAddresses).join(", "), 2);
|
|
129
145
|
}
|
|
130
146
|
if (autoAssignedAddresses.length > 0) {
|
|
131
|
-
|
|
147
|
+
logger.kv('Auto-assigned (0xcafe)', autoAssignedAddresses.join(", "), 2);
|
|
132
148
|
}
|
|
133
|
-
|
|
149
|
+
logger.newline();
|
|
134
150
|
await run(command, moveDir);
|
|
135
|
-
|
|
151
|
+
logger.newline();
|
|
152
|
+
logger.success('Compilation finished successfully');
|
|
153
|
+
logger.newline();
|
|
136
154
|
}
|
|
137
155
|
catch (err) {
|
|
138
|
-
|
|
156
|
+
logger.newline();
|
|
157
|
+
logger.error(`Compilation failed: ${err.message ?? err}`);
|
|
158
|
+
logger.newline();
|
|
139
159
|
process.exit(1);
|
|
140
160
|
}
|
|
141
161
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,26 @@ interface ForkCreateOptions {
|
|
|
4
4
|
name?: string;
|
|
5
5
|
}
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Create a local fork of a Movement/Aptos network
|
|
8
|
+
*
|
|
9
|
+
* This command:
|
|
10
|
+
* - Connects to the specified network RPC endpoint
|
|
11
|
+
* - Downloads blockchain state (accounts, modules, resources)
|
|
12
|
+
* - Creates a local fork database for testing
|
|
13
|
+
* - Displays fork metadata (chain ID, ledger version, block height, epoch)
|
|
14
|
+
*
|
|
15
|
+
* @param options - Fork creation options
|
|
16
|
+
* @param options.network - Network to fork from (e.g., 'testnet', 'mainnet')
|
|
17
|
+
* @param options.path - Custom path to store fork data
|
|
18
|
+
* @param options.name - Custom name for the fork
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* // Fork testnet
|
|
22
|
+
* await forkCreateCommand({ network: 'testnet' });
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* // Fork with custom name
|
|
26
|
+
* await forkCreateCommand({ network: 'testnet', name: 'my-fork' });
|
|
8
27
|
*/
|
|
9
28
|
export default function forkCreateCommand(options?: ForkCreateOptions): Promise<void>;
|
|
10
29
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/fork/create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/fork/create.ts"],"names":[],"mappings":"AAOA,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAA8B,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,iBAyE9E"}
|
|
@@ -3,8 +3,28 @@ import { existsSync } from 'fs';
|
|
|
3
3
|
import prompts from 'prompts';
|
|
4
4
|
import { loadUserConfig, resolveNetworkConfig } from '../../core/config.js';
|
|
5
5
|
import { ForkManager } from '../../fork/manager.js';
|
|
6
|
+
import { logger, withSpinner, createKVTable, formatCommand } from '../../ui/index.js';
|
|
6
7
|
/**
|
|
7
|
-
*
|
|
8
|
+
* Create a local fork of a Movement/Aptos network
|
|
9
|
+
*
|
|
10
|
+
* This command:
|
|
11
|
+
* - Connects to the specified network RPC endpoint
|
|
12
|
+
* - Downloads blockchain state (accounts, modules, resources)
|
|
13
|
+
* - Creates a local fork database for testing
|
|
14
|
+
* - Displays fork metadata (chain ID, ledger version, block height, epoch)
|
|
15
|
+
*
|
|
16
|
+
* @param options - Fork creation options
|
|
17
|
+
* @param options.network - Network to fork from (e.g., 'testnet', 'mainnet')
|
|
18
|
+
* @param options.path - Custom path to store fork data
|
|
19
|
+
* @param options.name - Custom name for the fork
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* // Fork testnet
|
|
23
|
+
* await forkCreateCommand({ network: 'testnet' });
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* // Fork with custom name
|
|
27
|
+
* await forkCreateCommand({ network: 'testnet', name: 'my-fork' });
|
|
8
28
|
*/
|
|
9
29
|
export default async function forkCreateCommand(options = {}) {
|
|
10
30
|
try {
|
|
@@ -15,9 +35,11 @@ export default async function forkCreateCommand(options = {}) {
|
|
|
15
35
|
// Determine fork name and path
|
|
16
36
|
const forkName = options.name || `${networkName}-fork`;
|
|
17
37
|
const forkPath = options.path || join(process.cwd(), '.movehat', 'forks', forkName);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
38
|
+
logger.newline();
|
|
39
|
+
logger.info(`Creating fork of ${networkName}`);
|
|
40
|
+
logger.kv('Network', networkConfig.rpc, 2);
|
|
41
|
+
logger.kv('Fork path', forkPath, 2);
|
|
42
|
+
logger.newline();
|
|
21
43
|
// Check if fork already exists
|
|
22
44
|
if (existsSync(forkPath)) {
|
|
23
45
|
const { overwrite } = await prompts({
|
|
@@ -27,29 +49,41 @@ export default async function forkCreateCommand(options = {}) {
|
|
|
27
49
|
initial: false,
|
|
28
50
|
});
|
|
29
51
|
if (!overwrite) {
|
|
30
|
-
|
|
52
|
+
logger.warning('Fork creation cancelled');
|
|
31
53
|
return;
|
|
32
54
|
}
|
|
33
55
|
}
|
|
34
56
|
// Create fork manager
|
|
35
57
|
const forkManager = new ForkManager(forkPath);
|
|
36
|
-
// Initialize fork
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
58
|
+
// Initialize fork with spinner
|
|
59
|
+
const metadata = await withSpinner('Initializing fork...', async () => {
|
|
60
|
+
await forkManager.initialize(networkConfig.rpc, networkName);
|
|
61
|
+
return forkManager.getMetadata();
|
|
62
|
+
}, 'Fork initialized successfully!');
|
|
63
|
+
// Show fork details
|
|
64
|
+
logger.newline();
|
|
65
|
+
logger.success('Fork created successfully!');
|
|
66
|
+
logger.newline();
|
|
67
|
+
logger.section('Fork Details');
|
|
68
|
+
const detailsTable = createKVTable({
|
|
69
|
+
'Chain ID': metadata.chainId.toString(),
|
|
70
|
+
'Ledger Version': metadata.ledgerVersion,
|
|
71
|
+
'Block Height': metadata.blockHeight,
|
|
72
|
+
'Epoch': metadata.epoch
|
|
73
|
+
});
|
|
74
|
+
console.log(detailsTable.toString());
|
|
75
|
+
logger.newline();
|
|
76
|
+
// Usage examples
|
|
77
|
+
logger.section('Usage');
|
|
78
|
+
logger.item(formatCommand(`movehat fork view-resource --fork ${forkPath} --account <ADDRESS> --resource <TYPE>`), 2);
|
|
79
|
+
logger.item(formatCommand(`movehat fork fund --fork ${forkPath} --account <ADDRESS> --amount <AMOUNT>`), 2);
|
|
80
|
+
logger.item(formatCommand('movehat fork list'), 2);
|
|
81
|
+
logger.newline();
|
|
50
82
|
}
|
|
51
83
|
catch (error) {
|
|
52
|
-
|
|
84
|
+
logger.newline();
|
|
85
|
+
logger.error(`Error: ${error.message}`);
|
|
86
|
+
logger.newline();
|
|
53
87
|
process.exit(1);
|
|
54
88
|
}
|
|
55
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/fork/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/fork/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* List all available local forks
|
|
3
|
+
*
|
|
4
|
+
* Displays forks in a formatted table showing:
|
|
5
|
+
* - Fork name
|
|
6
|
+
* - Network (testnet, mainnet, etc.)
|
|
7
|
+
* - Chain ID
|
|
8
|
+
* - Number of accounts
|
|
9
|
+
* - Creation timestamp
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* // List all forks
|
|
13
|
+
* await forkListCommand();
|
|
3
14
|
*/
|
|
4
15
|
export default function forkListCommand(): Promise<void>;
|
|
5
16
|
//# sourceMappingURL=list.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/fork/list.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/fork/list.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;GAaG;AACH,wBAA8B,eAAe,kBA6E5C"}
|
|
@@ -1,16 +1,31 @@
|
|
|
1
1
|
import { join } from 'path';
|
|
2
2
|
import { existsSync, readdirSync, statSync } from 'fs';
|
|
3
3
|
import { ForkStorage } from '../../fork/storage.js';
|
|
4
|
+
import { logger, createTable, formatCommand } from '../../ui/index.js';
|
|
4
5
|
/**
|
|
5
|
-
*
|
|
6
|
+
* List all available local forks
|
|
7
|
+
*
|
|
8
|
+
* Displays forks in a formatted table showing:
|
|
9
|
+
* - Fork name
|
|
10
|
+
* - Network (testnet, mainnet, etc.)
|
|
11
|
+
* - Chain ID
|
|
12
|
+
* - Number of accounts
|
|
13
|
+
* - Creation timestamp
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* // List all forks
|
|
17
|
+
* await forkListCommand();
|
|
6
18
|
*/
|
|
7
19
|
export default async function forkListCommand() {
|
|
8
20
|
try {
|
|
9
21
|
const forksDir = join(process.cwd(), '.movehat', 'forks');
|
|
10
22
|
if (!existsSync(forksDir)) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
23
|
+
logger.newline();
|
|
24
|
+
logger.info('No forks found');
|
|
25
|
+
logger.newline();
|
|
26
|
+
logger.plain('Create a fork with:');
|
|
27
|
+
logger.item(formatCommand('movehat fork create --network testnet'), 2);
|
|
28
|
+
logger.newline();
|
|
14
29
|
return;
|
|
15
30
|
}
|
|
16
31
|
const entries = readdirSync(forksDir);
|
|
@@ -19,10 +34,20 @@ export default async function forkListCommand() {
|
|
|
19
34
|
return statSync(fullPath).isDirectory();
|
|
20
35
|
});
|
|
21
36
|
if (forkDirs.length === 0) {
|
|
22
|
-
|
|
37
|
+
logger.newline();
|
|
38
|
+
logger.info('No forks found');
|
|
39
|
+
logger.newline();
|
|
23
40
|
return;
|
|
24
41
|
}
|
|
25
|
-
|
|
42
|
+
logger.newline();
|
|
43
|
+
logger.info(`Found ${forkDirs.length} fork(s)`);
|
|
44
|
+
logger.newline();
|
|
45
|
+
// Create table for forks
|
|
46
|
+
const table = createTable({
|
|
47
|
+
head: ['Name', 'Network', 'Chain ID', 'Accounts', 'Created'],
|
|
48
|
+
preset: 'default',
|
|
49
|
+
colWidths: [20, 15, 12, 12, 25]
|
|
50
|
+
});
|
|
26
51
|
for (const forkDir of forkDirs) {
|
|
27
52
|
const forkPath = join(forksDir, forkDir);
|
|
28
53
|
const storage = new ForkStorage(forkPath);
|
|
@@ -30,31 +55,34 @@ export default async function forkListCommand() {
|
|
|
30
55
|
if (storage.exists()) {
|
|
31
56
|
const metadata = storage.loadMetadata();
|
|
32
57
|
const accounts = storage.listAccounts();
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
console.log('');
|
|
58
|
+
table.push([
|
|
59
|
+
forkDir,
|
|
60
|
+
metadata.network,
|
|
61
|
+
metadata.chainId.toString(),
|
|
62
|
+
accounts.length.toString(),
|
|
63
|
+
new Date(metadata.createdAt).toLocaleString()
|
|
64
|
+
]);
|
|
41
65
|
}
|
|
42
66
|
else {
|
|
43
|
-
|
|
44
|
-
console.log('');
|
|
67
|
+
table.push([forkDir, 'invalid', '-', '-', 'missing metadata']);
|
|
45
68
|
}
|
|
46
69
|
}
|
|
47
70
|
catch (error) {
|
|
48
|
-
|
|
49
|
-
console.log('');
|
|
71
|
+
table.push([forkDir, 'error', '-', '-', 'error reading']);
|
|
50
72
|
}
|
|
51
73
|
}
|
|
52
|
-
console.log(
|
|
53
|
-
|
|
54
|
-
|
|
74
|
+
console.log(table.toString());
|
|
75
|
+
logger.newline();
|
|
76
|
+
// Usage examples
|
|
77
|
+
logger.section('Usage');
|
|
78
|
+
logger.item(formatCommand('movehat fork view-resource --fork <PATH> --account <ADDR> --resource <TYPE>'), 2);
|
|
79
|
+
logger.item(formatCommand('movehat fork fund --fork <PATH> --account <ADDR> --amount <AMOUNT>'), 2);
|
|
80
|
+
logger.newline();
|
|
55
81
|
}
|
|
56
82
|
catch (error) {
|
|
57
|
-
|
|
83
|
+
logger.newline();
|
|
84
|
+
logger.error(`Error: ${error.message}`);
|
|
85
|
+
logger.newline();
|
|
58
86
|
process.exit(1);
|
|
59
87
|
}
|
|
60
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/fork/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/fork/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvE;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,eAAe;IAC3C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAE1D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC9B,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,uCAAuC,CAAC,EAAE,CAAC,CAAC,CAAC;YACvE,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACvC,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC9B,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,MAAM,UAAU,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,EAAE,CAAC;QAEjB,yBAAyB;QACzB,MAAM,KAAK,GAAG,WAAW,CAAC;YACxB,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC;YAC5D,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;SAChC,CAAC,CAAC;QAEH,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;YAE1C,IAAI,CAAC;gBACH,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;oBACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;oBACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;oBAExC,KAAK,CAAC,IAAI,CAAC;wBACT,OAAO;wBACP,QAAQ,CAAC,OAAO;wBAChB,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE;wBAC3B,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE;wBAC1B,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE;qBAC9C,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,OAAO,EAAE,CAAC;QAEjB,iBAAiB;QACjB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,6EAA6E,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7G,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,oEAAoE,CAAC,EAAE,CAAC,CAAC,CAAC;QACpG,MAAM,CAAC,OAAO,EAAE,CAAC;IAEnB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1,2 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Initialize a new Movehat project with template files
|
|
3
|
+
*
|
|
4
|
+
* Creates a complete project structure including:
|
|
5
|
+
* - Configuration files (movehat.config.ts, .env, .gitignore, package.json)
|
|
6
|
+
* - Move smart contract templates
|
|
7
|
+
* - Deployment scripts
|
|
8
|
+
* - Test files
|
|
9
|
+
*
|
|
10
|
+
* @param projectName - Optional project name. If not provided, user will be prompted
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* // With project name
|
|
14
|
+
* await initCommand('my-project');
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* // Interactive prompt
|
|
18
|
+
* await initCommand();
|
|
19
|
+
*/
|
|
1
20
|
export default function initCommand(projectName?: string): Promise<void>;
|
|
2
21
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAA8B,WAAW,CAAC,WAAW,CAAC,EAAE,MAAM,iBAyH7D"}
|
package/dist/commands/init.js
CHANGED
|
@@ -3,8 +3,28 @@ import path from "path";
|
|
|
3
3
|
import { fileURLToPath } from "url";
|
|
4
4
|
import prompts from "prompts";
|
|
5
5
|
import { printMovehatBanner } from "../helpers/banner.js";
|
|
6
|
+
import { logger, createSpinnerChain, formatCommand } from "../ui/index.js";
|
|
6
7
|
const __filename = fileURLToPath(import.meta.url);
|
|
7
8
|
const __dirname = path.dirname(__filename);
|
|
9
|
+
/**
|
|
10
|
+
* Initialize a new Movehat project with template files
|
|
11
|
+
*
|
|
12
|
+
* Creates a complete project structure including:
|
|
13
|
+
* - Configuration files (movehat.config.ts, .env, .gitignore, package.json)
|
|
14
|
+
* - Move smart contract templates
|
|
15
|
+
* - Deployment scripts
|
|
16
|
+
* - Test files
|
|
17
|
+
*
|
|
18
|
+
* @param projectName - Optional project name. If not provided, user will be prompted
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* // With project name
|
|
22
|
+
* await initCommand('my-project');
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* // Interactive prompt
|
|
26
|
+
* await initCommand();
|
|
27
|
+
*/
|
|
8
28
|
export default async function initCommand(projectName) {
|
|
9
29
|
// Show banner only on init command
|
|
10
30
|
printMovehatBanner();
|
|
@@ -18,45 +38,60 @@ export default async function initCommand(projectName) {
|
|
|
18
38
|
});
|
|
19
39
|
// If the user cancels (Ctrl+C), exit
|
|
20
40
|
if (!response.projectName) {
|
|
21
|
-
|
|
41
|
+
logger.warning('Project initialization cancelled.');
|
|
22
42
|
process.exit(0);
|
|
23
43
|
}
|
|
24
44
|
projectName = response.projectName;
|
|
25
45
|
}
|
|
26
46
|
const targetDir = projectName;
|
|
27
47
|
const projectPath = path.resolve(process.cwd(), targetDir);
|
|
28
|
-
|
|
48
|
+
logger.newline();
|
|
49
|
+
logger.info(`Initializing new Movehat project in ${projectPath}...`);
|
|
50
|
+
logger.newline();
|
|
29
51
|
try {
|
|
30
|
-
await fs.mkdir(projectPath, { recursive: true });
|
|
31
52
|
const templatesDir = path.join(__dirname, "..", "templates");
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
await
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
await
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
const steps = createSpinnerChain();
|
|
54
|
+
// Step 1: Create project structure
|
|
55
|
+
await steps.add('Creating project structure', async () => {
|
|
56
|
+
await fs.mkdir(projectPath, { recursive: true });
|
|
57
|
+
await copyFile(path.join(templatesDir, "package.json"), path.join(projectPath, "package.json"), { projectName: projectName });
|
|
58
|
+
await copyFile(path.join(templatesDir, "tsconfig.json"), path.join(projectPath, "tsconfig.json"));
|
|
59
|
+
await copyFile(path.join(templatesDir, ".mocharc.json"), path.join(projectPath, ".mocharc.json"));
|
|
60
|
+
await copyFile(path.join(templatesDir, "movehat.config.ts"), path.join(projectPath, "movehat.config.ts"));
|
|
61
|
+
await copyFile(path.join(templatesDir, ".env.example"), path.join(projectPath, ".env.example"));
|
|
62
|
+
await copyFile(path.join(templatesDir, "gitignore"), path.join(projectPath, ".gitignore"));
|
|
63
|
+
await copyFile(path.join(templatesDir, "README.md"), path.join(projectPath, "README.md"), { projectName: projectName });
|
|
64
|
+
});
|
|
65
|
+
// Step 2: Setup Move project
|
|
66
|
+
await steps.add('Setting up Move project', async () => {
|
|
67
|
+
await copyDir(path.join(templatesDir, "move"), path.join(projectPath, "move"), { projectName: projectName });
|
|
68
|
+
});
|
|
69
|
+
// Step 3: Add deployment scripts
|
|
70
|
+
await steps.add('Adding deployment scripts', async () => {
|
|
71
|
+
await copyDir(path.join(templatesDir, "scripts"), path.join(projectPath, "scripts"));
|
|
72
|
+
});
|
|
73
|
+
// Step 4: Add test files
|
|
74
|
+
await steps.add('Adding test files', async () => {
|
|
75
|
+
await copyDir(path.join(templatesDir, "tests"), path.join(projectPath, "tests"));
|
|
76
|
+
});
|
|
77
|
+
steps.complete();
|
|
78
|
+
// Success message
|
|
79
|
+
logger.newline();
|
|
80
|
+
logger.success('Project created successfully!');
|
|
81
|
+
logger.newline();
|
|
82
|
+
// Next steps
|
|
83
|
+
logger.section('Next steps');
|
|
84
|
+
logger.item(formatCommand(`cd ${projectName}`), 2);
|
|
85
|
+
logger.item(formatCommand('cp .env.example .env'), 2);
|
|
86
|
+
logger.plain(' # Edit .env with your credentials');
|
|
87
|
+
logger.item(formatCommand('npm install'), 2);
|
|
88
|
+
logger.item(formatCommand('npx movehat compile'), 2);
|
|
89
|
+
logger.item(formatCommand('npm test'), 2);
|
|
90
|
+
logger.newline();
|
|
57
91
|
}
|
|
58
92
|
catch (error) {
|
|
59
|
-
|
|
93
|
+
logger.error(`Failed to initialize project: ${error}`);
|
|
94
|
+
process.exit(1);
|
|
60
95
|
}
|
|
61
96
|
}
|
|
62
97
|
async function copyFile(src, dest, replacements) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|