@notjustcoders/ioc-arise
Version:
Arise type-safe IoC containers from your code. Zero overhead, zero coupling.
43 lines • 2.15 kB
JavaScript
;
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