{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { MiddlewareObj, Request } from \"@middy/core\";\nimport { createError } from \"@middy/util\";\nimport type { StandardSchemaV1 as StandardSchema } from \"@standard-schema/spec\";\n\ntype RequestPart = \"event\" | \"response\";\n\nexport const standardSchemaValidator = <\n  E extends StandardSchema,\n  R extends StandardSchema,\n>(\n  {\n    eventSchema,\n    responseSchema,\n    exposedErrors,\n  }: {\n    eventSchema?: E;\n    responseSchema?: R;\n    exposedErrors?: boolean;\n  },\n  eventHook?: (result: StandardSchema.Result<E>, request: Request) => any,\n  responseHook?: (result: StandardSchema.Result<R>, request: Request) => any,\n): MiddlewareObj<\n  StandardSchema.InferOutput<E>,\n  StandardSchema.InferInput<R>\n> => {\n  exposedErrors ??= false;\n  const getValidator = buildValidator(exposedErrors);\n\n  return {\n    before: getValidator(eventSchema, \"event\", 400, eventHook),\n    after: getValidator(responseSchema, \"response\", 500, responseHook),\n  };\n};\n\nconst buildValidator =\n  (exposedErrors: boolean) =>\n  <T extends StandardSchema>(\n    schema: T | undefined,\n    part: RequestPart,\n    code: number,\n    hook?: (result: StandardSchema.Result<any>, request: Request) => any,\n  ) => {\n    if (!schema) return undefined;\n    return async (request: Request) => {\n      let result = schema[\"~standard\"].validate(request[part]);\n      if (result instanceof Promise) result = await result;\n      if (hook) {\n        hook(result, request);\n      }\n      if (result.issues) {\n        throw getValidationError(code, part, result, exposedErrors);\n      }\n      request[part] = result.value;\n    };\n  };\n\nconst getValidationError = (\n  code: number,\n  objectName: string,\n  result: StandardSchema.FailureResult,\n  exposedErrors: boolean,\n) => {\n  const message = exposedErrors\n    ? result\n    : `The ${objectName} object failed validation`;\n  return createError(code, JSON.stringify({ message }), {\n    cause: { package: \"middy-standard-schema\", data: result.issues },\n  });\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAA4B;AAKrB,IAAM,0BAA0B,CAIrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AACF,GAKA,WACA,iBAIG;AACH,oBAAkB;AAClB,QAAM,eAAe,eAAe,aAAa;AAEjD,SAAO;AAAA,IACL,QAAQ,aAAa,aAAa,SAAS,KAAK,SAAS;AAAA,IACzD,OAAO,aAAa,gBAAgB,YAAY,KAAK,YAAY;AAAA,EACnE;AACF;AAEA,IAAM,iBACJ,CAAC,kBACD,CACE,QACA,MACA,MACA,SACG;AACH,MAAI,CAAC,OAAQ,QAAO;AACpB,SAAO,OAAO,YAAqB;AACjC,QAAI,SAAS,OAAO,WAAW,EAAE,SAAS,QAAQ,IAAI,CAAC;AACvD,QAAI,kBAAkB,QAAS,UAAS,MAAM;AAC9C,QAAI,MAAM;AACR,WAAK,QAAQ,OAAO;AAAA,IACtB;AACA,QAAI,OAAO,QAAQ;AACjB,YAAM,mBAAmB,MAAM,MAAM,QAAQ,aAAa;AAAA,IAC5D;AACA,YAAQ,IAAI,IAAI,OAAO;AAAA,EACzB;AACF;AAEF,IAAM,qBAAqB,CACzB,MACA,YACA,QACA,kBACG;AACH,QAAM,UAAU,gBACZ,SACA,OAAO,UAAU;AACrB,aAAO,yBAAY,MAAM,KAAK,UAAU,EAAE,QAAQ,CAAC,GAAG;AAAA,IACpD,OAAO,EAAE,SAAS,yBAAyB,MAAM,OAAO,OAAO;AAAA,EACjE,CAAC;AACH;","names":[]}