@scalar/postman-to-openapi 0.5.2 → 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/convert.js +240 -212
- package/dist/helpers/auth.js +116 -92
- package/dist/helpers/contact.js +24 -20
- package/dist/helpers/external-docs.js +33 -25
- package/dist/helpers/form-data.js +42 -36
- package/dist/helpers/license.js +21 -17
- package/dist/helpers/logo.js +22 -21
- package/dist/helpers/markdown.js +33 -30
- package/dist/helpers/parameters.js +119 -96
- package/dist/helpers/path-items.js +244 -202
- package/dist/helpers/post-response-scripts.js +12 -12
- package/dist/helpers/pre-request-scripts.js +12 -12
- package/dist/helpers/prune-document.js +42 -35
- package/dist/helpers/request-body.js +102 -92
- package/dist/helpers/responses.js +62 -57
- package/dist/helpers/schemas.js +43 -37
- package/dist/helpers/servers.js +83 -57
- package/dist/helpers/status-codes.js +40 -30
- package/dist/helpers/urls.js +74 -51
- package/dist/index.js +1 -5
- package/dist/types.js +1 -1
- package/package.json +6 -11
- package/dist/convert.js.map +0 -7
- package/dist/helpers/auth.js.map +0 -7
- package/dist/helpers/contact.js.map +0 -7
- package/dist/helpers/external-docs.js.map +0 -7
- package/dist/helpers/form-data.js.map +0 -7
- package/dist/helpers/license.js.map +0 -7
- package/dist/helpers/logo.js.map +0 -7
- package/dist/helpers/markdown.js.map +0 -7
- package/dist/helpers/parameters.js.map +0 -7
- package/dist/helpers/path-items.js.map +0 -7
- package/dist/helpers/post-response-scripts.js.map +0 -7
- package/dist/helpers/pre-request-scripts.js.map +0 -7
- package/dist/helpers/prune-document.js.map +0 -7
- package/dist/helpers/request-body.js.map +0 -7
- package/dist/helpers/responses.js.map +0 -7
- package/dist/helpers/schemas.js.map +0 -7
- package/dist/helpers/servers.js.map +0 -7
- package/dist/helpers/status-codes.js.map +0 -7
- package/dist/helpers/urls.js.map +0 -7
- package/dist/index.js.map +0 -7
- package/dist/types.js.map +0 -7
|
@@ -1,103 +1,126 @@
|
|
|
1
|
-
import { inferSchemaType } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
if (paramObj.name) {
|
|
21
|
-
parameterMap.set(paramObj.name, paramObj);
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
if (url.path) {
|
|
26
|
-
const pathArray = Array.isArray(url.path) ? url.path : [url.path];
|
|
27
|
-
const extractedVariables = extractPathVariablesFromPathArray(pathArray);
|
|
28
|
-
extractedVariables.forEach((varName) => {
|
|
29
|
-
if (!parameterMap.has(varName)) {
|
|
30
|
-
parameterMap.set(varName, {
|
|
31
|
-
name: varName,
|
|
32
|
-
in: "path",
|
|
33
|
-
required: true,
|
|
34
|
-
schema: {
|
|
35
|
-
type: "string"
|
|
36
|
-
}
|
|
1
|
+
import { inferSchemaType } from './schemas.js';
|
|
2
|
+
/**
|
|
3
|
+
* Extracts parameters from a Postman request and converts them to OpenAPI parameter objects.
|
|
4
|
+
* Processes query, path, and header parameters from the request URL and headers.
|
|
5
|
+
*/
|
|
6
|
+
export function extractParameters(request) {
|
|
7
|
+
const parameters = [];
|
|
8
|
+
const parameterMap = new Map();
|
|
9
|
+
if (typeof request === 'string' || !request.url) {
|
|
10
|
+
return parameters;
|
|
11
|
+
}
|
|
12
|
+
const url = typeof request.url === 'string' ? { raw: request.url } : request.url;
|
|
13
|
+
// Process query parameters
|
|
14
|
+
if (url.query) {
|
|
15
|
+
url.query.forEach((param) => {
|
|
16
|
+
const paramObj = createParameterObject(param, 'query');
|
|
17
|
+
if (paramObj.name) {
|
|
18
|
+
parameterMap.set(paramObj.name, paramObj);
|
|
19
|
+
}
|
|
37
20
|
});
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
|
|
21
|
+
}
|
|
22
|
+
// Process path parameters
|
|
23
|
+
if (url.variable) {
|
|
24
|
+
url.variable.forEach((param) => {
|
|
25
|
+
const paramObj = createParameterObject(param, 'path');
|
|
26
|
+
if (paramObj.name) {
|
|
27
|
+
parameterMap.set(paramObj.name, paramObj);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
// Include variables extracted from url.path array
|
|
32
|
+
if (url.path) {
|
|
33
|
+
const pathArray = Array.isArray(url.path) ? url.path : [url.path];
|
|
34
|
+
const extractedVariables = extractPathVariablesFromPathArray(pathArray);
|
|
35
|
+
extractedVariables.forEach((varName) => {
|
|
36
|
+
if (!parameterMap.has(varName)) {
|
|
37
|
+
parameterMap.set(varName, {
|
|
38
|
+
name: varName,
|
|
39
|
+
in: 'path',
|
|
40
|
+
required: true,
|
|
41
|
+
schema: {
|
|
42
|
+
type: 'string',
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
// Process header parameters
|
|
49
|
+
if (request.header && Array.isArray(request.header)) {
|
|
50
|
+
request.header.forEach((header) => {
|
|
51
|
+
const paramObj = createParameterObject(header, 'header');
|
|
52
|
+
if (paramObj.name) {
|
|
53
|
+
parameterMap.set(paramObj.name, paramObj);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return Array.from(parameterMap.values());
|
|
50
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Helper function to extract variables from the url.path array.
|
|
61
|
+
*/
|
|
51
62
|
function extractPathVariablesFromPathArray(pathArray) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
63
|
+
const variables = [];
|
|
64
|
+
const variableRegex = /{{\s*([\w.-]+)\s*}}/;
|
|
65
|
+
pathArray.forEach((segment) => {
|
|
66
|
+
const segmentString = typeof segment === 'string' ? segment : segment.value;
|
|
67
|
+
const match = segmentString.match(variableRegex);
|
|
68
|
+
if (match?.[1]) {
|
|
69
|
+
variables.push(match[1]);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return variables;
|
|
62
73
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
if (
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
74
|
+
/**
|
|
75
|
+
* Creates an OpenAPI parameter object from a Postman parameter.
|
|
76
|
+
*/
|
|
77
|
+
export function createParameterObject(param, paramIn) {
|
|
78
|
+
const parameter = {
|
|
79
|
+
name: param.key || '',
|
|
80
|
+
in: paramIn,
|
|
81
|
+
description: param.description,
|
|
82
|
+
};
|
|
83
|
+
// Path parameters are always required in OpenAPI
|
|
84
|
+
if (paramIn === 'path') {
|
|
85
|
+
parameter.required = true;
|
|
86
|
+
}
|
|
87
|
+
else if (paramIn === 'query') {
|
|
88
|
+
// Check if the parameter is required based on description or name
|
|
89
|
+
const isRequired = param.description?.toLowerCase().includes('[required]') || (param.key && param.key.toLowerCase() === 'required');
|
|
90
|
+
if (isRequired) {
|
|
91
|
+
parameter.required = true;
|
|
92
|
+
// Remove '[required]' from the description
|
|
93
|
+
if (parameter.description) {
|
|
94
|
+
parameter.description = parameter.description.replace(/\[required\]/gi, '').trim();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (param.value !== undefined) {
|
|
99
|
+
parameter.example = param.value;
|
|
100
|
+
// For path parameters, prefer string type unless value is explicitly a number type
|
|
101
|
+
// This prevents converting string IDs like "testId" to integers
|
|
102
|
+
if (paramIn === 'path') {
|
|
103
|
+
// Path parameters are typically strings (IDs, slugs, etc.)
|
|
104
|
+
// Only use number/integer if the value is actually a number type, not a string
|
|
105
|
+
if (typeof param.value === 'number') {
|
|
106
|
+
parameter.schema = inferSchemaType(param.value);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
// For strings (including empty strings), default to string type
|
|
110
|
+
parameter.schema = { type: 'string' };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
parameter.schema = inferSchemaType(param.value);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
parameter.schema = { type: 'string' }; // Default to string if no value is provided
|
|
78
119
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
if (typeof param.value === "number") {
|
|
84
|
-
parameter.schema = inferSchemaType(param.value);
|
|
85
|
-
} else {
|
|
86
|
-
parameter.schema = { type: "string" };
|
|
87
|
-
}
|
|
88
|
-
} else {
|
|
89
|
-
parameter.schema = inferSchemaType(param.value);
|
|
120
|
+
// Add x-scalar-disabled extension if parameter is disabled
|
|
121
|
+
if (param.disabled === true) {
|
|
122
|
+
// @ts-expect-error - x-scalar-disabled is not a valid parameter object property
|
|
123
|
+
parameter['x-scalar-disabled'] = true;
|
|
90
124
|
}
|
|
91
|
-
|
|
92
|
-
parameter.schema = { type: "string" };
|
|
93
|
-
}
|
|
94
|
-
if (param.disabled === true) {
|
|
95
|
-
parameter["x-scalar-disabled"] = true;
|
|
96
|
-
}
|
|
97
|
-
return parameter;
|
|
125
|
+
return parameter;
|
|
98
126
|
}
|
|
99
|
-
export {
|
|
100
|
-
createParameterObject,
|
|
101
|
-
extractParameters
|
|
102
|
-
};
|
|
103
|
-
//# sourceMappingURL=parameters.js.map
|