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
JavaScript
"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