UNPKG

gather-ts

Version:

A powerful code analysis and packaging tool designed for creating AI-friendly code representations for javascript and typescript projects.

203 lines 9.12 kB
"use strict"; // src/container/ContainerConfig.ts Object.defineProperty(exports, "__esModule", { value: true }); exports.cleanupContainer = exports.initializeContainer = exports.configureContainer = void 0; const Container_1 = require("./Container"); const ConfigManager_1 = require("../config/ConfigManager"); const IgnoreHandler_1 = require("../core/dependency/IgnoreHandler"); const TokenCounter_1 = require("../core/tokenization/TokenCounter"); const TokenCache_1 = require("../core/tokenization/TokenCache"); const ErrorHandler_1 = require("../errors/handlers/ErrorHandler"); const ErrorUtils_1 = require("../errors/utils/ErrorUtils"); const FileSystem_1 = require("../utils/filesystem/FileSystem"); const DependencyAnalyzer_1 = require("../core/dependency/DependencyAnalyzer"); const Logger_1 = require("../utils/logging/Logger"); const Validator_1 = require("../utils/validation/Validator"); const ArgumentParser_1 = require("../core/compiler/ArgumentParser"); const compiler_1 = require("@/core/compiler"); const TemplateManager_1 = require("@/core/templating/TemplateManager"); const DefaultTemplates_1 = require("@/core/templating/DefaultTemplates"); async function configureContainer(projectRoot, options = {}) { const container = Container_1.Container.getInstance(options.debug); try { // First, create and initialize the logger container.registerFactory(Container_1.ServiceTokens.LOGGER, () => { return new Logger_1.Logger({ outputStream: process.stdout, errorStream: process.stderr, }, { enableDebug: options.debug, timestamp: options.debug, logLevel: options.debug ? "debug" : "info", }); }); const logger = container.resolve(Container_1.ServiceTokens.LOGGER); await logger.initialize(); logger.debug("Configuring container services..."); // Register FileSystem container.registerFactory(Container_1.ServiceTokens.FILE_SYSTEM, () => { return new FileSystem_1.FileSystem({ logger }, { debug: options.debug }); }); const fileSystem = container.resolve(Container_1.ServiceTokens.FILE_SYSTEM); await fileSystem.initialize(); // Register Validator container.registerFactory(Container_1.ServiceTokens.VALIDATOR, () => { return new Validator_1.Validator({ logger }, { debug: options.debug }); }); const validator = container.resolve(Container_1.ServiceTokens.VALIDATOR); await validator.initialize(); // Register ErrorUtils container.registerFactory(Container_1.ServiceTokens.ERROR_UTILS, () => { return new ErrorUtils_1.ErrorUtils({ logger }, { debug: options.debug }); }); const errorUtils = container.resolve(Container_1.ServiceTokens.ERROR_UTILS); await errorUtils.initialize(); // Register ErrorHandler container.registerFactory(Container_1.ServiceTokens.ERROR_HANDLER, () => { return new ErrorHandler_1.ErrorHandler({ fileSystem, logger, errorUtils, }, { logToConsole: true, logToFile: options.debug, logFilePath: options.debug ? fileSystem.joinPath(projectRoot, ".gather-ts", "error.log") : undefined, debug: options.debug, }); }); const errorHandler = container.resolve(Container_1.ServiceTokens.ERROR_HANDLER); await errorHandler.initialize(); // Register ConfigManager container.registerFactory(Container_1.ServiceTokens.CONFIG_MANAGER, () => { return new ConfigManager_1.ConfigManager(projectRoot, { fileSystem, logger, validator, }, { debug: options.debug }); }); const configManager = container.resolve(Container_1.ServiceTokens.CONFIG_MANAGER); await configManager.initialize(); // Register TokenCache container.registerFactory(Container_1.ServiceTokens.TOKEN_CACHE, () => { return new TokenCache_1.TokenCache(projectRoot, { fileSystem, logger, }, { debug: options.debug, maxCacheAge: options.maxCacheAge, }); }); const tokenCache = container.resolve(Container_1.ServiceTokens.TOKEN_CACHE); await tokenCache.initialize(); // Register IgnoreHandler container.registerFactory(Container_1.ServiceTokens.IGNORE_HANDLER, () => { return new IgnoreHandler_1.IgnoreHandler(projectRoot, { fileSystem, logger, }, { debug: options.debug }); }); const ignoreHandler = container.resolve(Container_1.ServiceTokens.IGNORE_HANDLER); await ignoreHandler.initialize(); // Register TokenCounter container.registerFactory(Container_1.ServiceTokens.TOKEN_COUNTER, () => { return new TokenCounter_1.TokenCounter({ configManager, fileSystem, logger, cache: tokenCache, }, { debug: options.debug, batchSize: options.batchSize, }); }); const tokenCounter = container.resolve(Container_1.ServiceTokens.TOKEN_COUNTER); await tokenCounter.initialize(); // Register DependencyAnalyzer container.registerFactory(Container_1.ServiceTokens.DEPENDENCY_ANALYZER, () => { return new DependencyAnalyzer_1.DependencyAnalyzer({ fileSystem, logger, ignoreHandler, }, { debug: options.debug, fileExtensions: options.fileExtensions, tsConfigPath: options.customTsConfigPath, }); }); const dependencyAnalyzer = container.resolve(Container_1.ServiceTokens.DEPENDENCY_ANALYZER); await dependencyAnalyzer.initialize(); // Register ArgumentParser container.registerFactory(Container_1.ServiceTokens.ARGUMENT_PARSER, () => { return new ArgumentParser_1.ArgumentParser({ logger, fileSystem, validator, }, { debug: options.debug }); }); const argumentParser = container.resolve(Container_1.ServiceTokens.ARGUMENT_PARSER); await argumentParser.initialize(); container.registerFactory(Container_1.ServiceTokens.TEMPLATE_MANAGER, () => { return new TemplateManager_1.TemplateManager({ logger }, { debug: options.debug }); }); const templateManager = container.resolve(Container_1.ServiceTokens.TEMPLATE_MANAGER); await templateManager.initialize(); // Register Compiler container.registerFactory(Container_1.ServiceTokens.COMPILER, () => { return new compiler_1.CompileContext({ configManager, ignoreHandler, tokenCounter, errorHandler, dependencyAnalyzer, logger, fileSystem, templateManager, }, { debug: options.debug, batchSize: options.batchSize, }); }); const compiler = container.resolve(Container_1.ServiceTokens.COMPILER); await compiler.initialize(); // Register default templates (0, DefaultTemplates_1.registerDefaultTemplates)(templateManager); logger.debug("Container configuration complete"); return container; } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); throw new Error(`Failed to configure container: ${errorMessage}`); } } exports.configureContainer = configureContainer; async function initializeContainer(container) { const logger = container.resolve(Container_1.ServiceTokens.LOGGER); try { logger.debug("Starting container initialization"); await container.initialize(); logger.debug("Container initialization complete"); } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); logger.error(`Failed to initialize container: ${errorMessage}`); throw error; } } exports.initializeContainer = initializeContainer; function cleanupContainer(container) { try { const logger = container.resolve(Container_1.ServiceTokens.LOGGER); logger.debug("Starting container cleanup"); container.cleanup(); logger.debug("Container cleanup complete"); } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); console.error(`Failed to cleanup container: ${errorMessage}`); throw error; } } exports.cleanupContainer = cleanupContainer; //# sourceMappingURL=ContainerConfig.js.map