diff --git a/src/domains/services/archiver.service.ts b/src/domains/services/archiver.service.ts index 635d1a218..52b9b4a5d 100644 --- a/src/domains/services/archiver.service.ts +++ b/src/domains/services/archiver.service.ts @@ -27,15 +27,18 @@ 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` }); } } diff --git a/src/utils/generate/registry.ts b/src/utils/generate/registry.ts index 16fdda2e5..d559986e9 100644 --- a/src/utils/generate/registry.ts +++ b/src/utils/generate/registry.ts @@ -8,12 +8,25 @@ export function registryURLParser(input?: string) { export async function registryValidation(registryUrl?: string, registryAuth?: string, registryToken?: string) { if (!registryUrl) { return; } + const TIMEOUT_MS = 5000; + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS); + try { - const response = await fetch(registryUrl as string); + const response = await fetch(registryUrl as string, { + method: 'HEAD', + signal: controller.signal, + }); + clearTimeout(timeoutId); + if (response.status === 401 && !registryAuth && !registryToken) { throw new Error('You Need to pass either registryAuth in username:password encoded in Base64 or need to pass registryToken'); } - } catch { + } catch (err: any) { + clearTimeout(timeoutId); + if (err.name === 'AbortError') { + throw new Error(`Registry URL timed out after ${TIMEOUT_MS}ms: ${registryUrl}`); + } throw new Error(`Can't fetch registryURL: ${registryUrl}`); } } diff --git a/src/utils/generate/watcher.ts b/src/utils/generate/watcher.ts index 609751f38..cb151116e 100644 --- a/src/utils/generate/watcher.ts +++ b/src/utils/generate/watcher.ts @@ -195,7 +195,7 @@ export async function runWatchMode( watcher = new Watcher(watchDir, ignorePaths); } - if (!await thisArg.isLocalTemplate(path.resolve(generatorClass.DEFAULT_TEMPLATES_DIR, templateName))) { + if (!await isLocalTemplate(path.resolve(generatorClass.DEFAULT_TEMPLATES_DIR, templateName))) { thisArg.warn(`WARNING: ${template} is a remote template. Changes may be lost on subsequent installations.`); }