From cf9e894481367c8551ed1fccbc7b79c5c932b708 Mon Sep 17 00:00:00 2001 From: Umberto Sgueglia Date: Tue, 14 Oct 2025 16:57:05 +0200 Subject: [PATCH 1/2] fix: truncate with dots body too long --- .../src/activities/insert.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/services/libs/data-access-layer/src/activities/insert.ts b/services/libs/data-access-layer/src/activities/insert.ts index d9fcd25e19..64b74c4e63 100644 --- a/services/libs/data-access-layer/src/activities/insert.ts +++ b/services/libs/data-access-layer/src/activities/insert.ts @@ -45,6 +45,23 @@ function toInt(value: unknown): number { return 0 } +function truncateWithDots(s: string, max: number): string { + if (!s || s.length <= max) { + return s + } + + // Cut by UTF-16 code units (fast, but may split surrogate pairs) + let out = s.slice(0, max) + + // If the last code unit is a HIGH surrogate (D800–DBFF), drop it to avoid a dangling pair + if (/[\uD800-\uDBFF]$/.test(out)) out = out.slice(0, -1) + + // Remove any trailing combining marks (prevents leaving accents/modifiers without a base) + out = out.replace(/\p{M}+$/u, '') + + return out + '...' +} + export async function insertActivities( queueClient: IQueue, activities: IDbActivityCreateData[], @@ -75,7 +92,7 @@ export async function insertActivities( createdAt: activity.createdAt ? moment(activity.createdAt).toISOString() : now, timestamp: activity.timestamp ? moment(activity.timestamp).toISOString() : now, attributes: objectToBytes(tryToUnwrapAttributes(activity.attributes)), - body: activity.body?.slice(0, 2000), + body: truncateWithDots(activity.body, 2000), } }) .map((activity) => { From cc276a632bdde73dd56bcad8339c55c7abc0a9e1 Mon Sep 17 00:00:00 2001 From: Umberto Sgueglia Date: Tue, 14 Oct 2025 17:30:31 +0200 Subject: [PATCH 2/2] fix: format --- services/libs/data-access-layer/src/activities/insert.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/libs/data-access-layer/src/activities/insert.ts b/services/libs/data-access-layer/src/activities/insert.ts index 64b74c4e63..39f7579cc6 100644 --- a/services/libs/data-access-layer/src/activities/insert.ts +++ b/services/libs/data-access-layer/src/activities/insert.ts @@ -54,7 +54,9 @@ function truncateWithDots(s: string, max: number): string { let out = s.slice(0, max) // If the last code unit is a HIGH surrogate (D800–DBFF), drop it to avoid a dangling pair - if (/[\uD800-\uDBFF]$/.test(out)) out = out.slice(0, -1) + if (/[\uD800-\uDBFF]$/.test(out)) { + out = out.slice(0, -1) + } // Remove any trailing combining marks (prevents leaving accents/modifiers without a base) out = out.replace(/\p{M}+$/u, '')