@memory-bank/mcp
Version:
Memory-enabled Co-Pilot (MCP) server for managing project documentation and context
93 lines • 3.52 kB
JavaScript
/**
* JSON Template Loader
* Loads and processes JSON templates with internationalization support
*/
import path from 'node:path';
const validateJsonTemplate = (data) => data; // Dummy validator
import { TemplateRenderer } from './TeplateRenderer.js';
import { logger } from '../../shared/utils/logger.js';
/**
* Implementation of ITemplateLoader for JSON templates
*/
export class JsonTemplateLoader {
fileSystemService;
i18nProvider;
templateRenderer;
// Legacy patterns removed as per user request
/**
* Constructor
*
* @param fileSystemService Service for file system operations
* @param i18nProvider Provider for internationalization services
*/
constructor(fileSystemService, i18nProvider) {
this.fileSystemService = fileSystemService;
this.i18nProvider = i18nProvider;
this.templateRenderer = new TemplateRenderer(i18nProvider);
}
/**
* Gets the JSON templates directory path
*/
getJsonTemplatesDirectory() {
// Use project-relative paths instead of import.meta.url
return path.join(process.cwd(), 'src/templates/json');
}
// Legacy directory method removed
/**
* Implements ITemplateLoader.loadJsonTemplate
*/
async loadJsonTemplate(templateId) {
const templatePath = path.join(this.getJsonTemplatesDirectory(), `${templateId}.json`);
try {
// Check if file exists
const exists = await this.fileSystemService.fileExists(templatePath);
if (!exists) {
throw new Error(`Template not found: ${templateId}`);
}
// Read template file
const content = await this.fileSystemService.readFile(templatePath);
// Parse and validate template
const template = JSON.parse(content);
return validateJsonTemplate(template);
}
catch (error) {
// If it's a SyntaxError (JSON parse error), rethrow it directly
// so the caller can potentially identify it specifically.
if (error instanceof SyntaxError) {
throw error;
}
// Otherwise, wrap it in a generic load error message.
throw new Error(`Failed to load JSON template ${templateId}: ${error.message}`);
}
}
/**
* Implements ITemplateLoader.getMarkdownTemplate
*/
async getMarkdownTemplate(templateId, language, variables) {
// Check if language is supported
if (!this.i18nProvider.isLanguageSupported(language)) {
throw new Error(`Unsupported language: ${language}`);
}
try {
// Load the JSON template
const template = await this.loadJsonTemplate(templateId);
// Render to Markdown
return this.templateRenderer.renderToMarkdown(template, language, variables);
}
catch (error) {
// Legacy fallback removed, rethrow the original error
logger.error(`Failed to load or render JSON template ${templateId}`, { error });
throw error;
}
}
// loadLegacyTemplate method removed
/**
* Implements ITemplateLoader.templateExists
*/
async templateExists(templateId) {
const jsonPath = path.join(this.getJsonTemplatesDirectory(), `${templateId}.json`);
return this.fileSystemService.fileExists(jsonPath);
}
}
// Remove extra closing bracket
//# sourceMappingURL=JsonTemplateLoader.js.map