This is an automated email from the ASF dual-hosted git repository. marat pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-karavan.git
commit cb81ad8ae0315dc3f0cab18312b2e5e4993d22e0 Author: Marat Gubaidullin <[email protected]> AuthorDate: Fri Feb 27 16:20:27 2026 -0500 Front-end Utils for 4.18.0 --- .../src/main/webui/src/karavan/util/CodeUtils.ts | 4 +- .../src/main/webui/src/karavan/util/StringUtils.ts | 62 ++++++++++++++++++++++ 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/karavan-app/src/main/webui/src/karavan/util/CodeUtils.ts b/karavan-app/src/main/webui/src/karavan/util/CodeUtils.ts index a2fecc8c..94cb2d90 100644 --- a/karavan-app/src/main/webui/src/karavan/util/CodeUtils.ts +++ b/karavan-app/src/main/webui/src/karavan/util/CodeUtils.ts @@ -19,10 +19,10 @@ import {APPLICATION_PROPERTIES, ProjectFile} from "@models/ProjectModels"; import {BeanFactoryDefinition} from "@karavan-core/model/CamelDefinition"; import {Integration, IntegrationFile, KameletTypes, MetadataLabels} from "@karavan-core/model/IntegrationDefinition"; import {CamelDefinitionYaml} from "@karavan-core/api/CamelDefinitionYaml"; -import {CamelUi} from "@features/integration/designer/utils/CamelUi"; +import {CamelUi} from "@features/project/designer/utils/CamelUi"; import {KameletApi} from "@karavan-core/api/KameletApi"; import {CamelUtil} from "@karavan-core/api/CamelUtil"; -import {EventBus} from "@features/integration/designer/utils/EventBus"; +import {EventBus} from "@features/project/designer/utils/EventBus"; import {ApplicationProperty} from "@karavan-core/model/MainConfigurationModel"; import {MainConfigurationApi} from "@karavan-core/api/MainConfigurationApi"; diff --git a/karavan-app/src/main/webui/src/karavan/util/StringUtils.ts b/karavan-app/src/main/webui/src/karavan/util/StringUtils.ts index 370d0d45..c6d521ec 100644 --- a/karavan-app/src/main/webui/src/karavan/util/StringUtils.ts +++ b/karavan-app/src/main/webui/src/karavan/util/StringUtils.ts @@ -276,4 +276,66 @@ export function extractTitleFromMarkdown(markdown: string): string | null { // If no title found return null; +} + +export function convertAnyToString(value: any): string { + if (value === null) return "null"; + if (value === undefined) return "undefined"; + + // If it's already a string, check if it might be JSON + if (typeof value === "string") { + const trimmed = value.trim(); + + // Try parsing directly (normal JSON string) + try { + const parsed = JSON.parse(trimmed); + return JSON.stringify(parsed, null, 2); + } catch { + // Try parsing escaped JSON string + try { + const unescaped = trimmed.replace(/\\"/g, '"'); + const parsed = JSON.parse(unescaped); + return JSON.stringify(parsed, null, 2); + } catch { + // Not JSON, return as-is + return value; + } + } + } + + // Handle objects and arrays + if (typeof value === "object") { + try { + return JSON.stringify(value, null, 2); + } catch { + // Circular reference or unserializable object + return Object.prototype.toString.call(value); + } + } + + // Fallback for primitives (number, boolean, symbol, bigint, function) + try { + return String(value); + } catch { + return "[Unstringifiable value]"; + } +} + +const placeholderRegexp = /\{\{\s*([^}:]+?)\s*\}\}/g; +export function replacePlaceholders(code: string, placeholders: Record<string, string>){ + return code.replace(placeholderRegexp, (match, rawKey) => { + const key = rawKey.trim(); + return key in placeholders ? placeholders[key] : match; + }); +} + +export function findPlaceholders(code: string): string[] { + const regex = placeholderRegexp; + const results: string[] = []; + let match: RegExpExecArray | null; + + while ((match = regex.exec(code)) !== null) { + results.push(match[1].trim()); + } + return [...new Set(results)]; } \ No newline at end of file
