{"version":3,"file":"OpenApiValidator.mjs","sources":["../../src/utils/OpenApiValidator.ts"],"sourcesContent":["import { OpenApi } from \"../OpenApi\";\nimport { IValidation } from \"../structures/IValidation\";\nimport { OpenApiStationValidator } from \"./internal/OpenApiStationValidator\";\n\nexport namespace OpenApiValidator {\n  export const create =\n    (prop: {\n      components: OpenApi.IComponents;\n      schema: OpenApi.IJsonSchema;\n      required: boolean;\n      equals?: boolean;\n    }) =>\n    (value: unknown): IValidation<unknown> =>\n      validate({ ...prop, value });\n\n  export const validate = (props: {\n    components: OpenApi.IComponents;\n    schema: OpenApi.IJsonSchema;\n    value: unknown;\n    required: boolean;\n    equals?: boolean;\n  }): IValidation<unknown> => {\n    const errors: IValidation.IError[] = [];\n    OpenApiStationValidator.validate({\n      ...props,\n      path: \"$input\",\n      exceptionable: true,\n      report: createReporter(errors),\n      equals: props.equals ?? false,\n    });\n    return errors.length === 0\n      ? {\n          success: true,\n          data: props.value,\n        }\n      : {\n          success: false,\n          data: props.value,\n          errors,\n        };\n  };\n\n  const createReporter = (array: IValidation.IError[]) => {\n    const reportable = (path: string): boolean => {\n      if (array.length === 0) return true;\n      const last: string = array[array.length - 1]!.path;\n      return (\n        path.length > last.length || last.substring(0, path.length) !== path\n      );\n    };\n    return (\n      error: IValidation.IError & {\n        exceptionable: boolean;\n      },\n    ): false => {\n      if (error.exceptionable && reportable(error.path)) {\n        const info: IValidation.IError = {\n          path: error.path,\n          expected: error.expected,\n          value: error.value,\n          description: error.description,\n        };\n        if (error.value === undefined)\n          info.description ??= [\n            \"The value at this path is `undefined`.\",\n            \"\",\n            `Please fill the \\`${error.expected}\\` typed value next time.`,\n          ].join(\"\\n\");\n        array.push(info);\n      }\n      return false;\n    };\n  };\n}\n"],"names":["OpenApiValidator","create","prop","value","validate","props","errors","OpenApiStationValidator","path","exceptionable","report","createReporter","equals","length","success","data","array","reportable","last","substring","error","info","expected","description","undefined","join","push"],"mappings":";;AAIM,IAAWA;;CAAjB,SAAiBA;IACFA,iBAAAC,SACVC,QAMAC,SACCH,iBAAAI,SAAS;WAAKF;QAAMC;;IAEXH,iBAAAI,WAAYC;QAOvB,MAAMC,SAA+B;QACrCC,wBAAwBH,SAAS;eAC5BC;YACHG,MAAM;YACNC,eAAe;YACfC,QAAQC,eAAeL;YACvBM,QAAQP,MAAMO,UAAU;;QAE1B,OAAON,OAAOO,WAAW,IACrB;YACEC,SAAS;YACTC,MAAMV,MAAMF;YAEd;YACEW,SAAS;YACTC,MAAMV,MAAMF;YACZG;;;IAIR,MAAMK,iBAAkBK;QACtB,MAAMC,aAAcT;YAClB,IAAIQ,MAAMH,WAAW,GAAG,OAAO;YAC/B,MAAMK,OAAeF,MAAMA,MAAMH,SAAS,GAAIL;YAC9C,OACEA,KAAKK,SAASK,KAAKL,UAAUK,KAAKC,UAAU,GAAGX,KAAKK,YAAYL;;QAGpE,OACEY;YAIA,IAAIA,MAAMX,iBAAiBQ,WAAWG,MAAMZ,OAAO;gBACjD,MAAMa,OAA2B;oBAC/Bb,MAAMY,MAAMZ;oBACZc,UAAUF,MAAME;oBAChBnB,OAAOiB,MAAMjB;oBACboB,aAAaH,MAAMG;;gBAErB,IAAIH,MAAMjB,UAAUqB,WAClBH,KAAKE,gBAALF,KAAKE,cAAgB,EACnB,0CACA,IACA,qBAAqBH,MAAME,sCAC3BG,KAAK;gBACTT,MAAMU,KAAKL;AACb;YACA,OAAO;;;AAGZ,EArED,CAAiBrB,qBAAAA,mBAAgB,CAAA;;"}