UNPKG

@moonwall/cli

Version:

Testing framework for the Moon family of projects

89 lines (88 loc) 2.43 kB
// src/lib/shardManager.ts var ShardManager = class _ShardManager { static instance = null; _shardInfo = null; constructor() { } static getInstance() { if (!_ShardManager.instance) { _ShardManager.instance = new _ShardManager(); } return _ShardManager.instance; } /** * Initialize shard configuration from command line argument or environment * @param shardArg Optional shard argument from CLI (format: "current/total") */ initializeSharding(shardArg) { if (shardArg) { this._shardInfo = this.parseShardString(shardArg); process.env.MOONWALL_TEST_SHARD = shardArg; } else if (process.env.MOONWALL_TEST_SHARD) { this._shardInfo = this.parseShardString(process.env.MOONWALL_TEST_SHARD); } else { this._shardInfo = { current: 1, total: 1, isSharded: false }; } } /** * Get current shard information */ getShardInfo() { if (!this._shardInfo) { this.initializeSharding(); } return this._shardInfo; } /** * Get shard index (0-based) for port calculations */ getShardIndex() { return this.getShardInfo().current - 1; } /** * Get total number of shards */ getTotalShards() { return this.getShardInfo().total; } /** * Check if sharding is enabled */ isSharded() { return this.getShardInfo().isSharded; } /** * Reset shard configuration (mainly for testing) */ reset() { this._shardInfo = null; delete process.env.MOONWALL_TEST_SHARD; } parseShardString(shardString) { if (!shardString.includes("/")) { throw new Error( `Invalid shard format: "${shardString}". Expected format: "current/total" (e.g., "1/3")` ); } const [currentStr, totalStr] = shardString.split("/"); const current = parseInt(currentStr, 10); const total = parseInt(totalStr, 10); if (Number.isNaN(current) || Number.isNaN(total) || current < 1 || total < 1) { throw new Error( `Invalid shard numbers in "${shardString}". Both current and total must be positive integers.` ); } if (current > total) { throw new Error( `Invalid shard configuration: current shard ${current} cannot be greater than total ${total}` ); } const isSharded = total > 1; return { current, total, isSharded }; } }; var shardManager = ShardManager.getInstance(); export { ShardManager, shardManager };