"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.MetadataProcessor = void 0;
const factory_1 = require("./factory");
const logger_1 = __importDefault(require("../utils/logger"));
class MetadataProcessor {
async processMetadata(metadata, metadataType, orgId) {
try {
const context = {
orgId,
metadataType,
originalMetadata: metadata
};
const chunker = factory_1.ChunkerFactory.getChunker(metadataType, context);
const chunks = chunker.chunkMetadata(metadata);
logger_1.default.info(`Processed ${metadataType} ${metadata.fullName || metadata.name} into ${chunks.length} chunks`);
return this.enrichChunks(chunks, metadataType);
}
catch (error) {
logger_1.default.error(`Failed to process metadata ${metadata.fullName || metadata.name}`, { error });
throw error;
}
}
async enrichChunks(chunks, metadataType) {
return chunks.map(chunk => this.enrichChunk(chunk));
}
enrichChunk(chunk) {
// Extract additional symbols based on content patterns
const additionalSymbols = this.extractAdvancedSymbols(chunk.content);
// Merge with existing symbols, removing duplicates
const allSymbols = [...new Set([...chunk.symbols, ...additionalSymbols])];
return {
...chunk,
symbols: allSymbols
};
}
extractAdvancedSymbols(content) {
const symbols = new Set();
// Extract DML operations
const dmlMatches = content.match(/\b(insert|update|delete|undelete|upsert)\s+\w+/gi) || [];
dmlMatches.forEach(match => symbols.add(match.toLowerCase()));
// Extract SOQL queries - find SELECT statements
const soqlMatches = content.match(/SELECT\s+[\s\S]*?\s+FROM\s+(\w+)/gi) || [];
soqlMatches.forEach(match => {
const fromMatch = match.match(/FROM\s+(\w+)/i);
if (fromMatch) {
symbols.add(fromMatch[1]);
}
});
// Extract Schema references
const schemaMatches = content.match(/Schema\.SObjectType\.(\w+)/g) || [];
schemaMatches.forEach(match => {
const objectMatch = match.match(/Schema\.SObjectType\.(\w+)/);
if (objectMatch) {
symbols.add(objectMatch[1]);
}
});
// Extract System/UserInfo methods
const systemMatches = content.match(/\b(System\.\w+|UserInfo\.\w+)/g) || [];
systemMatches.forEach(match => symbols.add(match));
return Array.from(symbols);
}
}
exports.MetadataProcessor = MetadataProcessor;