"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ConfidenceScorer = void 0;
class ConfidenceScorer {
static scoreResourceLocatorRecommendation(fieldName, nodeType, value) {
const factors = [];
let totalWeight = 0;
let matchedWeight = 0;
const exactFieldMatch = this.checkExactFieldMatch(fieldName, nodeType);
factors.push({
name: 'exact-field-match',
weight: 0.5,
matched: exactFieldMatch,
description: `Field name '${fieldName}' is known to use resource locator in ${nodeType}`
});
const patternMatch = this.checkFieldPattern(fieldName);
factors.push({
name: 'field-pattern',
weight: 0.3,
matched: patternMatch,
description: `Field name '${fieldName}' matches common resource locator patterns`
});
const valuePattern = this.checkValuePattern(value);
factors.push({
name: 'value-pattern',
weight: 0.1,
matched: valuePattern,
description: 'Value contains patterns typical of resource identifiers'
});
const nodeCategory = this.checkNodeCategory(nodeType);
factors.push({
name: 'node-category',
weight: 0.1,
matched: nodeCategory,
description: `Node type '${nodeType}' typically uses resource locators`
});
for (const factor of factors) {
totalWeight += factor.weight;
if (factor.matched) {
matchedWeight += factor.weight;
}
}
const score = totalWeight > 0 ? matchedWeight / totalWeight : 0;
let reason;
if (score >= 0.8) {
reason = 'High confidence: Multiple strong indicators suggest resource locator format';
}
else if (score >= 0.5) {
reason = 'Medium confidence: Some indicators suggest resource locator format';
}
else if (score >= 0.3) {
reason = 'Low confidence: Weak indicators for resource locator format';
}
else {
reason = 'Very low confidence: Minimal evidence for resource locator format';
}
return {
value: score,
reason,
factors
};
}
static checkExactFieldMatch(fieldName, nodeType) {
const nodeBase = nodeType.split('.').pop()?.toLowerCase() || '';
for (const [pattern, fields] of Object.entries(this.EXACT_FIELD_MAPPINGS)) {
if (nodeBase === pattern || nodeBase.startsWith(`${pattern}-`)) {
return fields.includes(fieldName);
}
}
return false;
}
static checkFieldPattern(fieldName) {
return this.FIELD_PATTERNS.some(pattern => pattern.test(fieldName));
}
static checkValuePattern(value) {
const content = value.startsWith('=') ? value.substring(1) : value;
if (!content.includes('{{') || !content.includes('}}')) {
return false;
}
const patterns = [
/\{\{.*\.(id|Id|ID|key|Key|name|Name|path|Path|url|Url|uri|Uri).*\}\}/i,
/\{\{.*_(id|Id|ID|key|Key|name|Name|path|Path|url|Url|uri|Uri).*\}\}/i,
/\{\{.*(id|Id|ID|key|Key|name|Name|path|Path|url|Url|uri|Uri).*\}\}/i
];
return patterns.some(pattern => pattern.test(content));
}
static checkNodeCategory(nodeType) {
const nodeBase = nodeType.split('.').pop()?.toLowerCase() || '';
return this.RESOURCE_HEAVY_NODES.some(category => nodeBase.includes(category));
}
static getConfidenceLevel(score) {
if (score >= 0.8)
return 'high';
if (score >= 0.5)
return 'medium';
if (score >= 0.3)
return 'low';
return 'very-low';
}
static shouldApplyRecommendation(score, threshold = 'normal') {
const thresholds = {
strict: 0.8,
normal: 0.5,
relaxed: 0.3
};
return score >= thresholds[threshold];
}
}
exports.ConfidenceScorer = ConfidenceScorer;
ConfidenceScorer.EXACT_FIELD_MAPPINGS = {
'github': ['owner', 'repository', 'user', 'organization'],
'googlesheets': ['sheetId', 'documentId', 'spreadsheetId'],
'googledrive': ['fileId', 'folderId', 'driveId'],
'slack': ['channel', 'user', 'channelId', 'userId'],
'notion': ['databaseId', 'pageId', 'blockId'],
'airtable': ['baseId', 'tableId', 'viewId']
};
ConfidenceScorer.FIELD_PATTERNS = [
/^.*Id$/i,
/^.*Ids$/i,
/^.*Key$/i,
/^.*Name$/i,
/^.*Path$/i,
/^.*Url$/i,
/^.*Uri$/i,
/^(table|database|collection|bucket|folder|file|document|sheet|board|project|issue|user|channel|team|organization|repository|owner)$/i
];
ConfidenceScorer.RESOURCE_HEAVY_NODES = [
'github', 'gitlab', 'bitbucket',
'googlesheets', 'googledrive', 'dropbox',
'slack', 'discord', 'telegram',
'notion', 'airtable', 'baserow',
'jira', 'asana', 'trello', 'monday',
'salesforce', 'hubspot', 'pipedrive',
'stripe', 'paypal', 'square',
'aws', 'gcp', 'azure',
'mysql', 'postgres', 'mongodb', 'redis'
];
//# sourceMappingURL=confidence-scorer.js.map