{"version":3,"file":"operation.mjs","sources":["../../../../../../src/assemblers/document/path/path-item/operation/operation.ts"],"sourcesContent":["import { OpenAPIV3_1, OpenAPIV3 } from 'openapi-types';\n\nimport type { Core } from '@strapi/types';\n\nimport { OperationContextFactory } from '../../../../../context';\nimport { createDebugger } from '../../../../../utils';\n\nimport type { PathItemContext } from '../../../../../types';\n\nimport type { Assembler } from '../../../..';\n\nconst debug = createDebugger('assembler:operation');\n\nexport class OperationAssembler implements Assembler.PathItem {\n  private readonly _assemblers: Assembler.Operation[];\n\n  private readonly _contextFactory: OperationContextFactory;\n\n  constructor(\n    assemblers: Assembler.Operation[],\n    contextFactory: OperationContextFactory = new OperationContextFactory()\n  ) {\n    this._assemblers = assemblers;\n    this._contextFactory = contextFactory;\n  }\n\n  assemble(context: PathItemContext, path: string, routes: Core.Route[]): void {\n    const { output, ...defaultContextProps } = context;\n\n    for (const route of routes) {\n      const { method } = route;\n\n      const methodIndex = method.toLowerCase();\n      const operationContext = this._contextFactory.create(defaultContextProps);\n\n      this._validateHTTPIndex(methodIndex);\n\n      debug('assembling operation object for %o %o...', method, path);\n\n      for (const assembler of this._assemblers) {\n        debug('running assembler: %s...', assembler.constructor.name);\n\n        assembler.assemble(operationContext, route);\n      }\n\n      const { data: operationObject } = operationContext.output;\n\n      this._validateOperationObject(operationObject);\n\n      debug('assembled operation object for %o %o', method, path);\n\n      Object.assign(output.data, { [methodIndex]: operationObject });\n    }\n  }\n\n  private _validateOperationObject(\n    operation: Partial<OpenAPIV3_1.OperationObject>\n  ): asserts operation is OpenAPIV3_1.OperationObject {\n    if (!('responses' in operation)) {\n      throw new Error('Invalid operation object: missing \"responses\" property');\n    }\n  }\n\n  private _validateHTTPIndex(method: string): asserts method is OpenAPIV3_1.HttpMethods {\n    // HttpMethods is exported as an enum in OpenAPIV3 and as a type only in OpenAPIV3_1\n    const allowedMethods = Object.values<string>(OpenAPIV3.HttpMethods);\n    const isAllowedMethod = allowedMethods.includes(method);\n\n    if (!isAllowedMethod) {\n      throw new Error(`Invalid HTTP method object: ${method}. Expected one of ${allowedMethods}`);\n    }\n  }\n}\n"],"names":["debug","createDebugger","OperationAssembler","assemble","context","path","routes","output","defaultContextProps","route","method","methodIndex","toLowerCase","operationContext","_contextFactory","create","_validateHTTPIndex","assembler","_assemblers","name","data","operationObject","_validateOperationObject","Object","assign","operation","Error","allowedMethods","values","OpenAPIV3","HttpMethods","isAllowedMethod","includes","assemblers","contextFactory","OperationContextFactory"],"mappings":";;;;;;AAWA,MAAMA,QAAQC,cAAAA,CAAe,qBAAA,CAAA;AAEtB,MAAMC,kBAAAA,CAAAA;AAaXC,IAAAA,QAAAA,CAASC,OAAwB,EAAEC,IAAY,EAAEC,MAAoB,EAAQ;AAC3E,QAAA,MAAM,EAAEC,MAAM,EAAE,GAAGC,qBAAqB,GAAGJ,OAAAA;QAE3C,KAAK,MAAMK,SAASH,MAAAA,CAAQ;YAC1B,MAAM,EAAEI,MAAM,EAAE,GAAGD,KAAAA;YAEnB,MAAME,WAAAA,GAAcD,OAAOE,WAAW,EAAA;AACtC,YAAA,MAAMC,mBAAmB,IAAI,CAACC,eAAe,CAACC,MAAM,CAACP,mBAAAA,CAAAA;YAErD,IAAI,CAACQ,kBAAkB,CAACL,WAAAA,CAAAA;AAExBX,YAAAA,KAAAA,CAAM,4CAA4CU,MAAAA,EAAQL,IAAAA,CAAAA;AAE1D,YAAA,KAAK,MAAMY,SAAAA,IAAa,IAAI,CAACC,WAAW,CAAE;AACxClB,gBAAAA,KAAAA,CAAM,0BAAA,EAA4BiB,SAAAA,CAAU,WAAW,CAACE,IAAI,CAAA;gBAE5DF,SAAAA,CAAUd,QAAQ,CAACU,gBAAAA,EAAkBJ,KAAAA,CAAAA;AACvC,YAAA;AAEA,YAAA,MAAM,EAAEW,IAAAA,EAAMC,eAAe,EAAE,GAAGR,iBAAiBN,MAAM;YAEzD,IAAI,CAACe,wBAAwB,CAACD,eAAAA,CAAAA;AAE9BrB,YAAAA,KAAAA,CAAM,wCAAwCU,MAAAA,EAAQL,IAAAA,CAAAA;AAEtDkB,YAAAA,MAAAA,CAAOC,MAAM,CAACjB,MAAAA,CAAOa,IAAI,EAAE;AAAE,gBAAA,CAACT,cAAcU;AAAgB,aAAA,CAAA;AAC9D,QAAA;AACF,IAAA;AAEQC,IAAAA,wBAAAA,CACNG,SAA+C,EACG;AAClD,QAAA,IAAI,EAAE,WAAA,IAAeA,SAAQ,CAAA,EAAI;AAC/B,YAAA,MAAM,IAAIC,KAAAA,CAAM,wDAAA,CAAA;AAClB,QAAA;AACF,IAAA;AAEQV,IAAAA,kBAAAA,CAAmBN,MAAc,EAA6C;;AAEpF,QAAA,MAAMiB,cAAAA,GAAiBJ,MAAAA,CAAOK,MAAM,CAASC,UAAUC,WAAW,CAAA;QAClE,MAAMC,eAAAA,GAAkBJ,cAAAA,CAAeK,QAAQ,CAACtB,MAAAA,CAAAA;AAEhD,QAAA,IAAI,CAACqB,eAAAA,EAAiB;YACpB,MAAM,IAAIL,MAAM,CAAC,4BAA4B,EAAEhB,MAAAA,CAAO,kBAAkB,EAAEiB,cAAAA,CAAAA,CAAgB,CAAA;AAC5F,QAAA;AACF,IAAA;AArDA,IAAA,WAAA,CACEM,UAAiC,EACjCC,cAAAA,GAA0C,IAAIC,yBAAyB,CACvE;QACA,IAAI,CAACjB,WAAW,GAAGe,UAAAA;QACnB,IAAI,CAACnB,eAAe,GAAGoB,cAAAA;AACzB,IAAA;AAgDF;;;;"}