From 08daf873f78ebba23458ea7e4ffdcd04805a8a6c Mon Sep 17 00:00:00 2001 From: Roberto Bianchi Date: Fri, 6 Nov 2026 14:33:57 +0100 Subject: [PATCH] perf(client): reuse response validation setup Signed-off-by: Roberto Bianchi --- packages/massimo/index.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/massimo/index.js b/packages/massimo/index.js index e0de9e3..ad411cd 100644 --- a/packages/massimo/index.js +++ b/packages/massimo/index.js @@ -60,12 +60,9 @@ async function buildCallFunction ( queryParser, bodyTimeout, headersTimeout, - dispatcher + dispatcher, + ajv ) { - if (validateResponse) { - await $RefParser.dereference(spec) - } - const ajv = new Ajv() const url = new URL(baseUrl) method = method.toUpperCase() path = join(url.pathname, path) @@ -447,6 +444,11 @@ export async function buildOpenAPIClient (options, openTelemetry) { } const generatedOperationIds = new Set() + let ajv + if (validateResponse) { + ajv = new Ajv() + } + let specDereferenced = false for (const path of Object.keys(spec.paths)) { const pathMeta = spec.paths[path] let commonParameters = [] @@ -472,6 +474,10 @@ export async function buildOpenAPIClient (options, openTelemetry) { } client[kOperationIdMap][operationId] = { path, method } + if (validateResponse && !specDereferenced) { + await $RefParser.dereference(spec) + specDereferenced = true + } client[operationId] = await buildCallFunction( spec, baseUrl, @@ -485,7 +491,8 @@ export async function buildOpenAPIClient (options, openTelemetry) { queryParser, bodyTimeout, headersTimeout, - dispatcher + dispatcher, + ajv ) } }