private async getSwaggerInitializer()

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;
    }
  }