@memory-bank/mcp
Version:
Memory-enabled Co-Pilot (MCP) server for managing project documentation and context
83 lines • 4.53 kB
JavaScript
// import fs from "fs/promises"; // ★削除 (使わなくなった)
// import fsExtra from "fs-extra"; // Remove fs-extra import for readJson
import path from "path"; // ★元に戻す★
import { DomainError, DomainErrorCodes } from "../../../shared/errors/DomainError.js";
import { logger } from "../../../shared/utils/logger.js";
import { Language } from '../../../domain/i18n/Language.js'; // Import Language class from domain
import { getSafeLanguage } from '@memory-bank/schemas'; // Use package name import
/**
* Use case for reading rules
*/
export class ReadRulesUseCase {
templateLoader;
rulesDir;
supportedLanguages = ['en', 'ja', 'zh'];
/**
* Constructor
* @param rulesDir Rules directory path
* @param templateLoader Template loader (optional)
*/
constructor(rulesDir, templateLoader // Type is already TemplateService, ensure consistency
) {
this.templateLoader = templateLoader;
// Resolve the absolute path for rulesDir upon initialization
this.rulesDir = path.resolve(rulesDir);
logger.debug(`ReadRulesUseCase initialized with resolved rulesDir: ${this.rulesDir}`); // Log resolved rulesDir
}
/**
* Read rules for the specified language
* @param language Language code ('en', 'ja', 'zh')
* @returns Rules content and metadata
* @throws If language is not supported or file is not found
*/
async execute(language) {
logger.debug(`Executing ReadRulesUseCase for language: ${language}`); // Log execution start
// Validate language code
if (!this.supportedLanguages.includes(language)) {
throw new DomainError(DomainErrorCodes.VALIDATION_ERROR, `Unsupported language code: ${language}. Supported languages are: ${this.supportedLanguages.join(', ')}`);
}
// Define the primary path for the rules file
// Older paths were removed as they are deprecated.
// const primaryRulesPath = path.join(this.rulesDir, 'domain', 'templates', `rules-${language}.json`); // ★削除 (使わなくなった)
// const possiblePaths = [primaryRulesPath]; // ★削除 (使わなくなった)
// let jsonContent = ''; // ★削除 (使わなくなった)
// let jsonFilePath = ''; // ★削除 (使わなくなった)
try {
// Add explicit log showing if templateLoader is available
logger.debug(`ReadRulesUseCase: templateLoader available: ${!!this.templateLoader}`);
// Use template loader if provided
if (this.templateLoader) {
try {
logger.debug(`Using template loader to get rules for language: ${language}`);
// Safely convert language code
const safeLanguageCode = getSafeLanguage(language); // Get safe language code ('en', 'ja', or 'zh')
const langObject = new Language(safeLanguageCode); // Instantiate Language class
const templateJsonObject = await this.templateLoader.getTemplateAsJsonObject('rules', langObject // Pass Language object
);
// Return the object directly
return {
content: templateJsonObject, // Return the object
language
};
}
catch (templateError) {
// TemplateService でエラーが発生したら、そのままエラーを投げる
logger.error(`Failed to load rules using template loader: ${templateError instanceof Error ? templateError.message : 'Unknown error'}`);
throw templateError; // エラーを再スロー
}
}
else {
// templateLoader がない場合はエラー (DI設定ミスなど)
throw new Error('TemplateService (templateLoader) is not provided to ReadRulesUseCase.');
}
// --- Fallback 処理は削除 ---
}
catch (error) {
// TemplateService からのエラーはそのまま再スローする
// (エラーメッセージの書き換えはしない)
logger.error(`Error executing ReadRulesUseCase for language ${language}:`, { originalError: error });
throw error; // ★エラーをそのまま再スロー★
}
}
} // ★クラスを閉じる括弧を追加★
//# sourceMappingURL=ReadRulesUseCase.js.map