moonwall 1.0.0-dev.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.
- package/LICENSE +681 -0
- package/README.md +54 -0
- package/config_schema.json +811 -0
- package/dist/api/constants/accounts.d.ts +36 -0
- package/dist/api/constants/accounts.d.ts.map +1 -0
- package/dist/api/constants/accounts.js +67 -0
- package/dist/api/constants/chain.d.ts +134 -0
- package/dist/api/constants/chain.d.ts.map +1 -0
- package/dist/api/constants/chain.js +149 -0
- package/dist/api/constants/index.d.ts +4 -0
- package/dist/api/constants/index.d.ts.map +1 -0
- package/dist/api/constants/index.js +3 -0
- package/dist/api/constants/smartContract.d.ts +29 -0
- package/dist/api/constants/smartContract.d.ts.map +1 -0
- package/dist/api/constants/smartContract.js +118 -0
- package/dist/api/testing/blocks.d.ts +59 -0
- package/dist/api/testing/blocks.d.ts.map +1 -0
- package/dist/api/testing/blocks.js +147 -0
- package/dist/api/testing/contracts.d.ts +5 -0
- package/dist/api/testing/contracts.d.ts.map +1 -0
- package/dist/api/testing/contracts.js +32 -0
- package/dist/api/testing/ethers.d.ts +3 -0
- package/dist/api/testing/ethers.d.ts.map +1 -0
- package/dist/api/testing/ethers.js +38 -0
- package/dist/api/testing/events.d.ts +12 -0
- package/dist/api/testing/events.d.ts.map +1 -0
- package/dist/api/testing/events.js +23 -0
- package/dist/api/testing/extrinsics.d.ts +5 -0
- package/dist/api/testing/extrinsics.d.ts.map +1 -0
- package/dist/api/testing/extrinsics.js +10 -0
- package/dist/api/testing/index.d.ts +9 -0
- package/dist/api/testing/index.d.ts.map +1 -0
- package/dist/api/testing/index.js +8 -0
- package/dist/api/testing/jumping.d.ts +8 -0
- package/dist/api/testing/jumping.d.ts.map +1 -0
- package/dist/api/testing/jumping.js +78 -0
- package/dist/api/testing/providers.d.ts +18 -0
- package/dist/api/testing/providers.d.ts.map +1 -0
- package/dist/api/testing/providers.js +34 -0
- package/dist/api/testing/viem.d.ts +139 -0
- package/dist/api/testing/viem.d.ts.map +1 -0
- package/dist/api/testing/viem.js +247 -0
- package/dist/api/types/config.d.ts +609 -0
- package/dist/api/types/config.d.ts.map +1 -0
- package/dist/api/types/config.js +1 -0
- package/dist/api/types/context.d.ts +125 -0
- package/dist/api/types/context.d.ts.map +1 -0
- package/dist/api/types/context.js +1 -0
- package/dist/api/types/contracts.d.ts +66 -0
- package/dist/api/types/contracts.d.ts.map +1 -0
- package/dist/api/types/contracts.js +1 -0
- package/dist/api/types/eth.d.ts +3 -0
- package/dist/api/types/eth.d.ts.map +1 -0
- package/dist/api/types/eth.js +1 -0
- package/dist/api/types/foundations.d.ts +11 -0
- package/dist/api/types/foundations.d.ts.map +1 -0
- package/dist/api/types/foundations.js +1 -0
- package/dist/api/types/helpers.d.ts +7 -0
- package/dist/api/types/helpers.d.ts.map +1 -0
- package/dist/api/types/helpers.js +1 -0
- package/dist/api/types/index.d.ts +8 -0
- package/dist/api/types/index.d.ts.map +1 -0
- package/dist/api/types/index.js +7 -0
- package/dist/api/types/runner.d.ts +490 -0
- package/dist/api/types/runner.d.ts.map +1 -0
- package/dist/api/types/runner.js +1 -0
- package/dist/cli/cmds/components/LogViewer.d.ts +17 -0
- package/dist/cli/cmds/components/LogViewer.d.ts.map +1 -0
- package/dist/cli/cmds/components/LogViewer.js +171 -0
- package/dist/cli/cmds/entrypoint.d.ts +6 -0
- package/dist/cli/cmds/entrypoint.d.ts.map +1 -0
- package/dist/cli/cmds/entrypoint.js +192 -0
- package/dist/cli/cmds/interactiveCmds/chopsticksIntCmds.d.ts +2 -0
- package/dist/cli/cmds/interactiveCmds/chopsticksIntCmds.d.ts.map +1 -0
- package/dist/cli/cmds/interactiveCmds/chopsticksIntCmds.js +117 -0
- package/dist/cli/cmds/interactiveCmds/devIntCmds.d.ts +2 -0
- package/dist/cli/cmds/interactiveCmds/devIntCmds.d.ts.map +1 -0
- package/dist/cli/cmds/interactiveCmds/devIntCmds.js +103 -0
- package/dist/cli/cmds/interactiveCmds/index.d.ts +4 -0
- package/dist/cli/cmds/interactiveCmds/index.d.ts.map +1 -0
- package/dist/cli/cmds/interactiveCmds/index.js +3 -0
- package/dist/cli/cmds/interactiveCmds/zombieIntCmds.d.ts +2 -0
- package/dist/cli/cmds/interactiveCmds/zombieIntCmds.d.ts.map +1 -0
- package/dist/cli/cmds/interactiveCmds/zombieIntCmds.js +32 -0
- package/dist/cli/cmds/main.d.ts +2 -0
- package/dist/cli/cmds/main.d.ts.map +1 -0
- package/dist/cli/cmds/main.js +336 -0
- package/dist/cli/cmds/runNetwork.d.ts +3 -0
- package/dist/cli/cmds/runNetwork.d.ts.map +1 -0
- package/dist/cli/cmds/runNetwork.js +292 -0
- package/dist/cli/cmds/runTests.d.ts +12 -0
- package/dist/cli/cmds/runTests.d.ts.map +1 -0
- package/dist/cli/cmds/runTests.js +257 -0
- package/dist/cli/internal/cmdFunctions/downloader.d.ts +4 -0
- package/dist/cli/internal/cmdFunctions/downloader.d.ts.map +1 -0
- package/dist/cli/internal/cmdFunctions/downloader.js +49 -0
- package/dist/cli/internal/cmdFunctions/fetchArtifact.d.ts +10 -0
- package/dist/cli/internal/cmdFunctions/fetchArtifact.d.ts.map +1 -0
- package/dist/cli/internal/cmdFunctions/fetchArtifact.js +145 -0
- package/dist/cli/internal/cmdFunctions/index.d.ts +5 -0
- package/dist/cli/internal/cmdFunctions/index.d.ts.map +1 -0
- package/dist/cli/internal/cmdFunctions/index.js +4 -0
- package/dist/cli/internal/cmdFunctions/initialisation.d.ts +20 -0
- package/dist/cli/internal/cmdFunctions/initialisation.d.ts.map +1 -0
- package/dist/cli/internal/cmdFunctions/initialisation.js +150 -0
- package/dist/cli/internal/cmdFunctions/tempLogs.d.ts +3 -0
- package/dist/cli/internal/cmdFunctions/tempLogs.d.ts.map +1 -0
- package/dist/cli/internal/cmdFunctions/tempLogs.js +37 -0
- package/dist/cli/internal/commandParsers.d.ts +59 -0
- package/dist/cli/internal/commandParsers.d.ts.map +1 -0
- package/dist/cli/internal/commandParsers.js +305 -0
- package/dist/cli/internal/deriveTestIds.d.ts +8 -0
- package/dist/cli/internal/deriveTestIds.d.ts.map +1 -0
- package/dist/cli/internal/deriveTestIds.js +123 -0
- package/dist/cli/internal/effect/index.d.ts +6 -0
- package/dist/cli/internal/effect/index.d.ts.map +1 -0
- package/dist/cli/internal/effect/index.js +5 -0
- package/dist/cli/internal/fileCheckers.d.ts +11 -0
- package/dist/cli/internal/fileCheckers.d.ts.map +1 -0
- package/dist/cli/internal/fileCheckers.js +165 -0
- package/dist/cli/internal/foundations/index.d.ts +4 -0
- package/dist/cli/internal/foundations/index.d.ts.map +1 -0
- package/dist/cli/internal/foundations/index.js +4 -0
- package/dist/cli/internal/index.d.ts +12 -0
- package/dist/cli/internal/index.d.ts.map +1 -0
- package/dist/cli/internal/index.js +11 -0
- package/dist/cli/internal/launcherCommon.d.ts +4 -0
- package/dist/cli/internal/launcherCommon.d.ts.map +1 -0
- package/dist/cli/internal/launcherCommon.js +130 -0
- package/dist/cli/internal/localNode.d.ts +16 -0
- package/dist/cli/internal/localNode.d.ts.map +1 -0
- package/dist/cli/internal/localNode.js +362 -0
- package/dist/cli/internal/logging.d.ts +2 -0
- package/dist/cli/internal/logging.d.ts.map +1 -0
- package/dist/cli/internal/logging.js +26 -0
- package/dist/cli/internal/node.d.ts +33 -0
- package/dist/cli/internal/node.d.ts.map +1 -0
- package/dist/cli/internal/node.js +228 -0
- package/dist/cli/internal/processHelpers.d.ts +17 -0
- package/dist/cli/internal/processHelpers.d.ts.map +1 -0
- package/dist/cli/internal/processHelpers.js +56 -0
- package/dist/cli/internal/providerFactories.d.ts +48 -0
- package/dist/cli/internal/providerFactories.d.ts.map +1 -0
- package/dist/cli/internal/providerFactories.js +442 -0
- package/dist/cli/internal/testIdParser.d.ts +34 -0
- package/dist/cli/internal/testIdParser.d.ts.map +1 -0
- package/dist/cli/internal/testIdParser.js +167 -0
- package/dist/cli/lib/binariesHelpers.d.ts +15 -0
- package/dist/cli/lib/binariesHelpers.d.ts.map +1 -0
- package/dist/cli/lib/binariesHelpers.js +99 -0
- package/dist/cli/lib/configReader.d.ts +8 -0
- package/dist/cli/lib/configReader.d.ts.map +1 -0
- package/dist/cli/lib/configReader.js +115 -0
- package/dist/cli/lib/contractFunctions.d.ts +2 -0
- package/dist/cli/lib/contractFunctions.d.ts.map +1 -0
- package/dist/cli/lib/contractFunctions.js +2 -0
- package/dist/cli/lib/globalContext.d.ts +46 -0
- package/dist/cli/lib/globalContext.d.ts.map +1 -0
- package/dist/cli/lib/globalContext.js +710 -0
- package/dist/cli/lib/governanceProcedures.d.ts +27 -0
- package/dist/cli/lib/governanceProcedures.d.ts.map +1 -0
- package/dist/cli/lib/governanceProcedures.js +458 -0
- package/dist/cli/lib/handlers/index.d.ts +5 -0
- package/dist/cli/lib/handlers/index.d.ts.map +1 -0
- package/dist/cli/lib/handlers/index.js +5 -0
- package/dist/cli/lib/repoDefinitions/index.d.ts +6 -0
- package/dist/cli/lib/repoDefinitions/index.d.ts.map +1 -0
- package/dist/cli/lib/repoDefinitions/index.js +21 -0
- package/dist/cli/lib/repoDefinitions/moonbeam.d.ts +4 -0
- package/dist/cli/lib/repoDefinitions/moonbeam.d.ts.map +1 -0
- package/dist/cli/lib/repoDefinitions/moonbeam.js +30 -0
- package/dist/cli/lib/repoDefinitions/polkadot.d.ts +4 -0
- package/dist/cli/lib/repoDefinitions/polkadot.d.ts.map +1 -0
- package/dist/cli/lib/repoDefinitions/polkadot.js +11 -0
- package/dist/cli/lib/repoDefinitions/tanssi.d.ts +4 -0
- package/dist/cli/lib/repoDefinitions/tanssi.d.ts.map +1 -0
- package/dist/cli/lib/repoDefinitions/tanssi.js +14 -0
- package/dist/cli/lib/rpcFunctions.d.ts +2 -0
- package/dist/cli/lib/rpcFunctions.d.ts.map +1 -0
- package/dist/cli/lib/rpcFunctions.js +26 -0
- package/dist/cli/lib/runnerContext.d.ts +32 -0
- package/dist/cli/lib/runnerContext.d.ts.map +1 -0
- package/dist/cli/lib/runnerContext.js +156 -0
- package/dist/cli/lib/shardManager.d.ts +40 -0
- package/dist/cli/lib/shardManager.d.ts.map +1 -0
- package/dist/cli/lib/shardManager.js +80 -0
- package/dist/cli/lib/upgradeProcedures.d.ts +5 -0
- package/dist/cli/lib/upgradeProcedures.d.ts.map +1 -0
- package/dist/cli/lib/upgradeProcedures.js +221 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +3 -0
- package/dist/contracts/contractInteraction.d.ts +17 -0
- package/dist/contracts/contractInteraction.d.ts.map +1 -0
- package/dist/contracts/contractInteraction.js +170 -0
- package/dist/contracts/index.d.ts +2 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +1 -0
- package/dist/foundations/chopsticks/handler.d.ts +3 -0
- package/dist/foundations/chopsticks/handler.d.ts.map +1 -0
- package/dist/foundations/chopsticks/handler.js +93 -0
- package/dist/foundations/chopsticks/helpers.d.ts +27 -0
- package/dist/foundations/chopsticks/helpers.d.ts.map +1 -0
- package/dist/foundations/chopsticks/helpers.js +133 -0
- package/dist/foundations/dev/handler.d.ts +3 -0
- package/dist/foundations/dev/handler.d.ts.map +1 -0
- package/dist/foundations/dev/handler.js +136 -0
- package/dist/foundations/dev/helpers.d.ts +27 -0
- package/dist/foundations/dev/helpers.d.ts.map +1 -0
- package/dist/foundations/dev/helpers.js +161 -0
- package/dist/foundations/read-only/handler.d.ts +3 -0
- package/dist/foundations/read-only/handler.d.ts.map +1 -0
- package/dist/foundations/read-only/handler.js +32 -0
- package/dist/foundations/zombie/handler.d.ts +3 -0
- package/dist/foundations/zombie/handler.d.ts.map +1 -0
- package/dist/foundations/zombie/handler.js +92 -0
- package/dist/foundations/zombie/helpers.d.ts +16 -0
- package/dist/foundations/zombie/helpers.d.ts.map +1 -0
- package/dist/foundations/zombie/helpers.js +97 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/internal/common.d.ts +3 -0
- package/dist/internal/common.d.ts.map +1 -0
- package/dist/internal/common.js +41 -0
- package/dist/internal/index.d.ts +4 -0
- package/dist/internal/index.d.ts.map +1 -0
- package/dist/internal/index.js +3 -0
- package/dist/internal/logger.d.ts +24 -0
- package/dist/internal/logger.d.ts.map +1 -0
- package/dist/internal/logger.js +66 -0
- package/dist/internal/logging.d.ts +7 -0
- package/dist/internal/logging.d.ts.map +1 -0
- package/dist/internal/logging.js +36 -0
- package/dist/moondebug.d.ts +3 -0
- package/dist/moondebug.d.ts.map +1 -0
- package/dist/moondebug.js +2 -0
- package/dist/services/cache/FileLock.d.ts +11 -0
- package/dist/services/cache/FileLock.d.ts.map +1 -0
- package/dist/services/cache/FileLock.js +68 -0
- package/dist/services/cache/StartupCacheService.d.ts +23 -0
- package/dist/services/cache/StartupCacheService.d.ts.map +1 -0
- package/dist/services/cache/StartupCacheService.js +159 -0
- package/dist/services/cache/index.d.ts +3 -0
- package/dist/services/cache/index.d.ts.map +1 -0
- package/dist/services/cache/index.js +2 -0
- package/dist/services/chopsticks/ChopsticksMultiChain.d.ts +158 -0
- package/dist/services/chopsticks/ChopsticksMultiChain.d.ts.map +1 -0
- package/dist/services/chopsticks/ChopsticksMultiChain.js +282 -0
- package/dist/services/chopsticks/ChopsticksService.d.ts +313 -0
- package/dist/services/chopsticks/ChopsticksService.d.ts.map +1 -0
- package/dist/services/chopsticks/ChopsticksService.js +77 -0
- package/dist/services/chopsticks/chopsticksConfigParser.d.ts +40 -0
- package/dist/services/chopsticks/chopsticksConfigParser.d.ts.map +1 -0
- package/dist/services/chopsticks/chopsticksConfigParser.js +201 -0
- package/dist/services/chopsticks/index.d.ts +5 -0
- package/dist/services/chopsticks/index.d.ts.map +1 -0
- package/dist/services/chopsticks/index.js +4 -0
- package/dist/services/chopsticks/launchChopsticksEffect.d.ts +225 -0
- package/dist/services/chopsticks/launchChopsticksEffect.d.ts.map +1 -0
- package/dist/services/chopsticks/launchChopsticksEffect.js +623 -0
- package/dist/services/config/configAccessors.d.ts +41 -0
- package/dist/services/config/configAccessors.d.ts.map +1 -0
- package/dist/services/config/configAccessors.js +149 -0
- package/dist/services/config/index.d.ts +2 -0
- package/dist/services/config/index.d.ts.map +1 -0
- package/dist/services/config/index.js +1 -0
- package/dist/services/errors.d.ts +72 -0
- package/dist/services/errors.d.ts.map +1 -0
- package/dist/services/errors.js +31 -0
- package/dist/services/index.d.ts +7 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +6 -0
- package/dist/services/network/NodeReadinessService.d.ts +35 -0
- package/dist/services/network/NodeReadinessService.d.ts.map +1 -0
- package/dist/services/network/NodeReadinessService.js +120 -0
- package/dist/services/network/PortDiscoveryService.d.ts +22 -0
- package/dist/services/network/PortDiscoveryService.d.ts.map +1 -0
- package/dist/services/network/PortDiscoveryService.js +77 -0
- package/dist/services/network/RpcPortDiscoveryService.d.ts +25 -0
- package/dist/services/network/RpcPortDiscoveryService.d.ts.map +1 -0
- package/dist/services/network/RpcPortDiscoveryService.js +136 -0
- package/dist/services/network/index.d.ts +4 -0
- package/dist/services/network/index.d.ts.map +1 -0
- package/dist/services/network/index.js +3 -0
- package/dist/services/process/ProcessManagerService.d.ts +49 -0
- package/dist/services/process/ProcessManagerService.d.ts.map +1 -0
- package/dist/services/process/ProcessManagerService.js +162 -0
- package/dist/services/process/index.d.ts +3 -0
- package/dist/services/process/index.d.ts.map +1 -0
- package/dist/services/process/index.js +2 -0
- package/dist/services/process/launchNodeEffect.d.ts +40 -0
- package/dist/services/process/launchNodeEffect.d.ts.map +1 -0
- package/dist/services/process/launchNodeEffect.js +86 -0
- package/dist/util/functions/index.d.ts +3 -0
- package/dist/util/functions/index.d.ts.map +1 -0
- package/dist/util/functions/index.js +4 -0
- package/dist/util/index.d.ts +4 -0
- package/dist/util/index.d.ts.map +1 -0
- package/dist/util/index.js +2 -0
- package/package.json +157 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
export function clearNodeLogs(silent = true) {
|
|
4
|
+
const dirPath = path.join(process.cwd(), "tmp", "node_logs");
|
|
5
|
+
if (!fs.existsSync(dirPath)) {
|
|
6
|
+
fs.mkdirSync(dirPath, { recursive: true });
|
|
7
|
+
}
|
|
8
|
+
const files = fs.readdirSync(dirPath);
|
|
9
|
+
for (const file of files) {
|
|
10
|
+
!silent && console.log(`Deleting log: ${file}`);
|
|
11
|
+
if (file.endsWith(".log")) {
|
|
12
|
+
fs.unlinkSync(path.join(dirPath, file));
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function reportLogLocation(silent = false) {
|
|
17
|
+
const dirPath = path.join(process.cwd(), "tmp", "node_logs");
|
|
18
|
+
if (!fs.existsSync(dirPath)) {
|
|
19
|
+
fs.mkdirSync(dirPath, { recursive: true });
|
|
20
|
+
}
|
|
21
|
+
const result = fs.readdirSync(dirPath);
|
|
22
|
+
let consoleMessage = "";
|
|
23
|
+
let filePath = "";
|
|
24
|
+
try {
|
|
25
|
+
filePath = process.env.MOON_ZOMBIE_DIR
|
|
26
|
+
? process.env.MOON_ZOMBIE_DIR
|
|
27
|
+
: process.env.MOON_LOG_LOCATION
|
|
28
|
+
? process.env.MOON_LOG_LOCATION
|
|
29
|
+
: path.join(dirPath, result.find((file) => path.extname(file) === ".log") || "no_logs_found");
|
|
30
|
+
consoleMessage = ` 🪵 Log location: ${filePath}`;
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
console.error(e);
|
|
34
|
+
}
|
|
35
|
+
!silent && console.log(consoleMessage);
|
|
36
|
+
return filePath.trim();
|
|
37
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { ChopsticksLaunchSpec, DevLaunchSpec, RepoSpec, ZombieLaunchSpec, LaunchOverrides } from "../../api/types/index.js";
|
|
2
|
+
export declare function parseZombieCmd(launchSpec: ZombieLaunchSpec): {
|
|
3
|
+
cmd: string;
|
|
4
|
+
};
|
|
5
|
+
export declare class LaunchCommandParser {
|
|
6
|
+
private args;
|
|
7
|
+
private cmd;
|
|
8
|
+
private launch;
|
|
9
|
+
private launchSpec;
|
|
10
|
+
private launchOverrides?;
|
|
11
|
+
constructor(options: {
|
|
12
|
+
launchSpec: DevLaunchSpec;
|
|
13
|
+
additionalRepos?: RepoSpec[];
|
|
14
|
+
launchOverrides?: LaunchOverrides;
|
|
15
|
+
});
|
|
16
|
+
private overrideArg;
|
|
17
|
+
withPorts(): Promise<this>;
|
|
18
|
+
withDefaultForkConfig(): LaunchCommandParser;
|
|
19
|
+
withLaunchOverrides(): LaunchCommandParser;
|
|
20
|
+
private print;
|
|
21
|
+
private applyForkOptions;
|
|
22
|
+
/**
|
|
23
|
+
* Cache startup artifacts if enabled in launchSpec.
|
|
24
|
+
* This uses an Effect-based service that caches artifacts by binary hash.
|
|
25
|
+
*
|
|
26
|
+
* When cacheStartupArtifacts is enabled, this generates:
|
|
27
|
+
* 1. Precompiled WASM for the runtime
|
|
28
|
+
* 2. Raw chain spec to skip genesis WASM compilation
|
|
29
|
+
*
|
|
30
|
+
* This reduces startup from ~3s to ~200ms (~10x improvement).
|
|
31
|
+
*/
|
|
32
|
+
withStartupCache(): Promise<LaunchCommandParser>;
|
|
33
|
+
build(): {
|
|
34
|
+
cmd: string;
|
|
35
|
+
args: string[];
|
|
36
|
+
launch: boolean;
|
|
37
|
+
};
|
|
38
|
+
static create(options: {
|
|
39
|
+
launchSpec: DevLaunchSpec;
|
|
40
|
+
additionalRepos?: RepoSpec[];
|
|
41
|
+
launchOverrides?: LaunchOverrides;
|
|
42
|
+
verbose?: boolean;
|
|
43
|
+
}): Promise<{
|
|
44
|
+
cmd: string;
|
|
45
|
+
args: string[];
|
|
46
|
+
launch: boolean;
|
|
47
|
+
}>;
|
|
48
|
+
}
|
|
49
|
+
export declare function parseChopsticksRunCmd(launchSpecs: ChopsticksLaunchSpec[]): {
|
|
50
|
+
cmd: string;
|
|
51
|
+
args: string[];
|
|
52
|
+
launch: boolean;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Get a free port with availability checking
|
|
56
|
+
* Uses async port allocation for better collision avoidance
|
|
57
|
+
*/
|
|
58
|
+
export declare const getFreePort: () => Promise<number>;
|
|
59
|
+
//# sourceMappingURL=commandParsers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commandParsers.d.ts","sourceRoot":"","sources":["../../../src/cli/internal/commandParsers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,QAAQ,EACR,gBAAgB,EAChB,eAAe,EAEhB,iCAAiC;AAYlC,wBAAgB,cAAc,CAAC,UAAU,EAAE,gBAAgB;;EAO1D;AAqBD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,eAAe,CAAC,CAAkB;gBAE9B,OAAO,EAAE;QACnB,UAAU,EAAE,aAAa,CAAC;QAC1B,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC7B,eAAe,CAAC,EAAE,eAAe,CAAC;KACnC;IAWD,OAAO,CAAC,WAAW;IAWb,SAAS;IA8Bf,qBAAqB,IAAI,mBAAmB;IAQ5C,mBAAmB,IAAI,mBAAmB;IAO1C,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,gBAAgB;IAgBxB;;;;;;;;;OASG;IACG,gBAAgB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAmFtD,KAAK,IAAI;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE;WAQ5C,MAAM,CAAC,OAAO,EAAE;QAC3B,UAAU,EAAE,aAAa,CAAC;QAC1B,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC7B,eAAe,CAAC,EAAE,eAAe,CAAC;QAClC,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB;aAbe,MAAM;cAAQ,MAAM,EAAE;gBAAU,OAAO;;CA0BxD;AAED,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,oBAAoB,EAAE,GAAG;IAC1E,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB,CAoDA;AA8BD;;;GAGG;AACH,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,MAAM,CA2BlD,CAAC"}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import { createLogger } from "../../util/index.js";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import net from "node:net";
|
|
4
|
+
import { Effect } from "effect";
|
|
5
|
+
import { standardRepos } from "../lib/repoDefinitions/index.js";
|
|
6
|
+
import { shardManager } from "../lib/shardManager.js";
|
|
7
|
+
import invariant from "tiny-invariant";
|
|
8
|
+
import { StartupCacheService, StartupCacheServiceLive } from "./effect/index.js";
|
|
9
|
+
const logger = createLogger({ name: "commandParsers" });
|
|
10
|
+
export function parseZombieCmd(launchSpec) {
|
|
11
|
+
if (launchSpec) {
|
|
12
|
+
return { cmd: launchSpec.configPath };
|
|
13
|
+
}
|
|
14
|
+
throw new Error("No ZombieSpec found in config. Are you sure your moonwall.config.json file has the correct 'configPath' in zombieSpec?");
|
|
15
|
+
}
|
|
16
|
+
function fetchDefaultArgs(binName, additionalRepos = []) {
|
|
17
|
+
let defaultArgs;
|
|
18
|
+
const repos = [...standardRepos(), ...additionalRepos];
|
|
19
|
+
for (const repo of repos) {
|
|
20
|
+
const foundBin = repo.binaries.find((bin) => bin.name === binName);
|
|
21
|
+
if (foundBin) {
|
|
22
|
+
defaultArgs = foundBin.defaultArgs;
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (!defaultArgs) {
|
|
27
|
+
defaultArgs = ["--dev"];
|
|
28
|
+
}
|
|
29
|
+
return defaultArgs;
|
|
30
|
+
}
|
|
31
|
+
export class LaunchCommandParser {
|
|
32
|
+
args;
|
|
33
|
+
cmd;
|
|
34
|
+
launch;
|
|
35
|
+
launchSpec;
|
|
36
|
+
launchOverrides;
|
|
37
|
+
constructor(options) {
|
|
38
|
+
const { launchSpec, additionalRepos, launchOverrides } = options;
|
|
39
|
+
this.launchSpec = launchSpec;
|
|
40
|
+
this.launchOverrides = launchOverrides;
|
|
41
|
+
this.launch = !launchSpec.running ? true : launchSpec.running;
|
|
42
|
+
this.cmd = launchSpec.binPath;
|
|
43
|
+
this.args = launchSpec.options
|
|
44
|
+
? [...launchSpec.options]
|
|
45
|
+
: fetchDefaultArgs(path.basename(launchSpec.binPath), additionalRepos);
|
|
46
|
+
}
|
|
47
|
+
overrideArg(newArg) {
|
|
48
|
+
const newArgKey = newArg.split("=")[0];
|
|
49
|
+
const existingIndex = this.args.findIndex((arg) => arg.startsWith(`${newArgKey}=`));
|
|
50
|
+
if (existingIndex !== -1) {
|
|
51
|
+
this.args[existingIndex] = newArg;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
this.args.push(newArg);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async withPorts() {
|
|
58
|
+
// In RECYCLE mode, the node is already running
|
|
59
|
+
if (process.env.MOON_RECYCLE === "true") {
|
|
60
|
+
const existingPort = process.env.MOONWALL_RPC_PORT;
|
|
61
|
+
if (existingPort) {
|
|
62
|
+
this.overrideArg(`--rpc-port=${existingPort}`);
|
|
63
|
+
}
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
if (this.launchSpec.ports) {
|
|
67
|
+
const ports = this.launchSpec.ports;
|
|
68
|
+
if (ports.p2pPort) {
|
|
69
|
+
this.overrideArg(`--port=${ports.p2pPort}`);
|
|
70
|
+
}
|
|
71
|
+
if (ports.wsPort) {
|
|
72
|
+
this.overrideArg(`--ws-port=${ports.wsPort}`);
|
|
73
|
+
}
|
|
74
|
+
if (ports.rpcPort) {
|
|
75
|
+
this.overrideArg(`--rpc-port=${ports.rpcPort}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
const freePort = (await getFreePort()).toString();
|
|
80
|
+
// Always pin the rpc port so the provider endpoint matches exactly the spawned node.
|
|
81
|
+
process.env.MOONWALL_RPC_PORT = freePort;
|
|
82
|
+
this.overrideArg(`--rpc-port=${freePort}`);
|
|
83
|
+
}
|
|
84
|
+
return this;
|
|
85
|
+
}
|
|
86
|
+
withDefaultForkConfig() {
|
|
87
|
+
const forkOptions = this.launchSpec.defaultForkConfig;
|
|
88
|
+
if (forkOptions) {
|
|
89
|
+
this.applyForkOptions(forkOptions);
|
|
90
|
+
}
|
|
91
|
+
return this;
|
|
92
|
+
}
|
|
93
|
+
withLaunchOverrides() {
|
|
94
|
+
if (this.launchOverrides?.forkConfig) {
|
|
95
|
+
this.applyForkOptions(this.launchOverrides.forkConfig);
|
|
96
|
+
}
|
|
97
|
+
return this;
|
|
98
|
+
}
|
|
99
|
+
print() {
|
|
100
|
+
logger.debug(`Command to run: ${this.cmd}`);
|
|
101
|
+
logger.debug(`Arguments: ${this.args.join(" ")}`);
|
|
102
|
+
return this;
|
|
103
|
+
}
|
|
104
|
+
applyForkOptions(forkOptions) {
|
|
105
|
+
if (forkOptions.url) {
|
|
106
|
+
invariant(forkOptions.url.startsWith("http"), "Fork URL must start with http:// or https://");
|
|
107
|
+
this.overrideArg(`--fork-chain-from-rpc=${forkOptions.url}`);
|
|
108
|
+
}
|
|
109
|
+
if (forkOptions.blockHash) {
|
|
110
|
+
this.overrideArg(`--block=${forkOptions.blockHash}`);
|
|
111
|
+
}
|
|
112
|
+
if (forkOptions.stateOverridePath) {
|
|
113
|
+
this.overrideArg(`--fork-state-overrides=${forkOptions.stateOverridePath}`);
|
|
114
|
+
}
|
|
115
|
+
if (forkOptions.verbose) {
|
|
116
|
+
this.overrideArg("-llazy-loading=trace");
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Cache startup artifacts if enabled in launchSpec.
|
|
121
|
+
* This uses an Effect-based service that caches artifacts by binary hash.
|
|
122
|
+
*
|
|
123
|
+
* When cacheStartupArtifacts is enabled, this generates:
|
|
124
|
+
* 1. Precompiled WASM for the runtime
|
|
125
|
+
* 2. Raw chain spec to skip genesis WASM compilation
|
|
126
|
+
*
|
|
127
|
+
* This reduces startup from ~3s to ~200ms (~10x improvement).
|
|
128
|
+
*/
|
|
129
|
+
async withStartupCache() {
|
|
130
|
+
if (!this.launchSpec.cacheStartupArtifacts) {
|
|
131
|
+
return this;
|
|
132
|
+
}
|
|
133
|
+
// Skip for Docker images
|
|
134
|
+
if (this.launchSpec.useDocker) {
|
|
135
|
+
logger.warn("Startup caching is not supported for Docker images, skipping");
|
|
136
|
+
return this;
|
|
137
|
+
}
|
|
138
|
+
// Extract chain argument from existing args (e.g., "--chain=moonbase-dev")
|
|
139
|
+
const chainArg = this.args.find((arg) => arg.startsWith("--chain"));
|
|
140
|
+
// Check if using --dev flag
|
|
141
|
+
const hasDevFlag = this.args.includes("--dev");
|
|
142
|
+
// Extract chain name from --chain=XXX or --chain XXX
|
|
143
|
+
const existingChainName = chainArg?.match(/--chain[=\s]?(\S+)/)?.[1];
|
|
144
|
+
// We can generate raw chain spec for both --dev mode and explicit --chain=XXX
|
|
145
|
+
const canGenerateRawSpec = hasDevFlag || !!existingChainName;
|
|
146
|
+
const cacheDir = this.launchSpec.startupCacheDir || path.join(process.cwd(), "tmp", "startup-cache");
|
|
147
|
+
const program = StartupCacheService.pipe(Effect.flatMap((service) => service.getCachedArtifacts({
|
|
148
|
+
binPath: this.launchSpec.binPath,
|
|
149
|
+
chainArg,
|
|
150
|
+
cacheDir,
|
|
151
|
+
// Generate raw chain spec for faster startup (works for both --dev and --chain=XXX)
|
|
152
|
+
generateRawChainSpec: canGenerateRawSpec,
|
|
153
|
+
// Pass dev mode flag for proper chain name detection
|
|
154
|
+
isDevMode: hasDevFlag,
|
|
155
|
+
})), Effect.provide(StartupCacheServiceLive));
|
|
156
|
+
try {
|
|
157
|
+
const result = await Effect.runPromise(program);
|
|
158
|
+
// --wasmtime-precompiled expects a DIRECTORY, not a file path
|
|
159
|
+
// Get the directory containing the precompiled wasm
|
|
160
|
+
const precompiledDir = path.dirname(result.precompiledPath);
|
|
161
|
+
this.overrideArg(`--wasmtime-precompiled=${precompiledDir}`);
|
|
162
|
+
// If we have a raw chain spec, use it for ~10x faster startup
|
|
163
|
+
if (result.rawChainSpecPath) {
|
|
164
|
+
if (hasDevFlag) {
|
|
165
|
+
// Remove --dev flag and add equivalent flags
|
|
166
|
+
this.args = this.args.filter((arg) => arg !== "--dev");
|
|
167
|
+
this.overrideArg(`--chain=${result.rawChainSpecPath}`);
|
|
168
|
+
// Add flags that --dev would normally set
|
|
169
|
+
this.overrideArg("--alice");
|
|
170
|
+
this.overrideArg("--force-authoring");
|
|
171
|
+
this.overrideArg("--rpc-cors=all");
|
|
172
|
+
// Use a deterministic node key for consistency
|
|
173
|
+
this.overrideArg("--node-key=0000000000000000000000000000000000000000000000000000000000000001");
|
|
174
|
+
}
|
|
175
|
+
else if (existingChainName) {
|
|
176
|
+
// Replace original --chain=XXX with --chain=<raw-spec-path>
|
|
177
|
+
this.overrideArg(`--chain=${result.rawChainSpecPath}`);
|
|
178
|
+
}
|
|
179
|
+
logger.debug(`Using raw chain spec for ~10x faster startup: ${result.rawChainSpecPath}`);
|
|
180
|
+
}
|
|
181
|
+
// Set cache directory env var for metadata caching in provider factories
|
|
182
|
+
process.env.MOONWALL_CACHE_DIR = precompiledDir;
|
|
183
|
+
logger.debug(result.fromCache
|
|
184
|
+
? `Using cached precompiled WASM: ${result.precompiledPath}`
|
|
185
|
+
: `Precompiled WASM created: ${result.precompiledPath}`);
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
// Log warning but continue without precompilation
|
|
189
|
+
logger.warn(`WASM precompilation failed, continuing without: ${error}`);
|
|
190
|
+
}
|
|
191
|
+
return this;
|
|
192
|
+
}
|
|
193
|
+
build() {
|
|
194
|
+
return {
|
|
195
|
+
cmd: this.cmd,
|
|
196
|
+
args: this.args,
|
|
197
|
+
launch: this.launch,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
static async create(options) {
|
|
201
|
+
const parser = new LaunchCommandParser(options);
|
|
202
|
+
const parsed = await parser
|
|
203
|
+
.withPorts()
|
|
204
|
+
.then((p) => p.withDefaultForkConfig().withLaunchOverrides())
|
|
205
|
+
.then((p) => p.withStartupCache());
|
|
206
|
+
if (options.verbose) {
|
|
207
|
+
parsed.print();
|
|
208
|
+
}
|
|
209
|
+
return parsed.build();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
export function parseChopsticksRunCmd(launchSpecs) {
|
|
213
|
+
const launch = !launchSpecs[0].running ? true : launchSpecs[0].running;
|
|
214
|
+
if (launchSpecs.length === 1) {
|
|
215
|
+
const chopsticksCmd = "node";
|
|
216
|
+
const chopsticksArgs = [
|
|
217
|
+
"node_modules/@acala-network/chopsticks/chopsticks.cjs",
|
|
218
|
+
`--config=${launchSpecs[0].configPath}`,
|
|
219
|
+
`--host=${launchSpecs[0].address ?? "127.0.0.1"}`,
|
|
220
|
+
];
|
|
221
|
+
const mode = launchSpecs[0].buildBlockMode ? launchSpecs[0].buildBlockMode : "manual";
|
|
222
|
+
const num = mode === "batch" ? "Batch" : mode === "instant" ? "Instant" : "Manual";
|
|
223
|
+
chopsticksArgs.push(`--build-block-mode=${num}`);
|
|
224
|
+
if (launchSpecs[0].wsPort) {
|
|
225
|
+
chopsticksArgs.push(`--port=${launchSpecs[0].wsPort}`);
|
|
226
|
+
}
|
|
227
|
+
if (launchSpecs[0].wasmOverride) {
|
|
228
|
+
chopsticksArgs.push(`--wasm-override=${launchSpecs[0].wasmOverride}`);
|
|
229
|
+
}
|
|
230
|
+
if (launchSpecs[0].allowUnresolvedImports) {
|
|
231
|
+
chopsticksArgs.push("--allow-unresolved-imports");
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
cmd: chopsticksCmd,
|
|
235
|
+
args: chopsticksArgs,
|
|
236
|
+
launch,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
const chopsticksCmd = "node";
|
|
240
|
+
const chopsticksArgs = ["node_modules/@acala-network/chopsticks/chopsticks.cjs", "xcm"];
|
|
241
|
+
for (const spec of launchSpecs) {
|
|
242
|
+
const type = spec.type ? spec.type : "parachain";
|
|
243
|
+
switch (type) {
|
|
244
|
+
case "parachain":
|
|
245
|
+
chopsticksArgs.push(`--parachain=${spec.configPath}`);
|
|
246
|
+
break;
|
|
247
|
+
case "relaychain":
|
|
248
|
+
chopsticksArgs.push(`--relaychain=${spec.configPath}`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return {
|
|
252
|
+
cmd: chopsticksCmd,
|
|
253
|
+
args: chopsticksArgs,
|
|
254
|
+
launch,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Check if a port is available for use
|
|
259
|
+
*/
|
|
260
|
+
const isPortAvailable = async (port) => {
|
|
261
|
+
return new Promise((resolve) => {
|
|
262
|
+
const server = net.createServer();
|
|
263
|
+
server.listen(port, () => {
|
|
264
|
+
server.once("close", () => resolve(true));
|
|
265
|
+
server.close();
|
|
266
|
+
});
|
|
267
|
+
server.on("error", () => resolve(false));
|
|
268
|
+
});
|
|
269
|
+
};
|
|
270
|
+
/**
|
|
271
|
+
* Get the next available port starting from a given port
|
|
272
|
+
*/
|
|
273
|
+
const getNextAvailablePort = async (startPort) => {
|
|
274
|
+
let port = startPort;
|
|
275
|
+
while (port <= 65535) {
|
|
276
|
+
if (await isPortAvailable(port)) {
|
|
277
|
+
return port;
|
|
278
|
+
}
|
|
279
|
+
port++;
|
|
280
|
+
}
|
|
281
|
+
throw new Error(`No available ports found starting from ${startPort}`);
|
|
282
|
+
};
|
|
283
|
+
/**
|
|
284
|
+
* Get a free port with availability checking
|
|
285
|
+
* Uses async port allocation for better collision avoidance
|
|
286
|
+
*/
|
|
287
|
+
export const getFreePort = async () => {
|
|
288
|
+
// Get shard information from centralized manager
|
|
289
|
+
const shardIndex = shardManager.getShardIndex();
|
|
290
|
+
const totalShards = shardManager.getTotalShards();
|
|
291
|
+
// Use VITEST_POOL_ID as additional offset if available
|
|
292
|
+
const poolId = parseInt(process.env.VITEST_POOL_ID || "0", 10);
|
|
293
|
+
// Calculate port with better isolation between shards
|
|
294
|
+
// Base port 10000 + (shard * 1000) + (pool * 100) + deterministic offset
|
|
295
|
+
const basePort = 10000;
|
|
296
|
+
const shardOffset = shardIndex * 1000;
|
|
297
|
+
const poolOffset = poolId * 100;
|
|
298
|
+
// Use a deterministic but unique offset based on environment
|
|
299
|
+
const processOffset = process.pid % 50;
|
|
300
|
+
const calculatedPort = basePort + shardOffset + poolOffset + processOffset;
|
|
301
|
+
// Ensure we stay within a reasonable port range
|
|
302
|
+
const startPort = Math.min(calculatedPort, 60000 + shardIndex * 100 + poolId);
|
|
303
|
+
logger.debug(`Port calculation: shard=${shardIndex + 1}/${totalShards}, pool=${poolId}, final=${startPort}`);
|
|
304
|
+
return getNextAvailablePort(startPort);
|
|
305
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deriveTestIds.d.ts","sourceRoot":"","sources":["../../../src/cli/internal/deriveTestIds.ts"],"names":[],"mappings":"AAMA,UAAU,oBAAoB;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,oBAAoB,iBAiD/D"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import { confirm } from "@inquirer/prompts";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { hasSuiteDefinition, replaceSuiteId } from "./testIdParser.js";
|
|
6
|
+
export async function deriveTestIds(params) {
|
|
7
|
+
const usedPrefixes = new Set();
|
|
8
|
+
const { rootDir, singlePrefix } = params;
|
|
9
|
+
try {
|
|
10
|
+
await fs.promises.access(rootDir, fs.constants.R_OK);
|
|
11
|
+
}
|
|
12
|
+
catch (_error) {
|
|
13
|
+
console.error(`🔴 Error accessing directory ${chalk.bold(`/${rootDir}`)}, please make sure this exists`);
|
|
14
|
+
process.exitCode = 1;
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
console.log(`🟢 Processing ${rootDir} ...`);
|
|
18
|
+
const topLevelDirs = getTopLevelDirs(rootDir);
|
|
19
|
+
const foldersToRename = [];
|
|
20
|
+
if (singlePrefix) {
|
|
21
|
+
const prefix = generatePrefix(rootDir, usedPrefixes, params.prefixPhrase);
|
|
22
|
+
foldersToRename.push({ prefix, dir: "." });
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
for (const dir of topLevelDirs) {
|
|
26
|
+
const prefix = generatePrefix(dir, usedPrefixes, params.prefixPhrase);
|
|
27
|
+
foldersToRename.push({ prefix, dir });
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const result = await confirm({
|
|
31
|
+
message: `This will rename ${foldersToRename.length} suites IDs in ${rootDir}, continue?`,
|
|
32
|
+
});
|
|
33
|
+
if (!result) {
|
|
34
|
+
console.log("🔴 Aborted");
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
for (const folder of foldersToRename) {
|
|
38
|
+
const { prefix, dir } = folder;
|
|
39
|
+
process.stdout.write(`🟢 Changing suite ${dir} to use prefix ${chalk.bold(`(${prefix})`)} ....`);
|
|
40
|
+
generateId(path.join(rootDir, dir), rootDir, prefix);
|
|
41
|
+
process.stdout.write(" Done ✅\n");
|
|
42
|
+
}
|
|
43
|
+
console.log(`🏁 Finished renaming rootdir ${chalk.bold(`/${rootDir}`)}`);
|
|
44
|
+
}
|
|
45
|
+
function getTopLevelDirs(rootDir) {
|
|
46
|
+
return fs
|
|
47
|
+
.readdirSync(rootDir)
|
|
48
|
+
.filter((dir) => fs.statSync(path.join(rootDir, dir)).isDirectory());
|
|
49
|
+
}
|
|
50
|
+
function generatePrefix(directory, usedPrefixes, rootPrefix) {
|
|
51
|
+
const sanitizedDir = directory.replace(/[-_ ]/g, "").toUpperCase();
|
|
52
|
+
let prefix = rootPrefix ?? sanitizedDir[0];
|
|
53
|
+
let additionalIndex = 1;
|
|
54
|
+
while (usedPrefixes.has(prefix) && additionalIndex < sanitizedDir.length) {
|
|
55
|
+
prefix += rootPrefix?.[additionalIndex] ?? sanitizedDir[additionalIndex];
|
|
56
|
+
additionalIndex++;
|
|
57
|
+
}
|
|
58
|
+
let numericSuffix = 0;
|
|
59
|
+
while (usedPrefixes.has(prefix)) {
|
|
60
|
+
if (numericSuffix < 10) {
|
|
61
|
+
numericSuffix++;
|
|
62
|
+
prefix = sanitizedDir[0] + numericSuffix.toString();
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
let lastChar = prefix.slice(-1).charCodeAt(0);
|
|
66
|
+
if (lastChar >= 90) {
|
|
67
|
+
// 'Z'
|
|
68
|
+
lastChar = 65; // 'A'
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
lastChar++;
|
|
72
|
+
}
|
|
73
|
+
prefix = sanitizedDir[0] + String.fromCharCode(lastChar);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
usedPrefixes.add(prefix);
|
|
77
|
+
return prefix;
|
|
78
|
+
}
|
|
79
|
+
function generateId(directory, rootDir, prefix) {
|
|
80
|
+
const contents = fs.readdirSync(directory);
|
|
81
|
+
contents.sort((a, b) => {
|
|
82
|
+
const aIsDir = fs.statSync(path.join(directory, a)).isDirectory();
|
|
83
|
+
const bIsDir = fs.statSync(path.join(directory, b)).isDirectory();
|
|
84
|
+
if (aIsDir && !bIsDir)
|
|
85
|
+
return -1;
|
|
86
|
+
if (!aIsDir && bIsDir)
|
|
87
|
+
return 1;
|
|
88
|
+
return customFileSort(a, b);
|
|
89
|
+
});
|
|
90
|
+
let fileCount = 1;
|
|
91
|
+
let subDirCount = 1;
|
|
92
|
+
for (const item of contents) {
|
|
93
|
+
const fullPath = path.join(directory, item);
|
|
94
|
+
if (fs.statSync(fullPath).isDirectory()) {
|
|
95
|
+
const subDirPrefix = `0${subDirCount}`.slice(-2);
|
|
96
|
+
generateId(fullPath, rootDir, prefix + subDirPrefix);
|
|
97
|
+
subDirCount++;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
const fileContent = fs.readFileSync(fullPath, "utf-8");
|
|
101
|
+
if (hasSuiteDefinition(fileContent)) {
|
|
102
|
+
const newId = prefix + `0${fileCount}`.slice(-2);
|
|
103
|
+
const updatedContent = replaceSuiteId(fileContent, newId);
|
|
104
|
+
if (updatedContent) {
|
|
105
|
+
fs.writeFileSync(fullPath, updatedContent);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
fileCount++;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function hasSpecialCharacters(filename) {
|
|
113
|
+
return /[ \t!@#$%^&*()_+\-=[\]{};':"\\|,.<>/?]+/.test(filename);
|
|
114
|
+
}
|
|
115
|
+
function customFileSort(a, b) {
|
|
116
|
+
const aHasSpecialChars = hasSpecialCharacters(a);
|
|
117
|
+
const bHasSpecialChars = hasSpecialCharacters(b);
|
|
118
|
+
if (aHasSpecialChars && !bHasSpecialChars)
|
|
119
|
+
return -1;
|
|
120
|
+
if (!aHasSpecialChars && bHasSpecialChars)
|
|
121
|
+
return 1;
|
|
122
|
+
return a.localeCompare(b, undefined, { sensitivity: "accent" });
|
|
123
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/internal/effect/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,2CAA2C"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function checkExists(path: string): Promise<boolean>;
|
|
2
|
+
export declare function downloadBinsIfMissing(binPath: string): Promise<void>;
|
|
3
|
+
export declare function checkListeningPorts(processId: number): {
|
|
4
|
+
binName: string;
|
|
5
|
+
processId: number;
|
|
6
|
+
ports: string[];
|
|
7
|
+
};
|
|
8
|
+
export declare function checkAlreadyRunning(binaryName: string): number[];
|
|
9
|
+
export declare function promptAlreadyRunning(pids: number[]): Promise<void>;
|
|
10
|
+
export declare function checkAccess(path: string): void;
|
|
11
|
+
//# sourceMappingURL=fileCheckers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileCheckers.d.ts","sourceRoot":"","sources":["../../../src/cli/internal/fileCheckers.ts"],"names":[],"mappings":"AAOA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,oBA0B7C;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,iBAuC1D;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM;;;;EA0BpD;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAgBhE;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,iBAgCxD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,QAQvC"}
|