@openapi-qraft/react
Version:
OpenAPI client for React, providing type-safe requests and dynamic TanStack Query React Hooks via a modular, Proxy-based architecture.
40 lines (36 loc) • 2.37 kB
JavaScript
;
var shelfMerge = require('./lib/shelfMerge.cjs');
function qraftPredefinedParametersRequestFn(inputPredefinedParameters, targetPredefinedParameters, requestFn) {
return function predefinedParametersRequestFn(schema, requestInfo, options) {
const matchingInputPredefinedParameters = targetPredefinedParameters.flatMap((targetParameter)=>targetParameter.paths.includes(schema.url) && (!targetParameter.methods.length || targetParameter.methods.includes(schema.method)) ? inputPredefinedParameters.filter((predefinedParameter)=>predefinedParameter.requestPattern === targetParameter.requestPattern) : []);
if (!matchingInputPredefinedParameters?.length) return requestFn(schema, requestInfo, options);
return Promise.all(matchingInputPredefinedParameters.map((item)=>resolveQraftPredefinedParameters(item.parameters))).then((resolvedPredefinedParameters)=>{
const mergedParameters = resolvedPredefinedParameters.reduce((acc, item)=>{
acc = shelfMerge.shelfMerge(2, acc, item);
return acc;
}, {});
return requestFn(schema, {
...requestInfo,
parameters: shelfMerge.shelfMerge(2, mergedParameters, requestInfo.parameters)
}, options);
});
};
}
async function resolveQraftPredefinedParameters(predefinedParameters) {
return Promise.all(predefinedParameters.map(async (predefinedParameter)=>{
return {
...predefinedParameter,
value: await resolveQraftPredefinedParameterValue(predefinedParameter.value)
};
})).then((resolvedPredefinedParameters)=>resolvedPredefinedParameters.filter((resolvedPredefinedParameter)=>resolvedPredefinedParameter.value !== undefined).reduce((acc, resolvedPredefinedParameter)=>{
acc[resolvedPredefinedParameter.in] = acc[resolvedPredefinedParameter.in] ?? {};
acc[resolvedPredefinedParameter.in][resolvedPredefinedParameter.name] = resolvedPredefinedParameter.value;
return acc;
}, {}));
}
async function resolveQraftPredefinedParameterValue(value) {
if (value && typeof value === 'function') return await value();
return value;
}
exports.qraftPredefinedParametersRequestFn = qraftPredefinedParametersRequestFn;
//# sourceMappingURL=qraftPredefinedParametersRequestFn.cjs.map