{"version":3,"file":"index.mjs","names":[],"sources":["../../plugins/validate-status-code.ts"],"sourcesContent":["import { ApiDocumentV3_1, Artifact, Compiler, Plugin } from '@keq-request/cli'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\n\n\ninterface Options {\n  modules?: string[]\n}\n\nexport class ValidateStatusCodePlugin implements Plugin {\n  constructor(private options: Options = {}) {}\n\n  apply(compiler: Compiler): void {\n    if (this.options.modules && this.options.modules.length === 0) return\n\n    // remove 4xx and 5xx responses from OpenAPI documents\n    compiler.hooks.afterDownload.tap(ValidateStatusCodePlugin.name, () => {\n      const documents = compiler.context.documents!\n\n      compiler.context.documents = documents.map((document: ApiDocumentV3_1): ApiDocumentV3_1 => {\n        if (this.options.modules && !this.options.modules.includes(document.module.name)) {\n          return document\n        }\n\n        const spec: OpenAPIV3_1.Document = document.specification\n\n        if (!spec.paths || typeof spec.paths !== 'object' || spec.paths === null) return document\n\n        const paths = Object.fromEntries(\n          Object.entries(spec.paths)\n            .map(([path, pathItem]) => {\n              if (!pathItem || typeof pathItem !== 'object' || pathItem === null) return [path, pathItem]\n\n              return [\n                path,\n                Object.fromEntries(\n                  Object.entries(pathItem)\n                    .map(([method, operation]) => {\n                      if (!operation || typeof operation !== 'object' || operation === null) return [method, operation]\n\n                      const responses = operation.responses\n                      if (!responses) return [method, operation]\n\n                      return [\n                        method,\n                        {\n                          ...operation,\n\n                          responses: Object.fromEntries(\n                            Object.entries(responses)\n                              .filter(([statusCode]) => parseInt(statusCode, 10) < 400),\n                          ),\n                        },\n                      ]\n                    }),\n                ),\n              ]\n            }),\n        )\n\n        return new ApiDocumentV3_1({ ...spec, paths }, document.module)\n      })\n    })\n\n    // inject validateStatusCode middleware into generated code\n    compiler.hooks.afterCompile.tap(ValidateStatusCodePlugin.name, () => {\n      const artifact = compiler.context.artifacts!.find((artifact) => artifact.id === 'request')\n      if (!artifact) return\n\n      if (!this.options.modules) {\n        artifact.anchor.append('file:start', \"import { validateStatusCode } from '@keq-request/exception'\\n\")\n        artifact.anchor.prepend('file:end', 'request.use(validateStatusCode())\\n')\n      } else {\n        artifact.anchor.append('file:start', \"import { validateStatusCode } from '@keq-request/exception'\\n\")\n        artifact.anchor.prepend(\n          'file:end',\n          [\n            'request',\n            '  .useRouter()',\n            ...this.options.modules.map((moduleName) => `  .module(${JSON.stringify(moduleName)}, validateStatusCode())`),\n            '',\n          ].join('\\n'),\n        )\n      }\n\n      return artifact\n    })\n  }\n}\n"],"mappings":";;AAQA,IAAa,2BAAb,MAAa,yBAA2C;CACtD,YAAY,UAA2B,EAAE,EAAE;AAAvB,OAAA,UAAA;;CAEpB,MAAM,UAA0B;AAC9B,MAAI,KAAK,QAAQ,WAAW,KAAK,QAAQ,QAAQ,WAAW,EAAG;AAG/D,WAAS,MAAM,cAAc,IAAI,yBAAyB,YAAY;GACpE,MAAM,YAAY,SAAS,QAAQ;AAEnC,YAAS,QAAQ,YAAY,UAAU,KAAK,aAA+C;AACzF,QAAI,KAAK,QAAQ,WAAW,CAAC,KAAK,QAAQ,QAAQ,SAAS,SAAS,OAAO,KAAK,CAC9E,QAAO;IAGT,MAAM,OAA6B,SAAS;AAE5C,QAAI,CAAC,KAAK,SAAS,OAAO,KAAK,UAAU,YAAY,KAAK,UAAU,KAAM,QAAO;IAEjF,MAAM,QAAQ,OAAO,YACnB,OAAO,QAAQ,KAAK,MAAM,CACvB,KAAK,CAAC,MAAM,cAAc;AACzB,SAAI,CAAC,YAAY,OAAO,aAAa,YAAY,aAAa,KAAM,QAAO,CAAC,MAAM,SAAS;AAE3F,YAAO,CACL,MACA,OAAO,YACL,OAAO,QAAQ,SAAS,CACrB,KAAK,CAAC,QAAQ,eAAe;AAC5B,UAAI,CAAC,aAAa,OAAO,cAAc,YAAY,cAAc,KAAM,QAAO,CAAC,QAAQ,UAAU;MAEjG,MAAM,YAAY,UAAU;AAC5B,UAAI,CAAC,UAAW,QAAO,CAAC,QAAQ,UAAU;AAE1C,aAAO,CACL,QACA;OACE,GAAG;OAEH,WAAW,OAAO,YAChB,OAAO,QAAQ,UAAU,CACtB,QAAQ,CAAC,gBAAgB,SAAS,YAAY,GAAG,GAAG,IAAI,CAC5D;OACF,CACF;OACD,CACL,CACF;MACD,CACL;AAED,WAAO,IAAI,gBAAgB;KAAE,GAAG;KAAM;KAAO,EAAE,SAAS,OAAO;KAC/D;IACF;AAGF,WAAS,MAAM,aAAa,IAAI,yBAAyB,YAAY;GACnE,MAAM,WAAW,SAAS,QAAQ,UAAW,MAAM,aAAa,SAAS,OAAO,UAAU;AAC1F,OAAI,CAAC,SAAU;AAEf,OAAI,CAAC,KAAK,QAAQ,SAAS;AACzB,aAAS,OAAO,OAAO,cAAc,gEAAgE;AACrG,aAAS,OAAO,QAAQ,YAAY,sCAAsC;UACrE;AACL,aAAS,OAAO,OAAO,cAAc,gEAAgE;AACrG,aAAS,OAAO,QACd,YACA;KACE;KACA;KACA,GAAG,KAAK,QAAQ,QAAQ,KAAK,eAAe,aAAa,KAAK,UAAU,WAAW,CAAC,yBAAyB;KAC7G;KACD,CAAC,KAAK,KAAK,CACb;;AAGH,UAAO;IACP"}