{"version":3,"file":"operation-id.mjs","sources":["../../../../../../src/assemblers/document/path/path-item/operation/operation-id.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { REGEX_STRAPI_PATH_PARAMS } from '../../../../../constants';\n\nimport type { OperationContext } from '../../../../../types';\nimport { createDebugger } from '../../../../../utils';\nimport type { Assembler } from '../../../..';\n\nconst debug = createDebugger('assembler:operation-id');\n\nexport class OperationIDAssembler implements Assembler.Operation {\n  assemble(context: OperationContext, route: Core.Route): void {\n    const { path, method, info } = route;\n\n    const origin = info.apiName ?? info.pluginName;\n\n    const [operationId] = ['']\n      // 'origin/' or ''\n      .map(this._maybeAppendOrigin(origin))\n      // 'origin/get' or 'get'\n      .map(this._appendMethod(method))\n      // 'origin/get/entity_by_id' or 'get/entity_by_id'\n      .map(this._maybeAppendPath(path));\n\n    debug('assembled an operation ID for %o %o: %o', method, path, operationId);\n\n    context.output.data.operationId = operationId;\n  }\n\n  private _maybeAppendOrigin(origin?: string) {\n    return () => (origin ? `${origin}/` : '');\n  }\n\n  private _appendMethod(method: string) {\n    return (operationId: string) => `${operationId}${method.toLowerCase()}`;\n  }\n\n  private _maybeAppendPath(path: string) {\n    const pathParts = path.split('/').filter(Boolean);\n\n    return (operationId: string) => {\n      if (!pathParts.length) {\n        return operationId;\n      }\n\n      // Make sure to add a trailing slash after the method name\n      let appendix = '/';\n\n      const formatPart = (str: string) => (/[_/]$/.test(appendix) ? str : `_${str}`);\n\n      pathParts.forEach((part) => {\n        const match = REGEX_STRAPI_PATH_PARAMS.exec(part);\n\n        appendix += match\n          ? // Parameter\n            formatPart(`by_${match[1]}`)\n          : // Regular path segment\n            formatPart(part.replaceAll(/\\W/g, '_'));\n      });\n\n      return `${operationId}${appendix}`;\n    };\n  }\n}\n"],"names":["debug","createDebugger","OperationIDAssembler","assemble","context","route","path","method","info","origin","apiName","pluginName","operationId","map","_maybeAppendOrigin","_appendMethod","_maybeAppendPath","output","data","toLowerCase","pathParts","split","filter","Boolean","length","appendix","formatPart","str","test","forEach","part","match","REGEX_STRAPI_PATH_PARAMS","exec","replaceAll"],"mappings":";;;;;AAQA,MAAMA,QAAQC,cAAAA,CAAe,wBAAA,CAAA;AAEtB,MAAMC,oBAAAA,CAAAA;IACXC,QAAAA,CAASC,OAAyB,EAAEC,KAAiB,EAAQ;AAC3D,QAAA,MAAM,EAAEC,IAAI,EAAEC,MAAM,EAAEC,IAAI,EAAE,GAAGH,KAAAA;AAE/B,QAAA,MAAMI,MAAAA,GAASD,IAAAA,CAAKE,OAAO,IAAIF,KAAKG,UAAU;QAE9C,MAAM,CAACC,YAAY,GAAG;AAAC,YAAA;AAAG,SACxB;AACCC,SAAAA,GAAG,CAAC,IAAI,CAACC,kBAAkB,CAACL,QAC7B;AACCI,SAAAA,GAAG,CAAC,IAAI,CAACE,aAAa,CAACR,QACxB;AACCM,SAAAA,GAAG,CAAC,IAAI,CAACG,gBAAgB,CAACV,IAAAA,CAAAA,CAAAA;QAE7BN,KAAAA,CAAM,yCAAA,EAA2CO,QAAQD,IAAAA,EAAMM,WAAAA,CAAAA;AAE/DR,QAAAA,OAAAA,CAAQa,MAAM,CAACC,IAAI,CAACN,WAAW,GAAGA,WAAAA;AACpC,IAAA;AAEQE,IAAAA,kBAAAA,CAAmBL,MAAe,EAAE;AAC1C,QAAA,OAAO,IAAOA,MAAAA,GAAS,CAAA,EAAGA,MAAAA,CAAO,CAAC,CAAC,GAAG,EAAA;AACxC,IAAA;AAEQM,IAAAA,aAAAA,CAAcR,MAAc,EAAE;AACpC,QAAA,OAAO,CAACK,WAAAA,GAAwB,CAAA,EAAGA,WAAAA,CAAAA,EAAcL,MAAAA,CAAOY,WAAW,EAAA,CAAA,CAAI;AACzE,IAAA;AAEQH,IAAAA,gBAAAA,CAAiBV,IAAY,EAAE;AACrC,QAAA,MAAMc,YAAYd,IAAAA,CAAKe,KAAK,CAAC,GAAA,CAAA,CAAKC,MAAM,CAACC,OAAAA,CAAAA;AAEzC,QAAA,OAAO,CAACX,WAAAA,GAAAA;YACN,IAAI,CAACQ,SAAAA,CAAUI,MAAM,EAAE;gBACrB,OAAOZ,WAAAA;AACT,YAAA;;AAGA,YAAA,IAAIa,QAAAA,GAAW,GAAA;YAEf,MAAMC,UAAAA,GAAa,CAACC,GAAAA,GAAiB,OAAA,CAAQC,IAAI,CAACH,QAAAA,CAAAA,GAAYE,GAAAA,GAAM,CAAC,CAAC,EAAEA,GAAAA,CAAAA,CAAK;YAE7EP,SAAAA,CAAUS,OAAO,CAAC,CAACC,IAAAA,GAAAA;gBACjB,MAAMC,KAAAA,GAAQC,wBAAAA,CAAyBC,IAAI,CAACH,IAAAA,CAAAA;AAE5CL,gBAAAA,QAAAA,IAAYM,KAAAA,GAERL,UAAAA,CAAW,CAAC,GAAG,EAAEK,KAAK,CAAC,CAAA,CAAE,CAAA,CAAE,CAAA,GAE3BL,UAAAA,CAAWI,IAAAA,CAAKI,UAAU,CAAC,KAAA,EAAO,GAAA,CAAA,CAAA;AACxC,YAAA,CAAA,CAAA;YAEA,OAAO,CAAA,EAAGtB,cAAca,QAAAA,CAAAA,CAAU;AACpC,QAAA,CAAA;AACF,IAAA;AACF;;;;"}