Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 90x 90x 90x 90x 90x 90x 90x 90x 90x 90x 90x 90x 90x 90x 1x | import {library} from '@feasibleone/blong/types';
import {type OpenAPIV2} from 'openapi-types';
import interpolate from 'ut-function.interpolate';
import {snakeToCamel} from '../../../lib.ts';
export default library(
() =>
function request({
url,
method,
schemas,
path,
responseType,
}: {
url: string;
method: string;
schemas: OpenAPIV2.ParameterObject[];
path: string;
responseType: string;
}) {
return (
msg: {
body?: unknown;
baseUrl?: string;
params?: Record<string, unknown>;
payload?: unknown;
headers?: Record<string, unknown>;
responseType?: string;
} = {},
) => {
const {params = msg, body, baseUrl, headers, payload} = msg;
const result: {
url: string;
method: string;
body: unknown;
responseType: string | undefined;
headers: Record<string, unknown> | undefined;
form: Record<string, unknown> | undefined;
query: Record<string, unknown> | undefined;
json: unknown;
} = {
url: baseUrl ? baseUrl + path : url,
method,
body,
responseType: msg.responseType || responseType,
headers: headers as Record<string, unknown> | undefined,
form: undefined,
query: undefined,
json: undefined,
};
schemas.forEach(schema => {
const identifier = snakeToCamel(schema.name);
const param =
typeof (params as Record<string, unknown>)[identifier] === 'undefined'
? schema.default
: (params as Record<string, unknown>)[identifier];
switch (schema.in) {
case 'header':
if (schema.name.toLocaleLowerCase() === 'content-length') return;
result.headers ||= {};
result.headers[schema.name] = param;
break;
case 'query':
result.query ||= {};
result.query[schema.name] = param;
break;
case 'formData':
result.form ||= {};
result.form[schema.name] = param;
break;
case 'path':
result.url = interpolate(result.url, {[schema.name]: param});
break;
case 'body':
if (schema.schema?.properties || schema.schema?.additionalProperties)
result.json = schema.schema.additionalProperties
? payload
: Object.fromEntries(
Object.entries(
schema.schema.properties as Record<
string,
{default?: unknown}
>,
)
.map(
([name, value]) =>
name in params && [
name,
typeof (
params as Record<string, unknown>
)[name] === 'undefined'
? value.default
: (params as Record<string, unknown>)[
name
],
],
)
.filter(Boolean) as [string, unknown][],
);
break;
default:
break;
}
});
return result;
};
},
);
|