{"version":3,"file":"parameters.mjs","sources":["../../../../../../src/assemblers/document/path/path-item/operation/parameters.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport type { OpenAPIV3_1 } from 'openapi-types';\nimport type { Assembler } from '../../../..';\n\nimport type { OperationContext } from '../../../../../types';\nimport { createDebugger, zodToOpenAPI } from '../../../../../utils';\nimport {\n  hasExpandableObjectProperties,\n  shouldUseDeepObjectStyle,\n} from '../../../query-param-styles';\n\nconst debug = createDebugger('assembler:parameters');\n\ntype PathParameterObject = OpenAPIV3_1.ParameterObject & { in: 'path' };\ntype QueryParameterObject = OpenAPIV3_1.ParameterObject & { in: 'query' };\n\nexport class OperationParametersAssembler implements Assembler.Operation {\n  assemble(context: OperationContext, route: Core.Route): void {\n    debug('assembling parameters for %o %o...', route.method, route.path);\n\n    const schemaStore = context.strapi.contentAPISchemaRegistry;\n    const { extractedComponentSchemas } = context.registries;\n    const pathParameters = this._getPathParameters(route, schemaStore, extractedComponentSchemas);\n    debug('found %o path parameters', pathParameters.length);\n\n    const queryParameters = this._getQueryParameters(route, schemaStore, extractedComponentSchemas);\n    debug('found %o query parameters', queryParameters.length);\n\n    const parameters = [...pathParameters, ...queryParameters];\n    debug('assembled %o parameters for %o %o', parameters.length, route.method, route.path);\n\n    context.output.data.parameters = parameters;\n  }\n\n  private _getPathParameters(\n    route: Core.Route,\n    schemaStore: Core.ContentAPISchemaRegistry,\n    extractedComponentSchemas: Record<string, OpenAPIV3_1.SchemaObject>\n  ): PathParameterObject[] {\n    const { params } = route.request ?? {};\n\n    // TODO: Allow auto inference (from path) if enabled through configuration\n    if (!params) {\n      return [];\n    }\n\n    const pathParams: PathParameterObject[] = [];\n\n    for (const [name, zodSchema] of Object.entries(params)) {\n      const required = !zodSchema.isOptional();\n      const schema = zodToOpenAPI(zodSchema, schemaStore, {\n        extractedComponentSchemas,\n      }) as any;\n\n      pathParams.push({ name, in: 'path', required, schema });\n    }\n\n    return pathParams;\n  }\n\n  private _getQueryParameters(\n    route: Core.Route,\n    schemaStore: Core.ContentAPISchemaRegistry,\n    extractedComponentSchemas: Record<string, OpenAPIV3_1.SchemaObject>\n  ): QueryParameterObject[] {\n    const { query } = route.request ?? {};\n\n    if (!query) {\n      return [];\n    }\n\n    const queryParams: QueryParameterObject[] = [];\n\n    for (const [name, zodSchema] of Object.entries(query)) {\n      const required = !zodSchema.isOptional();\n      const schema = zodToOpenAPI(zodSchema, schemaStore, {\n        extractedComponentSchemas,\n      }) as any;\n\n      const resolvedSchema = this._resolveSchema(schema);\n\n      if (hasExpandableObjectProperties(resolvedSchema)) {\n        for (const [propName, propSchema] of Object.entries(resolvedSchema.properties!)) {\n          const isRequired = resolvedSchema.required?.includes(propName) ?? false;\n\n          const param: QueryParameterObject = {\n            name: `${name}[${propName}]`,\n            in: 'query',\n            required: isRequired,\n            schema: propSchema as any,\n          };\n\n          Object.assign(param, { 'x-strapi-serialize': 'querystring' });\n          queryParams.push(param);\n        }\n      } else if (shouldUseDeepObjectStyle(name, resolvedSchema)) {\n        const param: QueryParameterObject = {\n          name,\n          in: 'query',\n          required,\n          schema: resolvedSchema as any,\n          style: 'deepObject',\n          explode: true,\n        };\n\n        Object.assign(param, { 'x-strapi-serialize': 'querystring' });\n        queryParams.push(param);\n      } else {\n        const param: QueryParameterObject = { name, in: 'query', required, schema };\n        Object.assign(param, { 'x-strapi-serialize': 'querystring' });\n        queryParams.push(param);\n      }\n    }\n\n    return queryParams;\n  }\n\n  /**\n   * Resolve composite OpenAPI schemas (allOf/anyOf/oneOf) into a flat object shape\n   * so nested Strapi query params can be emitted as bracket notation (e.g. pagination[page]).\n   */\n  private _resolveSchema(schema: OpenAPIV3_1.SchemaObject): OpenAPIV3_1.SchemaObject {\n    if (schema.type === 'object' && schema.properties) {\n      return schema;\n    }\n\n    if (schema.allOf && Array.isArray(schema.allOf)) {\n      const mergedSchema: OpenAPIV3_1.SchemaObject = {\n        type: 'object',\n        properties: {},\n        required: [],\n      };\n\n      for (const subSchema of schema.allOf) {\n        if (!('$ref' in subSchema)) {\n          const hasAnyOfOneOf = Boolean(subSchema.anyOf || subSchema.oneOf);\n          const resolved = this._resolveSchema(subSchema);\n\n          if (resolved.type === 'object' && resolved.properties) {\n            Object.assign(mergedSchema.properties!, resolved.properties);\n            if (resolved.required && !hasAnyOfOneOf) {\n              mergedSchema.required = [\n                ...(mergedSchema.required ?? []),\n                ...(resolved.required as string[]),\n              ];\n            }\n          }\n        }\n      }\n\n      return hasExpandableObjectProperties(mergedSchema) ? mergedSchema : schema;\n    }\n\n    if (schema.anyOf && Array.isArray(schema.anyOf)) {\n      return this._extractCommonProperties(schema.anyOf, false);\n    }\n\n    if (schema.oneOf && Array.isArray(schema.oneOf)) {\n      return this._extractCommonProperties(schema.oneOf, false);\n    }\n\n    return schema;\n  }\n\n  private _extractCommonProperties(\n    schemas: OpenAPIV3_1.SchemaObject[],\n    preserveRequired = true\n  ): OpenAPIV3_1.SchemaObject {\n    const objectSchemas = schemas\n      .filter((s): s is OpenAPIV3_1.SchemaObject => !('$ref' in s))\n      .map((s) => this._resolveSchema(s))\n      .filter((s) => s.type === 'object' && s.properties);\n\n    if (objectSchemas.length === 0) {\n      return schemas[0] as OpenAPIV3_1.SchemaObject;\n    }\n\n    const allProperties: Record<string, OpenAPIV3_1.SchemaObject> = {};\n    let allRequired: string[] = [];\n\n    for (const objSchema of objectSchemas) {\n      Object.assign(allProperties, objSchema.properties);\n      if (preserveRequired && objSchema.required) {\n        allRequired.push(...(objSchema.required as string[]));\n      }\n    }\n\n    if (!preserveRequired) {\n      allRequired = [];\n    }\n\n    if (Object.keys(allProperties).length === 0) {\n      return schemas[0] as OpenAPIV3_1.SchemaObject;\n    }\n\n    return {\n      type: 'object',\n      properties: allProperties,\n      required: allRequired,\n    };\n  }\n}\n"],"names":["debug","createDebugger","OperationParametersAssembler","assemble","context","route","method","path","schemaStore","strapi","contentAPISchemaRegistry","extractedComponentSchemas","registries","pathParameters","_getPathParameters","length","queryParameters","_getQueryParameters","parameters","output","data","params","request","pathParams","name","zodSchema","Object","entries","required","isOptional","schema","zodToOpenAPI","push","in","query","queryParams","resolvedSchema","_resolveSchema","hasExpandableObjectProperties","propName","propSchema","properties","isRequired","includes","param","assign","shouldUseDeepObjectStyle","style","explode","type","allOf","Array","isArray","mergedSchema","subSchema","hasAnyOfOneOf","Boolean","anyOf","oneOf","resolved","_extractCommonProperties","schemas","preserveRequired","objectSchemas","filter","s","map","allProperties","allRequired","objSchema","keys"],"mappings":";;;;AAWA,MAAMA,QAAQC,cAAAA,CAAe,sBAAA,CAAA;AAKtB,MAAMC,4BAAAA,CAAAA;IACXC,QAAAA,CAASC,OAAyB,EAAEC,KAAiB,EAAQ;AAC3DL,QAAAA,KAAAA,CAAM,oCAAA,EAAsCK,KAAAA,CAAMC,MAAM,EAAED,MAAME,IAAI,CAAA;AAEpE,QAAA,MAAMC,WAAAA,GAAcJ,OAAAA,CAAQK,MAAM,CAACC,wBAAwB;AAC3D,QAAA,MAAM,EAAEC,yBAAyB,EAAE,GAAGP,QAAQQ,UAAU;AACxD,QAAA,MAAMC,iBAAiB,IAAI,CAACC,kBAAkB,CAACT,OAAOG,WAAAA,EAAaG,yBAAAA,CAAAA;QACnEX,KAAAA,CAAM,0BAAA,EAA4Ba,eAAeE,MAAM,CAAA;AAEvD,QAAA,MAAMC,kBAAkB,IAAI,CAACC,mBAAmB,CAACZ,OAAOG,WAAAA,EAAaG,yBAAAA,CAAAA;QACrEX,KAAAA,CAAM,2BAAA,EAA6BgB,gBAAgBD,MAAM,CAAA;AAEzD,QAAA,MAAMG,UAAAA,GAAa;AAAIL,YAAAA,GAAAA,cAAAA;AAAmBG,YAAAA,GAAAA;AAAgB,SAAA;QAC1DhB,KAAAA,CAAM,mCAAA,EAAqCkB,WAAWH,MAAM,EAAEV,MAAMC,MAAM,EAAED,MAAME,IAAI,CAAA;AAEtFH,QAAAA,OAAAA,CAAQe,MAAM,CAACC,IAAI,CAACF,UAAU,GAAGA,UAAAA;AACnC,IAAA;AAEQJ,IAAAA,kBAAAA,CACNT,KAAiB,EACjBG,WAA0C,EAC1CG,yBAAmE,EAC5C;AACvB,QAAA,MAAM,EAAEU,MAAM,EAAE,GAAGhB,KAAAA,CAAMiB,OAAO,IAAI,EAAC;;AAGrC,QAAA,IAAI,CAACD,MAAAA,EAAQ;AACX,YAAA,OAAO,EAAE;AACX,QAAA;AAEA,QAAA,MAAME,aAAoC,EAAE;QAE5C,KAAK,MAAM,CAACC,IAAAA,EAAMC,SAAAA,CAAU,IAAIC,MAAAA,CAAOC,OAAO,CAACN,MAAAA,CAAAA,CAAS;YACtD,MAAMO,QAAAA,GAAW,CAACH,SAAAA,CAAUI,UAAU,EAAA;YACtC,MAAMC,MAAAA,GAASC,YAAAA,CAAaN,SAAAA,EAAWjB,WAAAA,EAAa;AAClDG,gBAAAA;AACF,aAAA,CAAA;AAEAY,YAAAA,UAAAA,CAAWS,IAAI,CAAC;AAAER,gBAAAA,IAAAA;gBAAMS,EAAAA,EAAI,MAAA;AAAQL,gBAAAA,QAAAA;AAAUE,gBAAAA;AAAO,aAAA,CAAA;AACvD,QAAA;QAEA,OAAOP,UAAAA;AACT,IAAA;AAEQN,IAAAA,mBAAAA,CACNZ,KAAiB,EACjBG,WAA0C,EAC1CG,yBAAmE,EAC3C;AACxB,QAAA,MAAM,EAAEuB,KAAK,EAAE,GAAG7B,KAAAA,CAAMiB,OAAO,IAAI,EAAC;AAEpC,QAAA,IAAI,CAACY,KAAAA,EAAO;AACV,YAAA,OAAO,EAAE;AACX,QAAA;AAEA,QAAA,MAAMC,cAAsC,EAAE;QAE9C,KAAK,MAAM,CAACX,IAAAA,EAAMC,SAAAA,CAAU,IAAIC,MAAAA,CAAOC,OAAO,CAACO,KAAAA,CAAAA,CAAQ;YACrD,MAAMN,QAAAA,GAAW,CAACH,SAAAA,CAAUI,UAAU,EAAA;YACtC,MAAMC,MAAAA,GAASC,YAAAA,CAAaN,SAAAA,EAAWjB,WAAAA,EAAa;AAClDG,gBAAAA;AACF,aAAA,CAAA;AAEA,YAAA,MAAMyB,cAAAA,GAAiB,IAAI,CAACC,cAAc,CAACP,MAAAA,CAAAA;AAE3C,YAAA,IAAIQ,8BAA8BF,cAAAA,CAAAA,EAAiB;gBACjD,KAAK,MAAM,CAACG,QAAAA,EAAUC,UAAAA,CAAW,IAAId,OAAOC,OAAO,CAACS,cAAAA,CAAeK,UAAU,CAAA,CAAI;AAC/E,oBAAA,MAAMC,UAAAA,GAAaN,cAAAA,CAAeR,QAAQ,EAAEe,SAASJ,QAAAA,CAAAA,IAAa,KAAA;AAElE,oBAAA,MAAMK,KAAAA,GAA8B;AAClCpB,wBAAAA,IAAAA,EAAM,GAAGA,IAAAA,CAAK,CAAC,EAAEe,QAAAA,CAAS,CAAC,CAAC;wBAC5BN,EAAAA,EAAI,OAAA;wBACJL,QAAAA,EAAUc,UAAAA;wBACVZ,MAAAA,EAAQU;AACV,qBAAA;oBAEAd,MAAAA,CAAOmB,MAAM,CAACD,KAAAA,EAAO;wBAAE,oBAAA,EAAsB;AAAc,qBAAA,CAAA;AAC3DT,oBAAAA,WAAAA,CAAYH,IAAI,CAACY,KAAAA,CAAAA;AACnB,gBAAA;YACF,CAAA,MAAO,IAAIE,wBAAAA,CAAyBtB,IAAAA,EAAMY,cAAAA,CAAAA,EAAiB;AACzD,gBAAA,MAAMQ,KAAAA,GAA8B;AAClCpB,oBAAAA,IAAAA;oBACAS,EAAAA,EAAI,OAAA;AACJL,oBAAAA,QAAAA;oBACAE,MAAAA,EAAQM,cAAAA;oBACRW,KAAAA,EAAO,YAAA;oBACPC,OAAAA,EAAS;AACX,iBAAA;gBAEAtB,MAAAA,CAAOmB,MAAM,CAACD,KAAAA,EAAO;oBAAE,oBAAA,EAAsB;AAAc,iBAAA,CAAA;AAC3DT,gBAAAA,WAAAA,CAAYH,IAAI,CAACY,KAAAA,CAAAA;YACnB,CAAA,MAAO;AACL,gBAAA,MAAMA,KAAAA,GAA8B;AAAEpB,oBAAAA,IAAAA;oBAAMS,EAAAA,EAAI,OAAA;AAASL,oBAAAA,QAAAA;AAAUE,oBAAAA;AAAO,iBAAA;gBAC1EJ,MAAAA,CAAOmB,MAAM,CAACD,KAAAA,EAAO;oBAAE,oBAAA,EAAsB;AAAc,iBAAA,CAAA;AAC3DT,gBAAAA,WAAAA,CAAYH,IAAI,CAACY,KAAAA,CAAAA;AACnB,YAAA;AACF,QAAA;QAEA,OAAOT,WAAAA;AACT,IAAA;AAEA;;;MAIQE,cAAAA,CAAeP,MAAgC,EAA4B;AACjF,QAAA,IAAIA,OAAOmB,IAAI,KAAK,QAAA,IAAYnB,MAAAA,CAAOW,UAAU,EAAE;YACjD,OAAOX,MAAAA;AACT,QAAA;QAEA,IAAIA,MAAAA,CAAOoB,KAAK,IAAIC,KAAAA,CAAMC,OAAO,CAACtB,MAAAA,CAAOoB,KAAK,CAAA,EAAG;AAC/C,YAAA,MAAMG,YAAAA,GAAyC;gBAC7CJ,IAAAA,EAAM,QAAA;AACNR,gBAAAA,UAAAA,EAAY,EAAC;AACbb,gBAAAA,QAAAA,EAAU;AACZ,aAAA;AAEA,YAAA,KAAK,MAAM0B,SAAAA,IAAaxB,MAAAA,CAAOoB,KAAK,CAAE;AACpC,gBAAA,IAAI,EAAE,MAAA,IAAUI,SAAQ,CAAA,EAAI;AAC1B,oBAAA,MAAMC,gBAAgBC,OAAAA,CAAQF,SAAAA,CAAUG,KAAK,IAAIH,UAAUI,KAAK,CAAA;AAChE,oBAAA,MAAMC,QAAAA,GAAW,IAAI,CAACtB,cAAc,CAACiB,SAAAA,CAAAA;AAErC,oBAAA,IAAIK,SAASV,IAAI,KAAK,QAAA,IAAYU,QAAAA,CAASlB,UAAU,EAAE;AACrDf,wBAAAA,MAAAA,CAAOmB,MAAM,CAACQ,YAAAA,CAAaZ,UAAU,EAAGkB,SAASlB,UAAU,CAAA;AAC3D,wBAAA,IAAIkB,QAAAA,CAAS/B,QAAQ,IAAI,CAAC2B,aAAAA,EAAe;AACvCF,4BAAAA,YAAAA,CAAazB,QAAQ,GAAG;mCAClByB,YAAAA,CAAazB,QAAQ,IAAI,EAAE;AAC3B+B,gCAAAA,GAAAA,QAAAA,CAAS/B;AACd,6BAAA;AACH,wBAAA;AACF,oBAAA;AACF,gBAAA;AACF,YAAA;YAEA,OAAOU,6BAAAA,CAA8Be,gBAAgBA,YAAAA,GAAevB,MAAAA;AACtE,QAAA;QAEA,IAAIA,MAAAA,CAAO2B,KAAK,IAAIN,KAAAA,CAAMC,OAAO,CAACtB,MAAAA,CAAO2B,KAAK,CAAA,EAAG;AAC/C,YAAA,OAAO,IAAI,CAACG,wBAAwB,CAAC9B,MAAAA,CAAO2B,KAAK,EAAE,KAAA,CAAA;AACrD,QAAA;QAEA,IAAI3B,MAAAA,CAAO4B,KAAK,IAAIP,KAAAA,CAAMC,OAAO,CAACtB,MAAAA,CAAO4B,KAAK,CAAA,EAAG;AAC/C,YAAA,OAAO,IAAI,CAACE,wBAAwB,CAAC9B,MAAAA,CAAO4B,KAAK,EAAE,KAAA,CAAA;AACrD,QAAA;QAEA,OAAO5B,MAAAA;AACT,IAAA;AAEQ8B,IAAAA,wBAAAA,CACNC,OAAmC,EACnCC,gBAAAA,GAAmB,IAAI,EACG;AAC1B,QAAA,MAAMC,aAAAA,GAAgBF,OAAAA,CACnBG,MAAM,CAAC,CAACC,CAAAA,GAAqC,EAAE,MAAA,IAAUA,CAAAA,CAAAA,CAAAA,CACzDC,GAAG,CAAC,CAACD,CAAAA,GAAM,IAAI,CAAC5B,cAAc,CAAC4B,CAAAA,CAAAA,CAAAA,CAC/BD,MAAM,CAAC,CAACC,CAAAA,GAAMA,CAAAA,CAAEhB,IAAI,KAAK,QAAA,IAAYgB,EAAExB,UAAU,CAAA;QAEpD,IAAIsB,aAAAA,CAAchD,MAAM,KAAK,CAAA,EAAG;YAC9B,OAAO8C,OAAO,CAAC,CAAA,CAAE;AACnB,QAAA;AAEA,QAAA,MAAMM,gBAA0D,EAAC;AACjE,QAAA,IAAIC,cAAwB,EAAE;QAE9B,KAAK,MAAMC,aAAaN,aAAAA,CAAe;AACrCrC,YAAAA,MAAAA,CAAOmB,MAAM,CAACsB,aAAAA,EAAeE,SAAAA,CAAU5B,UAAU,CAAA;YACjD,IAAIqB,gBAAAA,IAAoBO,SAAAA,CAAUzC,QAAQ,EAAE;gBAC1CwC,WAAAA,CAAYpC,IAAI,CAAA,GAAKqC,SAAAA,CAAUzC,QAAQ,CAAA;AACzC,YAAA;AACF,QAAA;AAEA,QAAA,IAAI,CAACkC,gBAAAA,EAAkB;AACrBM,YAAAA,WAAAA,GAAc,EAAE;AAClB,QAAA;AAEA,QAAA,IAAI1C,OAAO4C,IAAI,CAACH,aAAAA,CAAAA,CAAepD,MAAM,KAAK,CAAA,EAAG;YAC3C,OAAO8C,OAAO,CAAC,CAAA,CAAE;AACnB,QAAA;QAEA,OAAO;YACLZ,IAAAA,EAAM,QAAA;YACNR,UAAAA,EAAY0B,aAAAA;YACZvC,QAAAA,EAAUwC;AACZ,SAAA;AACF,IAAA;AACF;;;;"}