{
  "version": 3,
  "sources": ["../../../src/utils/check-response-validation.ts"],
  "sourcesContent": ["import type { DeserializationResult, SerializationResult, ValidationMode } from 'yaschema';\n\nimport type { AnyBody } from '../types/AnyBody';\nimport type { AnyHeaders } from '../types/AnyHeaders';\nimport type { AnyStatus } from '../types/AnyStatus';\nimport type { GenericApiResponse } from '../types/GenericApiResponse';\n\n/** Determines response schema validation results and conceptually returns one of three states: valid, invalid (soft validation error), or\n * invalid (hard validation error).  For invalid cases, additional metadata is included in the result. */\nexport const checkResponseValidation = ({\n  resStatus,\n  resHeaders,\n  resBody,\n  validationMode\n}: {\n  resStatus: SerializationResult | DeserializationResult<Partial<AnyStatus>>;\n  resHeaders: SerializationResult | DeserializationResult<Partial<AnyHeaders>>;\n  resBody: SerializationResult | DeserializationResult<Partial<AnyBody>>;\n  validationMode: ValidationMode;\n}):\n  | ({ ok: true } & (\n      | { hadSoftValidationError: false; invalidPart?: undefined; validationError?: undefined; validationErrorPath?: undefined }\n      | { hadSoftValidationError: true; invalidPart: keyof GenericApiResponse; validationError: string; validationErrorPath: string }\n    ))\n  | { ok: false; invalidPart: keyof GenericApiResponse; validationError: string; validationErrorPath: string } => {\n  if (resStatus.error !== undefined) {\n    if (validationMode === 'hard') {\n      return { ok: false, invalidPart: 'status', validationError: resStatus.error, validationErrorPath: resStatus.errorPath };\n    } else {\n      return {\n        ok: true,\n        hadSoftValidationError: true,\n        invalidPart: 'status',\n        validationError: resStatus.error,\n        validationErrorPath: resStatus.errorPath\n      };\n    }\n  }\n\n  if (resHeaders.error !== undefined) {\n    if (validationMode === 'hard') {\n      return { ok: false, invalidPart: 'headers', validationError: resHeaders.error, validationErrorPath: resHeaders.errorPath };\n    } else {\n      return {\n        ok: true,\n        hadSoftValidationError: true,\n        invalidPart: 'headers',\n        validationError: resHeaders.error,\n        validationErrorPath: resHeaders.errorPath\n      };\n    }\n  }\n\n  if (resBody.error !== undefined) {\n    if (validationMode === 'hard') {\n      return { ok: false, invalidPart: 'body', validationError: resBody.error, validationErrorPath: resBody.errorPath };\n    } else {\n      return {\n        ok: true,\n        hadSoftValidationError: true,\n        invalidPart: 'body',\n        validationError: resBody.error,\n        validationErrorPath: resBody.errorPath\n      };\n    }\n  }\n\n  return { ok: true, hadSoftValidationError: false };\n};\n"],
  "mappings": "AASO,MAAM,0BAA0B,CAAC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAUkH;AAChH,MAAI,UAAU,UAAU,QAAW;AACjC,QAAI,mBAAmB,QAAQ;AAC7B,aAAO,EAAE,IAAI,OAAO,aAAa,UAAU,iBAAiB,UAAU,OAAO,qBAAqB,UAAU,UAAU;AAAA,IACxH,OAAO;AACL,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,wBAAwB;AAAA,QACxB,aAAa;AAAA,QACb,iBAAiB,UAAU;AAAA,QAC3B,qBAAqB,UAAU;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAEA,MAAI,WAAW,UAAU,QAAW;AAClC,QAAI,mBAAmB,QAAQ;AAC7B,aAAO,EAAE,IAAI,OAAO,aAAa,WAAW,iBAAiB,WAAW,OAAO,qBAAqB,WAAW,UAAU;AAAA,IAC3H,OAAO;AACL,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,wBAAwB;AAAA,QACxB,aAAa;AAAA,QACb,iBAAiB,WAAW;AAAA,QAC5B,qBAAqB,WAAW;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AAEA,MAAI,QAAQ,UAAU,QAAW;AAC/B,QAAI,mBAAmB,QAAQ;AAC7B,aAAO,EAAE,IAAI,OAAO,aAAa,QAAQ,iBAAiB,QAAQ,OAAO,qBAAqB,QAAQ,UAAU;AAAA,IAClH,OAAO;AACL,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,wBAAwB;AAAA,QACxB,aAAa;AAAA,QACb,iBAAiB,QAAQ;AAAA,QACzB,qBAAqB,QAAQ;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,IAAI,MAAM,wBAAwB,MAAM;AACnD;",
  "names": []
}
