From 8d3081c489512b6e5897d5550e5f264d9f6fe04c Mon Sep 17 00:00:00 2001 From: gavin913427-hash Date: Mon, 4 May 2026 11:16:43 +0800 Subject: [PATCH] fix: prevent double-stringification of AsyncAPI document in archiver The appendAsyncAPIDocument method was always applying JSON.stringify() even when the input was already a string. This caused: - YAML documents to be serialized as JSON string literals - Newlines to be escaped (\n) - Invalid archived files Now the method only stringifies when the input is an object. Fixes #2026 --- src/domains/services/archiver.service.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/domains/services/archiver.service.ts b/src/domains/services/archiver.service.ts index 635d1a218..1f6268c91 100644 --- a/src/domains/services/archiver.service.ts +++ b/src/domains/services/archiver.service.ts @@ -27,15 +27,19 @@ export class ArchiverService { public appendAsyncAPIDocument( archive: Archiver, - asyncapi: string, + asyncapi: string | object, fileName = 'asyncapi', ) { - asyncapi = JSON.stringify(asyncapi); - const language = retrieveLangauge(asyncapi); + const content = + typeof asyncapi === 'string' + ? asyncapi + : JSON.stringify(asyncapi, null, 2); + + const language = retrieveLangauge(content); if (language === 'yaml') { - archive.append(asyncapi, { name: `${fileName}.yml` }); + archive.append(content, { name: `${fileName}.yml` }); } else { - archive.append(asyncapi, { name: `${fileName}.json` }); + archive.append(content, { name: `${fileName}.json` }); } }