Files
n8n-mcp/dist/services/type-structure-service.js
2025-12-05 12:01:31 +01:00

109 lines
4.2 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TypeStructureService = void 0;
const type_structures_1 = require("../types/type-structures");
const type_structures_2 = require("../constants/type-structures");
class TypeStructureService {
static getStructure(type) {
return type_structures_2.TYPE_STRUCTURES[type] || null;
}
static getAllStructures() {
return { ...type_structures_2.TYPE_STRUCTURES };
}
static getExample(type) {
const structure = this.getStructure(type);
return structure ? structure.example : null;
}
static getExamples(type) {
const structure = this.getStructure(type);
if (!structure)
return [];
return structure.examples || [structure.example];
}
static isComplexType(type) {
return (0, type_structures_1.isComplexType)(type);
}
static isPrimitiveType(type) {
return (0, type_structures_1.isPrimitiveType)(type);
}
static getComplexTypes() {
return Object.entries(type_structures_2.TYPE_STRUCTURES)
.filter(([, structure]) => structure.type === 'collection' || structure.type === 'special')
.filter(([type]) => this.isComplexType(type))
.map(([type]) => type);
}
static getPrimitiveTypes() {
return Object.keys(type_structures_2.TYPE_STRUCTURES).filter((type) => this.isPrimitiveType(type));
}
static getComplexExamples(type) {
return type_structures_2.COMPLEX_TYPE_EXAMPLES[type] || null;
}
static validateTypeCompatibility(value, type) {
const structure = this.getStructure(type);
if (!structure) {
return {
valid: false,
errors: [`Unknown property type: ${type}`],
warnings: [],
};
}
const errors = [];
const warnings = [];
if (value === null || value === undefined) {
if (!structure.validation?.allowEmpty) {
errors.push(`Value is required for type ${type}`);
}
return { valid: errors.length === 0, errors, warnings };
}
const actualType = Array.isArray(value) ? 'array' : typeof value;
const expectedType = structure.jsType;
if (expectedType !== 'any' && actualType !== expectedType) {
const isExpression = typeof value === 'string' && value.includes('{{');
if (isExpression && structure.validation?.allowExpressions) {
warnings.push(`Value contains n8n expression - cannot validate type until runtime`);
}
else {
errors.push(`Expected ${expectedType} but got ${actualType}`);
}
}
if (type === 'dateTime' && typeof value === 'string') {
const pattern = structure.validation?.pattern;
if (pattern && !new RegExp(pattern).test(value)) {
errors.push(`Invalid dateTime format. Expected ISO 8601 format.`);
}
}
if (type === 'color' && typeof value === 'string') {
const pattern = structure.validation?.pattern;
if (pattern && !new RegExp(pattern).test(value)) {
errors.push(`Invalid color format. Expected 6-digit hex color (e.g., #FF5733).`);
}
}
if (type === 'json' && typeof value === 'string') {
try {
JSON.parse(value);
}
catch {
errors.push(`Invalid JSON string. Must be valid JSON when parsed.`);
}
}
return {
valid: errors.length === 0,
errors,
warnings,
};
}
static getDescription(type) {
const structure = this.getStructure(type);
return structure ? structure.description : null;
}
static getNotes(type) {
const structure = this.getStructure(type);
return structure?.notes || [];
}
static getJavaScriptType(type) {
const structure = this.getStructure(type);
return structure ? structure.jsType : null;
}
}
exports.TypeStructureService = TypeStructureService;
//# sourceMappingURL=type-structure-service.js.map