{"version":3,"file":"operation.mjs","sources":["../../../src/generators/operation.ts"],"sourcesContent":["import type { OpenAPIV3 } from 'openapi-types'\nimport type { Context } from '../context.js'\nimport type { OperationMetadata } from '../metadata/operation.js'\nimport { OperationBodyMetadataStorage } from '../metadata/operation_body.js'\nimport { OperationParameterMetadataStorage } from '../metadata/operation_parameter.js'\nimport { OperationResponseMetadataStorage } from '../metadata/operation_response.js'\nimport { OperationSecurityMetadataStorage } from '../metadata/operation_security.js'\nimport { generateOperationBody } from './operation_body.js'\nimport { generateOperationParameters } from './operation_parameters.js'\nimport { generateOperationResponse } from './operation_response.js'\n\nexport async function generateOperation(\n  context: Context,\n  controller: Function,\n  propertyKey: string,\n  { path, methods, ...metadata }: OperationMetadata\n): Promise<OpenAPIV3.OperationObject> {\n  const operation: OpenAPIV3.OperationObject = { ...metadata, responses: {} }\n\n  const target = controller.prototype\n\n  const body = OperationBodyMetadataStorage.getMetadata(target, propertyKey)\n  if (body) {\n    operation.requestBody = await generateOperationBody(context, body)\n  }\n\n  const parameters = OperationParameterMetadataStorage.getMetadata(target, propertyKey, true)\n  operation.parameters = []\n  for (const parameter of parameters) {\n    operation.parameters.push(await generateOperationParameters(context, parameter))\n  }\n\n  const responses = OperationResponseMetadataStorage.getMetadata(target, propertyKey, true)\n  for (const [status, response] of Object.entries(responses)) {\n    operation.responses[status] = await generateOperationResponse(context, response)\n  }\n\n  const security = OperationSecurityMetadataStorage.getMetadata(target, propertyKey, true)\n\n  // TODO: Check what the difference between `[{ auth1: {} }, {auth2: {} }]` and `[{ auth1: {}, auth2: {}}]`\n  operation.security = Object.keys(security).length > 0 ? [security] : []\n\n  return operation\n}\n"],"names":[],"mappings":";;;;;;;;AAWA,eAAsB,iBAAA,CACpB,SACA,UAAA,EACA,WAAA,EACA,EAAE,IAAA,EAAM,OAAA,EAAS,GAAG,QAAA,EAAS,EACO;AACpC,EAAA,MAAM,YAAuC,EAAE,GAAG,QAAA,EAAU,SAAA,EAAW,EAAC,EAAE;AAE1E,EAAA,MAAM,SAAS,UAAA,CAAW,SAAA;AAE1B,EAAA,MAAM,IAAA,GAAO,4BAAA,CAA6B,WAAA,CAAY,MAAA,EAAQ,WAAW,CAAA;AACzE,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,SAAA,CAAU,WAAA,GAAc,MAAM,qBAAA,CAAsB,OAAA,EAAS,IAAI,CAAA;AAAA,EACnE;AAEA,EAAA,MAAM,UAAA,GAAa,iCAAA,CAAkC,WAAA,CAAY,MAAA,EAAQ,aAAa,IAAI,CAAA;AAC1F,EAAA,SAAA,CAAU,aAAa,EAAC;AACxB,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,SAAA,CAAU,WAAW,IAAA,CAAK,MAAM,2BAAA,CAA4B,OAAA,EAAS,SAAS,CAAC,CAAA;AAAA,EACjF;AAEA,EAAA,MAAM,SAAA,GAAY,gCAAA,CAAiC,WAAA,CAAY,MAAA,EAAQ,aAAa,IAAI,CAAA;AACxF,EAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC1D,IAAA,SAAA,CAAU,UAAU,MAAM,CAAA,GAAI,MAAM,yBAAA,CAA0B,SAAS,QAAQ,CAAA;AAAA,EACjF;AAEA,EAAA,MAAM,QAAA,GAAW,gCAAA,CAAiC,WAAA,CAAY,MAAA,EAAQ,aAAa,IAAI,CAAA;AAGvF,EAAA,SAAA,CAAU,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,SAAS,CAAA,GAAI,CAAC,QAAQ,CAAA,GAAI,EAAC;AAEtE,EAAA,OAAO,SAAA;AACT;;;;"}