{"version":3,"sources":["../../../src/validations/valleyed.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks'\n\nimport { type Pipe, PipeError, type PipeInput, type PipeOutput, v } from 'valleyed'\n\nimport { Instance } from '../instance'\nimport type { IncomingFile, Request, Response, RouteDef, RouteDefToReqRes } from '../server'\n\nconst filePipe = (err?: string) =>\n\tv.array(\n\t\tv.file<IncomingFile>(err).pipe((input) => {\n\t\t\tconst err = `is larger than allowed limit of ${Instance.get().settings.utils.maxFileUploadSizeInMb}mb`\n\t\t\tconst valid = input ? !input.isTruncated : true\n\t\t\tif (valid) return input\n\t\t\tthrow PipeError.root(err, input)\n\t\t}),\n\t)\n\nexport const incomingFile = (err?: string) =>\n\tv.define<unknown, IncomingFile>(\n\t\tv.compile(\n\t\t\tfilePipe(err)\n\t\t\t\t.pipe(v.min(1, 'no file provided'))\n\t\t\t\t.pipe((files) => files[0]),\n\t\t),\n\t\t{ schema: () => ({ type: 'string', format: 'binary' }) },\n\t)\n\nexport const incomingFiles = (err?: string) =>\n\tv.define<unknown, IncomingFile[]>(v.compile(filePipe(err)), {\n\t\tschema: () => ({ type: 'string', format: 'binary' }),\n\t})\n\nexport const requestLocalStorage = new AsyncLocalStorage<Request<RouteDefToReqRes<RouteDef>>>()\nexport const responseLocalStorage = new AsyncLocalStorage<Response<RouteDefToReqRes<RouteDef>>>()\n\nexport const withRequest = <T extends Pipe<any, any>>(fn: (req: Request<RouteDefToReqRes<RouteDef>>) => T) =>\n\tv.define<PipeInput<T>, PipeOutput<T>>((input) => {\n\t\tconst req = requestLocalStorage.getStore()\n\t\tif (!req) throw new Error('Request not found in context')\n\t\tconst validated = v.validate(fn(req), input)\n\t\treturn validated.valid ? validated.value : validated.error\n\t})\n\nexport const withResponse = <T extends Pipe<any, any>>(fn: (req: Response<RouteDefToReqRes<RouteDef>>) => T) =>\n\tv.define<PipeInput<T>, PipeOutput<T>>((input) => {\n\t\tconst res = responseLocalStorage.getStore()\n\t\tif (!res) throw new Error('Response not found in context')\n\t\tconst validated = v.validate(fn(res), input)\n\t\treturn validated.valid ? validated.value : validated.error\n\t})\n"],"mappings":"AAAA,OAAS,qBAAAA,MAAyB,mBAElC,OAAoB,aAAAC,EAA4C,KAAAC,MAAS,WAEzE,OAAS,YAAAC,MAAgB,cAGzB,MAAMC,EAAYC,GACjBH,EAAE,MACDA,EAAE,KAAmBG,CAAG,EAAE,KAAMC,GAAU,CACzC,MAAMD,EAAM,mCAAmCF,EAAS,IAAI,EAAE,SAAS,MAAM,qBAAqB,KAElG,GADcG,EAAQ,CAACA,EAAM,YAAc,GAChC,OAAOA,EAClB,MAAML,EAAU,KAAKI,EAAKC,CAAK,CAChC,CAAC,CACF,EAEYC,EAAgBF,GAC5BH,EAAE,OACDA,EAAE,QACDE,EAASC,CAAG,EACV,KAAKH,EAAE,IAAI,EAAG,kBAAkB,CAAC,EACjC,KAAMM,GAAUA,EAAM,CAAC,CAAC,CAC3B,EACA,CAAE,OAAQ,KAAO,CAAE,KAAM,SAAU,OAAQ,QAAS,EAAG,CACxD,EAEYC,EAAiBJ,GAC7BH,EAAE,OAAgCA,EAAE,QAAQE,EAASC,CAAG,CAAC,EAAG,CAC3D,OAAQ,KAAO,CAAE,KAAM,SAAU,OAAQ,QAAS,EACnD,CAAC,EAEWK,EAAsB,IAAIV,EAC1BW,EAAuB,IAAIX,EAE3BY,EAAyCC,GACrDX,EAAE,OAAqCI,GAAU,CAChD,MAAMQ,EAAMJ,EAAoB,SAAS,EACzC,GAAI,CAACI,EAAK,MAAM,IAAI,MAAM,8BAA8B,EACxD,MAAMC,EAAYb,EAAE,SAASW,EAAGC,CAAG,EAAGR,CAAK,EAC3C,OAAOS,EAAU,MAAQA,EAAU,MAAQA,EAAU,KACtD,CAAC,EAEWC,EAA0CH,GACtDX,EAAE,OAAqCI,GAAU,CAChD,MAAMW,EAAMN,EAAqB,SAAS,EAC1C,GAAI,CAACM,EAAK,MAAM,IAAI,MAAM,+BAA+B,EACzD,MAAMF,EAAYb,EAAE,SAASW,EAAGI,CAAG,EAAGX,CAAK,EAC3C,OAAOS,EAAU,MAAQA,EAAU,MAAQA,EAAU,KACtD,CAAC","names":["AsyncLocalStorage","PipeError","v","Instance","filePipe","err","input","incomingFile","files","incomingFiles","requestLocalStorage","responseLocalStorage","withRequest","fn","req","validated","withResponse","res"]}