#!/usr/bin/env nu # Module Registry - Command-to-Modules Mapping # Fase 2: Lazy Loading Inteligente # Maps commands to their required modules for dynamic loading # This enables loading only necessary modules instead of all 362 # Follows: @.claude/guidelines/nushell/NUSHELL_GUIDELINES.md # === INFRASTRUCTURE COMMANDS === export const INFRASTRUCTURE_MODULES = [ "lib_provisioning/config/loader.nu" "lib_provisioning/workspace/enforcement.nu" "lib_provisioning/utils/interface.nu" "servers/utils.nu" "servers/ssh.nu" ] # === TASKSERV COMMANDS === export const TASKSERV_MODULES = [ "lib_provisioning/config/loader.nu" "lib_provisioning/utils/interface.nu" "taskservs/utils.nu" "lib_provisioning/defs/lists.nu" ] # === CLUSTER COMMANDS === export const CLUSTER_MODULES = [ "lib_provisioning/config/loader.nu" "lib_provisioning/utils/interface.nu" "clusters/utils.nu" ] # === WORKSPACE COMMANDS === # Note: Fast-path commands (list, active) use lib_minimal.nu # Only switch/register/etc need full module loading export const WORKSPACE_MODULES = [ "lib_provisioning/config/loader.nu" "lib_provisioning/user/config.nu" "lib_provisioning/workspace/commands.nu" "lib_provisioning/workspace/enforcement.nu" "lib_provisioning/utils/interface.nu" ] # === ORCHESTRATION COMMANDS === export const ORCHESTRATION_MODULES = [ "lib_provisioning/config/loader.nu" "lib_provisioning/platform/bootstrap.nu" "lib_provisioning/utils/interface.nu" "main_provisioning/orchestrator.nu" ] # === CONFIGURATION/VALIDATION COMMANDS === export const CONFIG_MODULES = [ "lib_provisioning/config/loader.nu" "lib_provisioning/config/validator.nu" "lib_provisioning/utils/interface.nu" "main_provisioning/validate.nu" ] # === DEVELOPMENT COMMANDS === export const DEVELOPMENT_MODULES = [ "lib_provisioning/config/loader.nu" "lib_provisioning/defs/lists.nu" "lib_provisioning/utils/interface.nu" "main_provisioning/commands/development.nu" "main_provisioning/version.nu" ] # === CORE COMMON MODULES (Always needed for any full command) === export const CORE_MODULES = [ "std log" "lib_provisioning/utils/interface.nu" "main_provisioning/flags.nu" ] # === COMMAND TO MODULES MAPPING === # Maps first-level commands to required modules # Rule 8: Pure function (read-only lookup) # Rule 1: Explicit types export def get-command-modules [command: string] { let modules = match $command { # Infrastructure - servers, clusters "server" | "servers" | "s" => { ($CORE_MODULES | append $INFRASTRUCTURE_MODULES) } # Infrastructure - taskservs "taskserv" | "taskservs" | "task" | "t" => { ($CORE_MODULES | append $TASKSERV_MODULES) } # Infrastructure - clusters "cluster" | "clusters" | "cl" => { ($CORE_MODULES | append $CLUSTER_MODULES) } # Workspace management (switch, register, etc) # Note: list/active use fast-path "workspace" | "ws" => { ($CORE_MODULES | append $WORKSPACE_MODULES) } # Orchestration/workflow "workflow" | "wf" | "orchestrator" | "orch" => { ($CORE_MODULES | append $ORCHESTRATION_MODULES) } # Configuration validation "validate" | "config" => { ($CORE_MODULES | append $CONFIG_MODULES) } # Development commands "module" | "version" | "layer" => { ($CORE_MODULES | append $DEVELOPMENT_MODULES) } # For all other commands, load common infrastructure _ => { $CORE_MODULES } } $modules | uniq } # Get modules for command (used by main provisioning to decide what to load) # Rule 2: Single purpose - just return modules list # Note: Actual loading is done in main provisioning file with literal 'use' statements export def get-modules-for-command [command: string] { get-command-modules $command } # Get module loading statistics # Rule 8: Pure function, Rule 2: Single purpose export def get-module-stats [] { let infra_count = ($INFRASTRUCTURE_MODULES | length) let taskserv_count = ($TASKSERV_MODULES | length) let cluster_count = ($CLUSTER_MODULES | length) let workspace_count = ($WORKSPACE_MODULES | length) let orch_count = ($ORCHESTRATION_MODULES | length) let config_count = ($CONFIG_MODULES | length) let dev_count = ($DEVELOPMENT_MODULES | length) let core_count = ($CORE_MODULES | length) let total_unique = ( ( $INFRASTRUCTURE_MODULES | append $TASKSERV_MODULES | append $CLUSTER_MODULES | append $WORKSPACE_MODULES | append $ORCHESTRATION_MODULES | append $CONFIG_MODULES | append $DEVELOPMENT_MODULES | append $CORE_MODULES ) | uniq | length ) { core: $core_count infrastructure: $infra_count taskserv: $taskserv_count cluster: $cluster_count workspace: $workspace_count orchestration: $orch_count config: $config_count development: $dev_count total_categories: 8 total_unique_modules: $total_unique estimated_reduction: "362 → 45+ modules (8x reduction)" } } # Display module registry info # Rule 2: Single purpose - just display export def show-module-registry [] { let stats = (get-module-stats) " === Module Registry Statistics === Core Modules: " + ($stats.core | into string) + " Infrastructure: " + ($stats.infrastructure | into string) + " modules Taskserv: " + ($stats.taskserv | into string) + " modules Cluster: " + ($stats.cluster | into string) + " modules Workspace: " + ($stats.workspace | into string) + " modules Orchestration: " + ($stats.orchestration | into string) + " modules Configuration: " + ($stats.config | into string) + " modules Development: " + ($stats.development | into string) + " modules Total Unique: " + ($stats.total_unique_modules | into string) + " modules Estimated: " + $stats.estimated_reduction + " Comparison: - Full Load: 362 modules (4000ms) - Lazy Load: 45 modules (500ms) - Fast-Path: 5 modules (50ms) " }