{"version":3,"sources":["../../../src/api/files.ts"],"sourcesContent":["import { standard } from './base/pipes'\n\nexport interface File {\n\ttype: string\n}\n\nconst isFile = (v: unknown): v is File => typeof v === 'object' && !!v && 'type' in v\nconst isMimeType = (str: string) => /^[a-zA-Z0-9!#$&^_.+-]+\\/[a-zA-Z0-9!#$&^_.+-]+$/.test(str)\n\nexport const file = <T extends File>(err = 'is not a recognized file') =>\n\tstandard<T, T>(\n\t\t({ input, context, path }, opts) =>\n\t\t\topts.wrapError(\n\t\t\t\t`!${context}.isFile(${input}) || !${context}.isMimeType(${input}.type)`,\n\t\t\t\t`PipeError.root('${err}', ${input}, ${path})`,\n\t\t\t),\n\t\t{\n\t\t\tcontext: { isFile, isMimeType },\n\t\t\tschema: () => ({ type: 'string', format: 'binary' }),\n\t\t},\n\t)\n\nexport const image = <T extends File>(err = 'is not a recognized image file') =>\n\tstandard<T, T>(\n\t\t({ input, context, path }, opts) =>\n\t\t\topts.wrapError(\n\t\t\t\t`!${context}.isFile(${input}) || !${context}.isMimeType(${input}.type) || !${input}.type.startsWith('image/')`,\n\t\t\t\t`PipeError.root('${err}', ${input}, ${path})`,\n\t\t\t),\n\t\t{\n\t\t\tcontext: { isFile, isMimeType },\n\t\t},\n\t)\n\nexport const audio = <T extends File>(err = 'is not a recognized audio file') =>\n\tstandard<T, T>(\n\t\t({ input, context, path }, opts) =>\n\t\t\topts.wrapError(\n\t\t\t\t`!${context}.isFile(${input}) || !${context}.isMimeType(${input}.type) || !${input}.type.startsWith('audio/')`,\n\t\t\t\t`PipeError.root('${err}', ${input}, ${path})`,\n\t\t\t),\n\t\t{\n\t\t\tcontext: { isFile, isMimeType },\n\t\t},\n\t)\n\nexport const video = <T extends File>(err = 'is not a recognized video file') =>\n\tstandard<T, T>(\n\t\t({ input, context, path }, opts) =>\n\t\t\topts.wrapError(\n\t\t\t\t`!${context}.isFile(${input}) || !${context}.isMimeType(${input}.type) || !${input}.type.startsWith('video/')`,\n\t\t\t\t`PipeError.root('${err}', ${input}, ${path})`,\n\t\t\t),\n\t\t{\n\t\t\tcontext: { isFile, isMimeType },\n\t\t},\n\t)\n\nexport const fileType = <T extends File>(typesFn: string | string[], err = 'is not a supported file') =>\n\tstandard<T, T>(\n\t\t({ input, context, path }, opts) =>\n\t\t\topts.wrapError(\n\t\t\t\t`!${context}.isFile(${input}) || !${context}.isMimeType(${input}.type) || !${context}.makeArray(${context}.typesFn).some((type) => ${input}.type === type)`,\n\t\t\t\t`PipeError.root('${err}', ${input}, ${path})`,\n\t\t\t),\n\t\t{\n\t\t\tcontext: {\n\t\t\t\tisFile,\n\t\t\t\tisMimeType,\n\t\t\t\ttypesFn,\n\t\t\t\tmakeArray: (x: any) => (Array.isArray(x) ? x : [x]),\n\t\t\t},\n\t\t},\n\t)\n"],"mappings":"AAAA,OAAS,YAAAA,MAAgB,eAMzB,MAAMC,EAAUC,GAA0B,OAAOA,GAAM,UAAY,CAAC,CAACA,GAAK,SAAUA,EAC9EC,EAAcC,GAAgB,iDAAiD,KAAKA,CAAG,EAEhFC,EAAO,CAAiBC,EAAM,6BAC1CN,EACC,CAAC,CAAE,MAAAO,EAAO,QAAAC,EAAS,KAAAC,CAAK,EAAGC,IAC1BA,EAAK,UACJ,IAAIF,CAAO,WAAWD,CAAK,SAASC,CAAO,eAAeD,CAAK,SAC/D,mBAAmBD,CAAG,MAAMC,CAAK,KAAKE,CAAI,GAC3C,EACD,CACC,QAAS,CAAE,OAAAR,EAAQ,WAAAE,CAAW,EAC9B,OAAQ,KAAO,CAAE,KAAM,SAAU,OAAQ,QAAS,EACnD,CACD,EAEYQ,EAAQ,CAAiBL,EAAM,mCAC3CN,EACC,CAAC,CAAE,MAAAO,EAAO,QAAAC,EAAS,KAAAC,CAAK,EAAGC,IAC1BA,EAAK,UACJ,IAAIF,CAAO,WAAWD,CAAK,SAASC,CAAO,eAAeD,CAAK,cAAcA,CAAK,6BAClF,mBAAmBD,CAAG,MAAMC,CAAK,KAAKE,CAAI,GAC3C,EACD,CACC,QAAS,CAAE,OAAAR,EAAQ,WAAAE,CAAW,CAC/B,CACD,EAEYS,EAAQ,CAAiBN,EAAM,mCAC3CN,EACC,CAAC,CAAE,MAAAO,EAAO,QAAAC,EAAS,KAAAC,CAAK,EAAGC,IAC1BA,EAAK,UACJ,IAAIF,CAAO,WAAWD,CAAK,SAASC,CAAO,eAAeD,CAAK,cAAcA,CAAK,6BAClF,mBAAmBD,CAAG,MAAMC,CAAK,KAAKE,CAAI,GAC3C,EACD,CACC,QAAS,CAAE,OAAAR,EAAQ,WAAAE,CAAW,CAC/B,CACD,EAEYU,EAAQ,CAAiBP,EAAM,mCAC3CN,EACC,CAAC,CAAE,MAAAO,EAAO,QAAAC,EAAS,KAAAC,CAAK,EAAGC,IAC1BA,EAAK,UACJ,IAAIF,CAAO,WAAWD,CAAK,SAASC,CAAO,eAAeD,CAAK,cAAcA,CAAK,6BAClF,mBAAmBD,CAAG,MAAMC,CAAK,KAAKE,CAAI,GAC3C,EACD,CACC,QAAS,CAAE,OAAAR,EAAQ,WAAAE,CAAW,CAC/B,CACD,EAEYW,EAAW,CAAiBC,EAA4BT,EAAM,4BAC1EN,EACC,CAAC,CAAE,MAAAO,EAAO,QAAAC,EAAS,KAAAC,CAAK,EAAGC,IAC1BA,EAAK,UACJ,IAAIF,CAAO,WAAWD,CAAK,SAASC,CAAO,eAAeD,CAAK,cAAcC,CAAO,cAAcA,CAAO,4BAA4BD,CAAK,kBAC1I,mBAAmBD,CAAG,MAAMC,CAAK,KAAKE,CAAI,GAC3C,EACD,CACC,QAAS,CACR,OAAAR,EACA,WAAAE,EACA,QAAAY,EACA,UAAYC,GAAY,MAAM,QAAQA,CAAC,EAAIA,EAAI,CAACA,CAAC,CAClD,CACD,CACD","names":["standard","isFile","v","isMimeType","str","file","err","input","context","path","opts","image","audio","video","fileType","typesFn","x"]}