@ai-growth/n8n-nodes-wordpress
Version:
n8n node for WordPress integration with AI GROWTH - SEO WP plugin
156 lines (155 loc) • 6.23 kB
JavaScript
;
exports.__esModule = true;
exports.ImageUrlService = exports.SUPPORTED_IMAGE_TYPES = void 0;
var url_1 = require("url");
var path_1 = require("path");
var ErrorUtils_1 = require("../utils/ErrorUtils");
/**
* Tipos MIME suportados para imagens
*/
exports.SUPPORTED_IMAGE_TYPES = {
'.jpg': 'image/jpeg',
'.jpeg': 'image/jpeg',
'.png': 'image/png',
'.gif': 'image/gif',
'.webp': 'image/webp',
'.svg': 'image/svg+xml',
'.bmp': 'image/bmp',
'.tiff': 'image/tiff',
'.tif': 'image/tiff'
};
/**
* Serviço para validação e manipulação de URLs de imagens
*/
var ImageUrlService = /** @class */ (function () {
function ImageUrlService() {
}
/**
* Valida uma URL de imagem
* @param url URL da imagem para validar
* @returns URL validada
* @throws WordPressError se a URL for inválida
*/
ImageUrlService.prototype.validateImageUrl = function (url) {
try {
// Verificar se a URL é válida
var parsedUrl = new URL(url);
// Verificar se a URL usa um protocolo suportado
if (!['http:', 'https:'].includes(parsedUrl.protocol)) {
throw new ErrorUtils_1.WordPressError("Protocolo n\u00E3o suportado: ".concat(parsedUrl.protocol), ErrorUtils_1.WordPressErrorType.VALIDATION_FAILED);
}
// Verificar se o caminho termina com uma extensão de imagem suportada
var extension = this.getExtensionFromUrl(url);
if (!extension || !Object.keys(exports.SUPPORTED_IMAGE_TYPES).includes(extension.toLowerCase())) {
throw new ErrorUtils_1.WordPressError("Extens\u00E3o de arquivo n\u00E3o suportada: ".concat(extension || 'desconhecida'), ErrorUtils_1.WordPressErrorType.VALIDATION_FAILED);
}
return url;
}
catch (error) {
if (error instanceof ErrorUtils_1.WordPressError) {
throw error;
}
if (error instanceof TypeError && error.message.includes('Invalid URL')) {
throw new ErrorUtils_1.WordPressError("URL inv\u00E1lida: ".concat(url), ErrorUtils_1.WordPressErrorType.VALIDATION_FAILED);
}
throw new ErrorUtils_1.WordPressError("Erro ao validar URL de imagem: ".concat(url), ErrorUtils_1.WordPressErrorType.UNKNOWN);
}
};
/**
* Obtém a extensão do arquivo a partir da URL
* @param url URL da imagem
* @returns Extensão do arquivo (com ponto) ou string vazia se não encontrada
*/
ImageUrlService.prototype.getExtensionFromUrl = function (url) {
try {
var parsedUrl = (0, url_1.parse)(url);
if (!parsedUrl.pathname) {
return '';
}
// Remover parâmetros de consulta
var path = parsedUrl.pathname.split('?')[0];
// Obter extensão
var extension = (0, path_1.extname)(path);
return extension;
}
catch (error) {
return '';
}
};
/**
* Obtém o tipo MIME a partir da extensão do arquivo
* @param extension Extensão do arquivo (com ponto)
* @returns Tipo MIME ou undefined se não suportado
*/
ImageUrlService.prototype.getMimeTypeFromExtension = function (extension) {
if (!extension) {
return undefined;
}
var lowerExt = extension.toLowerCase();
return exports.SUPPORTED_IMAGE_TYPES[lowerExt];
};
/**
* Obtém o tipo MIME a partir da URL da imagem
* @param url URL da imagem
* @returns Tipo MIME ou undefined se não determinado
*/
ImageUrlService.prototype.getMimeTypeFromUrl = function (url) {
var extension = this.getExtensionFromUrl(url);
return this.getMimeTypeFromExtension(extension);
};
/**
* Extrai o nome do arquivo a partir da URL
* @param url URL da imagem
* @returns Nome do arquivo ou string vazia se não determinado
*/
ImageUrlService.prototype.getFilenameFromUrl = function (url) {
try {
var parsedUrl = (0, url_1.parse)(url);
if (!parsedUrl.pathname) {
return '';
}
// Remover parâmetros de consulta
var path = parsedUrl.pathname.split('?')[0];
// Obter nome do arquivo (último segmento do caminho)
var segments = path.split('/').filter(function (segment) { return segment.length > 0; });
if (segments.length === 0) {
return '';
}
return segments[segments.length - 1];
}
catch (error) {
return '';
}
};
/**
* Gera um nome de arquivo seguro a partir da URL
* @param url URL da imagem
* @param prefix Prefixo opcional para o nome do arquivo
* @returns Nome de arquivo seguro
*/
ImageUrlService.prototype.generateSafeFilename = function (url, prefix) {
// Obter nome do arquivo original
var filename = this.getFilenameFromUrl(url);
if (!filename) {
// Gerar nome aleatório se não for possível extrair da URL
var timestamp = new Date().getTime();
var random = Math.floor(Math.random() * 10000);
var extension = this.getExtensionFromUrl(url) || '.jpg';
filename = "image-".concat(timestamp, "-").concat(random).concat(extension);
}
// Adicionar prefixo se fornecido
if (prefix) {
var extension = (0, path_1.extname)(filename);
var baseName = filename.slice(0, filename.length - extension.length);
filename = "".concat(prefix, "-").concat(baseName).concat(extension);
}
// Sanitizar nome do arquivo (remover caracteres problemáticos)
filename = filename
.replace(/[^a-zA-Z0-9._-]/g, '-') // Substituir caracteres não alfanuméricos por hífens
.replace(/-+/g, '-') // Substituir múltiplos hífens por um único
.replace(/^-|-$/g, ''); // Remover hífens no início e fim
return filename;
};
return ImageUrlService;
}());
exports.ImageUrlService = ImageUrlService;