-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathOasV2ParameterObjectsParser.ts
86 lines (76 loc) · 2.49 KB
/
OasV2ParameterObjectsParser.ts
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
import {
ParamLocation,
SpecTreeRequestBodyParam,
SpecTreeNodeParam
} from '../../../models';
import { BaseOasParameterObjectsParser } from '../BaseOasParameterObjectsParser';
import jsonPointer from 'json-pointer';
import { OpenAPIV2 } from '@har-sdk/core';
export class OasV2ParameterObjectsParser extends BaseOasParameterObjectsParser<
OpenAPIV2.Document,
OpenAPIV2.ReferenceObject | OpenAPIV2.Parameter
> {
constructor(doc: OpenAPIV2.Document, dereferencedDoc: OpenAPIV2.Document) {
super(doc, dereferencedDoc);
}
public parse(pointer: string): SpecTreeNodeParam[] {
const parameters: (OpenAPIV2.Parameter | OpenAPIV2.ReferenceObject)[] =
jsonPointer.has(this.doc, pointer)
? jsonPointer.get(this.doc, pointer)
: undefined;
return (
parameters?.flatMap(
(
parameter: OpenAPIV2.Parameter | OpenAPIV2.ReferenceObject,
idx: number
): SpecTreeNodeParam[] => {
const parameterPointer = `${pointer}/${idx}`;
const paramObj = this.getParameterObject(
parameterPointer,
parameter
) as OpenAPIV2.Parameter;
return paramObj.in === 'body'
? this.parseBodyParameter(parameterPointer, paramObj)
: [this.parseParameter(parameterPointer, paramObj)];
}
) ?? []
);
}
protected getParameterValue(
paramObj: OpenAPIV2.Parameter
): string | undefined {
return paramObj.default ?? paramObj.items?.default;
}
protected getValueJsonPointer(paramPointer: string): string {
return `${paramPointer}/default`;
}
protected parseParameter(
pointer: string,
paramObj: OpenAPIV2.Parameter
): SpecTreeNodeParam {
return super.parseParameter(pointer, {
...paramObj,
in:
paramObj.in === 'formData'
? ParamLocation.BODY
: (paramObj.in as ParamLocation)
});
}
private parseBodyParameter(
pointer: string,
parameter: OpenAPIV2.Parameter
): SpecTreeRequestBodyParam[] {
const operationObject: OpenAPIV2.OperationObject = jsonPointer.get(
this.doc,
jsonPointer.compile(jsonPointer.parse(pointer).slice(0, -2))
);
const mimeTypes = operationObject.consumes || ['application/json'];
const value = parameter.schema?.default;
return mimeTypes.map((mimeType) => ({
paramType: 'requestBody',
bodyType: mimeType,
...(value != null ? { value } : {}),
valueJsonPointer: this.getValueJsonPointer(`${pointer}/schema`)
}));
}
}