in lib/liveValidation/liveValidator.ts [861:936]
private async getSwaggerInitializer(
loader: LiveValidatorLoader,
swaggerPath: string
): Promise<SwaggerSpec | undefined> {
const startTime = Date.now();
this.logging(`Building cache from:${swaggerPath}`, LiveValidatorLoggingLevels.debug);
let spec;
let resolvedSpec;
try {
spec = await loader.load(pathResolve(swaggerPath));
const elapsedTimeLoadSpec = Date.now() - startTime;
this.logging(
`Load spec ${swaggerPath}`,
LiveValidatorLoggingLevels.info,
LiveValidatorLoggingTypes.perfTrace,
"Oav.liveValidator.getSwaggerInitializer.loader.load",
elapsedTimeLoadSpec
);
const startTimeAddSpecToCache = Date.now();
if (this.options.enableRoundTripValidator) {
resolvedSpec = await loader.load(pathResolve(swaggerPath), true);
this.operationSearcher.addSpecToCache(resolvedSpec);
} else {
this.operationSearcher.addSpecToCache(spec);
}
// TODO: add data-plane RP to cache.
this.logging(
`Add spec to cache ${swaggerPath}`,
LiveValidatorLoggingLevels.info,
LiveValidatorLoggingTypes.perfTrace,
"Oav.liveValidator.getSwaggerInitializer.operationSearcher.addSpecToCache",
Date.now() - startTimeAddSpecToCache
);
const elapsedTime = Date.now() - startTime;
this.logging(
`Complete loading spec ${spec._filePath}`,
LiveValidatorLoggingLevels.info,
LiveValidatorLoggingTypes.specTrace,
"Oav.liveValidator.getSwaggerInitializer",
elapsedTime,
{
providerNamespace: spec._providerNamespace ?? "unknown",
apiVersion: spec.info.version,
specName: spec._filePath,
}
);
return spec;
} catch (err) {
this.logging(
`Unable to initialize "${swaggerPath}" file from SpecValidator. We are ` +
`ignoring this swagger file and continuing to build cache for other valid specs.\nErrorMessage: ${
(err as any)?.message
};\nErrorStack: ${(err as any)?.stack}`,
LiveValidatorLoggingLevels.warn,
LiveValidatorLoggingTypes.error
);
const pathProvider = getProviderFromSpecPath(swaggerPath);
this.logging(
`Failed to load spec ${swaggerPath}`,
LiveValidatorLoggingLevels.error,
LiveValidatorLoggingTypes.specTrace,
"Oav.liveValidator.getSwaggerInitializer",
undefined,
{
providerNamespace: pathProvider ? pathProvider.provider : "unknown",
apiVersion: spec ? spec.info.version : "unknown",
specName: swaggerPath,
}
);
return undefined;
}
}