{"version":3,"file":"qraftPredefinedParametersRequestFn.cjs","sources":["../../src/qraftPredefinedParametersRequestFn.ts"],"sourcesContent":["import type {\n  OperationSchema,\n  RequestFn,\n  RequestFnInfo,\n  RequestFnOptions,\n  RequestFnResponse,\n} from './lib/requestFn.js';\nimport { shelfMerge } from './lib/shelfMerge.js';\n\nexport type QraftPredefinedParameterValue<TValue> =\n  | TValue\n  | (() => Promise<TValue | undefined>)\n  | undefined;\n\nexport type InputPredefinedParametersItem<TValue> = {\n  requestPattern: string;\n  parameters: Array<{\n    in: 'header' | 'query' | 'cookie';\n    name: string;\n    value: QraftPredefinedParameterValue<TValue>;\n  }>;\n};\n\ntype TargetPredefinedParametersMethods =\n  | 'get'\n  | 'post'\n  | 'put'\n  | 'patch'\n  | 'delete'\n  | 'options'\n  | 'head'\n  | 'trace';\n\nexport type TargetPredefinedParametersItem = {\n  requestPattern: string;\n  methods:\n    | Array<TargetPredefinedParametersMethods>\n    | ReadonlyArray<Readonly<TargetPredefinedParametersMethods>>;\n  paths: Array<string> | ReadonlyArray<Readonly<string>>;\n};\n\nexport function qraftPredefinedParametersRequestFn<\n  TInputPredefinedParametersItem extends InputPredefinedParametersItem<any>,\n  TData,\n  TError,\n>(\n  inputPredefinedParameters:\n    | Array<TInputPredefinedParametersItem>\n    | ReadonlyArray<Readonly<TInputPredefinedParametersItem>>,\n  targetPredefinedParameters:\n    | Array<TargetPredefinedParametersItem>\n    | ReadonlyArray<Readonly<TargetPredefinedParametersItem>>,\n  requestFn: RequestFn<TData, TError>\n): RequestFn<TData, TError> {\n  return function predefinedParametersRequestFn(\n    schema: OperationSchema,\n    requestInfo: RequestFnInfo,\n    options?: RequestFnOptions\n  ): Promise<RequestFnResponse<TData, TError>> {\n    const matchingInputPredefinedParameters =\n      targetPredefinedParameters.flatMap((targetParameter) =>\n        targetParameter.paths.includes(schema.url) &&\n        (!targetParameter.methods.length ||\n          targetParameter.methods.includes(schema.method))\n          ? inputPredefinedParameters.filter(\n              (predefinedParameter) =>\n                predefinedParameter.requestPattern ===\n                targetParameter.requestPattern\n            )\n          : []\n      );\n\n    if (!matchingInputPredefinedParameters?.length)\n      return requestFn(schema, requestInfo, options);\n\n    return Promise.all(\n      matchingInputPredefinedParameters.map((item) =>\n        resolveQraftPredefinedParameters(item.parameters)\n      )\n    ).then((resolvedPredefinedParameters) => {\n      const mergedParameters = resolvedPredefinedParameters.reduce(\n        (acc, item) => {\n          acc = shelfMerge(2, acc, item);\n          return acc;\n        },\n        {}\n      );\n\n      return requestFn(\n        schema,\n        {\n          ...requestInfo,\n          parameters: shelfMerge(2, mergedParameters, requestInfo.parameters),\n        },\n        options\n      );\n    });\n  };\n}\n\nasync function resolveQraftPredefinedParameters<T>(\n  predefinedParameters: InputPredefinedParametersItem<T>['parameters']\n) {\n  return Promise.all(\n    predefinedParameters.map(async (predefinedParameter) => {\n      return {\n        ...predefinedParameter,\n        value: await resolveQraftPredefinedParameterValue(\n          predefinedParameter.value\n        ),\n      };\n    })\n  ).then((resolvedPredefinedParameters) =>\n    resolvedPredefinedParameters\n      .filter(\n        (resolvedPredefinedParameter) =>\n          resolvedPredefinedParameter.value !== undefined\n      )\n      .reduce(\n        (acc, resolvedPredefinedParameter) => {\n          acc[resolvedPredefinedParameter.in] =\n            acc[resolvedPredefinedParameter.in] ?? {};\n\n          acc[resolvedPredefinedParameter.in][\n            resolvedPredefinedParameter.name\n          ] = resolvedPredefinedParameter.value;\n\n          return acc;\n        },\n        {} as Record<string, Record<string, unknown>>\n      )\n  );\n}\n\ntype QraftPredefinedParameterResolvedValue<TData> = TData extends () => Promise<\n  infer TAsyncData\n>\n  ? TAsyncData\n  : TData;\n\nasync function resolveQraftPredefinedParameterValue<TData>(\n  value: QraftPredefinedParameterValue<TData>\n): Promise<QraftPredefinedParameterResolvedValue<TData>> {\n  if (value && typeof value === 'function')\n    return (await (\n      value as () => Promise<TData | undefined>\n    )()) as QraftPredefinedParameterResolvedValue<TData>;\n  return value as QraftPredefinedParameterResolvedValue<TData>;\n}\n"],"names":["qraftPredefinedParametersRequestFn","inputPredefinedParameters","targetPredefinedParameters","requestFn","predefinedParametersRequestFn","schema","requestInfo","options","matchingInputPredefinedParameters","flatMap","targetParameter","paths","includes","url","methods","length","method","filter","predefinedParameter","requestPattern","Promise","all","map","item","resolveQraftPredefinedParameters","parameters","then","resolvedPredefinedParameters","mergedParameters","reduce","acc","shelfMerge","predefinedParameters","value","resolveQraftPredefinedParameterValue","resolvedPredefinedParameter","undefined","in","name"],"mappings":";;;;AAyCO,SAASA,kCAKdC,CAAAA,yBAE2D,EAC3DC,0BAE2D,EAC3DC,SAAmC,EAAA;AAEnC,IAAA,OAAO,SAASC,6BACdC,CAAAA,MAAuB,EACvBC,WAA0B,EAC1BC,OAA0B,EAAA;AAE1B,QAAA,MAAMC,oCACJN,0BAA2BO,CAAAA,OAAO,CAAC,CAACC,eAAAA,GAClCA,gBAAgBC,KAAK,CAACC,QAAQ,CAACP,OAAOQ,GAAG,CAAA,KACxC,CAACH,eAAAA,CAAgBI,OAAO,CAACC,MAAM,IAC9BL,eAAAA,CAAgBI,OAAO,CAACF,QAAQ,CAACP,MAAOW,CAAAA,MAAM,CAAA,CAC5Cf,GAAAA,yBAAAA,CAA0BgB,MAAM,CAC9B,CAACC,sBACCA,mBAAoBC,CAAAA,cAAc,KAClCT,eAAgBS,CAAAA,cAAc,IAElC,EAAE,CAAA,CAAA;AAGV,QAAA,IAAI,CAACX,iCAAmCO,EAAAA,MAAAA,EACtC,OAAOZ,SAAAA,CAAUE,QAAQC,WAAaC,EAAAA,OAAAA,CAAAA,CAAAA;AAExC,QAAA,OAAOa,OAAQC,CAAAA,GAAG,CAChBb,iCAAAA,CAAkCc,GAAG,CAAC,CAACC,IACrCC,GAAAA,gCAAAA,CAAiCD,IAAKE,CAAAA,UAAU,CAElDC,CAAAA,CAAAA,CAAAA,IAAI,CAAC,CAACC,4BAAAA,GAAAA;AACN,YAAA,MAAMC,gBAAmBD,GAAAA,4BAAAA,CAA6BE,MAAM,CAC1D,CAACC,GAAKP,EAAAA,IAAAA,GAAAA;gBACJO,GAAMC,GAAAA,qBAAAA,CAAW,GAAGD,GAAKP,EAAAA,IAAAA,CAAAA,CAAAA;gBACzB,OAAOO,GAAAA,CAAAA;AACT,aAAA,EACA,EAAC,CAAA,CAAA;AAGH,YAAA,OAAO3B,UACLE,MACA,EAAA;AACE,gBAAA,GAAGC,WAAW;AACdmB,gBAAAA,UAAAA,EAAYM,qBAAW,CAAA,CAAA,EAAGH,gBAAkBtB,EAAAA,WAAAA,CAAYmB,UAAU,CAAA;aAEpElB,EAAAA,OAAAA,CAAAA,CAAAA;AAEJ,SAAA,CAAA,CAAA;AACF,KAAA,CAAA;AACF,CAAA;AAEA,eAAeiB,iCACbQ,oBAAoE,EAAA;AAEpE,IAAA,OAAOZ,QAAQC,GAAG,CAChBW,oBAAqBV,CAAAA,GAAG,CAAC,OAAOJ,mBAAAA,GAAAA;QAC9B,OAAO;AACL,YAAA,GAAGA,mBAAmB;YACtBe,KAAO,EAAA,MAAMC,oCACXhB,CAAAA,mBAAAA,CAAoBe,KAAK,CAAA;AAE7B,SAAA,CAAA;AACF,KAAA,CAAA,CAAA,CACAP,IAAI,CAAC,CAACC,4BACNA,GAAAA,4BAAAA,CACGV,MAAM,CACL,CAACkB,2BACCA,GAAAA,2BAAAA,CAA4BF,KAAK,KAAKG,SAAAA,CAAAA,CAEzCP,MAAM,CACL,CAACC,GAAKK,EAAAA,2BAAAA,GAAAA;YACJL,GAAG,CAACK,2BAA4BE,CAAAA,EAAE,CAAC,GACjCP,GAAG,CAACK,2BAA4BE,CAAAA,EAAE,CAAC,IAAI,EAAC,CAAA;YAE1CP,GAAG,CAACK,2BAA4BE,CAAAA,EAAE,CAAC,CACjCF,4BAA4BG,IAAI,CACjC,GAAGH,2BAAAA,CAA4BF,KAAK,CAAA;YAErC,OAAOH,GAAAA,CAAAA;AACT,SAAA,EACA,EAAC,CAAA,CAAA,CAAA;AAGT,CAAA;AAQA,eAAeI,qCACbD,KAA2C,EAAA;AAE3C,IAAA,IAAIA,SAAS,OAAOA,KAAAA,KAAU,UAC5B,EAAA,OAAQ,MAAM,KACZA,EAAAA,CAAAA;IAEJ,OAAOA,KAAAA,CAAAA;AACT;;;;"}