UNPKG

@notjustcoders/ioc-arise

Version:

Arise type-safe IoC containers from your code. Zero overhead, zero coupling.

43 lines 2.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ModuleContainerFunctionGenerator = void 0; /** * Coordinates the generation of module container functions. * Delegates specific responsibilities to specialized generators. */ class ModuleContainerFunctionGenerator { constructor(moduleGroupedClasses, signatureGenerator, dependencyResolver, bodyGenerator, importGenerator) { this.moduleGroupedClasses = moduleGroupedClasses; this.signatureGenerator = signatureGenerator; this.dependencyResolver = dependencyResolver; this.bodyGenerator = bodyGenerator; this.importGenerator = importGenerator; } /** * Generates container functions for all modules. */ generateModuleContainerFunctions(sortedModules, moduleDependencies) { const moduleContainerFunctions = []; for (const moduleName of sortedModules) { const moduleClasses = this.moduleGroupedClasses.get(moduleName); if (!moduleClasses) continue; const moduleContainerFunction = this.createModuleContainerFunction(moduleName, moduleClasses, moduleDependencies); moduleContainerFunctions.push(moduleContainerFunction); } return moduleContainerFunctions; } /** * Creates a container function for a specific module. */ createModuleContainerFunction(moduleName, moduleClasses, moduleDependencies) { const moduleFunctionName = `create${moduleName}Container`; const moduleDeps = moduleDependencies.get(moduleName) || new Set(); const functionParams = this.signatureGenerator.generateFunctionParameters(moduleDeps); const functionSignature = this.signatureGenerator.createFunctionSignature(moduleFunctionName, functionParams); const functionBody = this.bodyGenerator.generateModuleFunctionBody(moduleClasses, moduleDeps, this.importGenerator); return `${functionSignature} {\n${functionBody}\n}`; } } exports.ModuleContainerFunctionGenerator = ModuleContainerFunctionGenerator; //# sourceMappingURL=module-container-function-generator.js.map