{"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,cAAe,CAAA,wBAAA,CAAA;AAEtB,MAAMC,oBAAAA,CAAAA;IACXC,QAASC,CAAAA,OAAyB,EAAEC,KAAiB,EAAQ;AAC3D,QAAA,MAAM,EAAEC,IAAI,EAAEC,MAAM,EAAEC,IAAI,EAAE,GAAGH,KAAAA;AAE/B,QAAA,MAAMI,MAASD,GAAAA,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,KAAM,CAAA,yCAAA,EAA2CO,QAAQD,IAAMM,EAAAA,WAAAA,CAAAA;AAE/DR,QAAAA,OAAAA,CAAQa,MAAM,CAACC,IAAI,CAACN,WAAW,GAAGA,WAAAA;AACpC;AAEQE,IAAAA,kBAAAA,CAAmBL,MAAe,EAAE;AAC1C,QAAA,OAAO,IAAOA,MAAS,GAAA,CAAA,EAAGA,MAAO,CAAA,CAAC,CAAC,GAAG,EAAA;AACxC;AAEQM,IAAAA,aAAAA,CAAcR,MAAc,EAAE;AACpC,QAAA,OAAO,CAACK,WAAwB,GAAA,CAAA,EAAGA,WAAcL,CAAAA,EAAAA,MAAAA,CAAOY,WAAW,EAAI,CAAA,CAAA;AACzE;AAEQH,IAAAA,gBAAAA,CAAiBV,IAAY,EAAE;AACrC,QAAA,MAAMc,YAAYd,IAAKe,CAAAA,KAAK,CAAC,GAAA,CAAA,CAAKC,MAAM,CAACC,OAAAA,CAAAA;AAEzC,QAAA,OAAO,CAACX,WAAAA,GAAAA;YACN,IAAI,CAACQ,SAAUI,CAAAA,MAAM,EAAE;gBACrB,OAAOZ,WAAAA;AACT;;AAGA,YAAA,IAAIa,QAAW,GAAA,GAAA;YAEf,MAAMC,UAAAA,GAAa,CAACC,GAAAA,GAAiB,OAAQC,CAAAA,IAAI,CAACH,QAAAA,CAAAA,GAAYE,GAAM,GAAA,CAAC,CAAC,EAAEA,GAAK,CAAA,CAAA;YAE7EP,SAAUS,CAAAA,OAAO,CAAC,CAACC,IAAAA,GAAAA;gBACjB,MAAMC,KAAAA,GAAQC,wBAAyBC,CAAAA,IAAI,CAACH,IAAAA,CAAAA;AAE5CL,gBAAAA,QAAAA,IAAYM,KAERL,GAAAA,UAAAA,CAAW,CAAC,GAAG,EAAEK,KAAK,CAAC,CAAE,CAAA,CAAA,CAAE,CAE3BL,GAAAA,UAAAA,CAAWI,IAAKI,CAAAA,UAAU,CAAC,KAAO,EAAA,GAAA,CAAA,CAAA;AACxC,aAAA,CAAA;YAEA,OAAO,CAAA,EAAGtB,cAAca,QAAU,CAAA,CAAA;AACpC,SAAA;AACF;AACF;;;;"}