n8n-nodes-selfhosthub
Version:
Collection of n8n nodes for self-hosted AI services, including Leonardo.ai integration for AI image and content generation capabilities.
178 lines • 6.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.processElement = processElement;
const positionUtils_1 = require("./positionUtils");
/**
* Process an element object based on its type and return the API-compatible format
*/
function processElement(element, videoWidth, videoHeight) {
const processedElement = {
type: element.type,
start: element.start,
duration: element.duration,
};
switch (element.type) {
case 'image':
return processImageElement(element, processedElement, videoWidth, videoHeight);
case 'video':
return processVideoElement(element, processedElement, videoWidth, videoHeight);
case 'text':
return processTextElement(element, processedElement, videoWidth, videoHeight);
case 'audio':
return processAudioElement(element, processedElement);
case 'voice':
return processVoiceElement(element, processedElement);
case 'subtitles':
return processSubtitlesElement(element, processedElement);
default:
return processedElement;
}
}
/**
* Process image element properties
*/
function processImageElement(element, processedElement, videoWidth, videoHeight) {
if (element.src && typeof element.src === 'string') {
processedElement.src = element.src;
}
processedElement = applyPositioning(element, processedElement, videoWidth, videoHeight);
if (element.width > 0)
processedElement.width = element.width;
if (element.height > 0)
processedElement.height = element.height;
if (element.zoom !== 0)
processedElement.zoom = element.zoom;
return processedElement;
}
/**
* Process video element properties
*/
function processVideoElement(element, processedElement, videoWidth, videoHeight) {
if (element.src && typeof element.src === 'string') {
processedElement.src = element.src;
}
processedElement = applyPositioning(element, processedElement, videoWidth, videoHeight);
if (element.width > 0)
processedElement.width = element.width;
if (element.height > 0)
processedElement.height = element.height;
if (element.zoom !== 0)
processedElement.zoom = element.zoom;
if (element.duration !== undefined) {
const duration = Number(element.duration);
if (!isNaN(duration)) {
if (duration > 0) {
processedElement.duration = duration;
}
else if (duration === -1) {
processedElement.duration = -1;
}
else if (duration === -2) {
processedElement.duration = -2;
}
}
}
if (element.volume !== undefined)
processedElement.volume = element.volume;
if (element.muted !== undefined)
processedElement.muted = element.muted;
if (element.crop !== undefined)
processedElement.crop = element.crop;
return processedElement;
}
/**
* Process text element properties
*/
function processTextElement(element, processedElement, videoWidth, videoHeight) {
if (element.text && typeof element.text === 'string') {
processedElement.text = element.text;
}
// Handle positioning
processedElement = applyPositioning(element, processedElement, videoWidth, videoHeight);
// Handle text-specific properties
if (element.fontFamily && typeof element.fontFamily === 'string') {
processedElement['font-family'] = element.fontFamily;
}
if (element.fontSize)
processedElement['font-size'] = element.fontSize;
if (element.color && typeof element.color === 'string') {
processedElement.color = element.color;
}
return processedElement;
}
/**
* Process audio element properties
*/
function processAudioElement(element, processedElement) {
if (element.src && typeof element.src === 'string') {
processedElement.src = element.src;
}
if (element.volume !== undefined)
processedElement.volume = element.volume;
return processedElement;
}
/**
* Process voice element properties
*/
function processVoiceElement(element, processedElement) {
if (element.text && typeof element.text === 'string') {
processedElement.text = element.text;
}
if (element.voice && typeof element.voice === 'string') {
processedElement.voice = element.voice;
}
return processedElement;
}
/**
* Process subtitles element properties
*/
function processSubtitlesElement(element, processedElement) {
if (element.subtitleSourceType === 'text' && element.text && typeof element.text === 'string') {
processedElement.text = element.text;
}
else if (element.subtitleSourceType === 'src' && element.src && typeof element.src === 'string') {
processedElement.src = element.src;
}
if (element.language && typeof element.language === 'string') {
processedElement.language = element.language;
}
if (element.position && typeof element.position === 'string') {
processedElement.position = element.position;
}
if (element.fontFamily && typeof element.fontFamily === 'string') {
processedElement['font-family'] = element.fontFamily;
}
if (element.fontSize)
processedElement['font-size'] = element.fontSize;
if (element.color && typeof element.color === 'string') {
processedElement.color = element.color;
}
if (element.backgroundColor && typeof element.backgroundColor === 'string') {
processedElement['background-color'] = element.backgroundColor;
}
if (element.style)
processedElement.style = element.style;
if (element.opacity)
processedElement.opacity = element.opacity;
return processedElement;
}
/**
* Apply positioning logic to visual elements (image, video, text)
*/
function applyPositioning(element, processedElement, videoWidth, videoHeight) {
if (element.positionPreset &&
typeof element.positionPreset === 'string' &&
element.positionPreset !== 'custom') {
processedElement.position = (0, positionUtils_1.mapPositionPresetToApiFormat)(element.positionPreset);
const position = (0, positionUtils_1.calculatePositionFromPreset)(element.positionPreset, videoWidth, videoHeight, element.width, element.height);
processedElement.x = position.x;
processedElement.y = position.y;
}
else {
processedElement.position = 'custom';
processedElement.x = element.x;
processedElement.y = element.y;
}
return processedElement;
}
//# sourceMappingURL=elementProcessor.js.map