@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.
Files changed (44) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/convert.js +240 -212
  3. package/dist/helpers/auth.js +116 -92
  4. package/dist/helpers/contact.js +24 -20
  5. package/dist/helpers/external-docs.js +33 -25
  6. package/dist/helpers/form-data.js +42 -36
  7. package/dist/helpers/license.js +21 -17
  8. package/dist/helpers/logo.js +22 -21
  9. package/dist/helpers/markdown.js +33 -30
  10. package/dist/helpers/parameters.js +119 -96
  11. package/dist/helpers/path-items.js +244 -202
  12. package/dist/helpers/post-response-scripts.js +12 -12
  13. package/dist/helpers/pre-request-scripts.js +12 -12
  14. package/dist/helpers/prune-document.js +42 -35
  15. package/dist/helpers/request-body.js +102 -92
  16. package/dist/helpers/responses.js +62 -57
  17. package/dist/helpers/schemas.js +43 -37
  18. package/dist/helpers/servers.js +83 -57
  19. package/dist/helpers/status-codes.js +40 -30
  20. package/dist/helpers/urls.js +74 -51
  21. package/dist/index.js +1 -5
  22. package/dist/types.js +1 -1
  23. package/package.json +6 -11
  24. package/dist/convert.js.map +0 -7
  25. package/dist/helpers/auth.js.map +0 -7
  26. package/dist/helpers/contact.js.map +0 -7
  27. package/dist/helpers/external-docs.js.map +0 -7
  28. package/dist/helpers/form-data.js.map +0 -7
  29. package/dist/helpers/license.js.map +0 -7
  30. package/dist/helpers/logo.js.map +0 -7
  31. package/dist/helpers/markdown.js.map +0 -7
  32. package/dist/helpers/parameters.js.map +0 -7
  33. package/dist/helpers/path-items.js.map +0 -7
  34. package/dist/helpers/post-response-scripts.js.map +0 -7
  35. package/dist/helpers/pre-request-scripts.js.map +0 -7
  36. package/dist/helpers/prune-document.js.map +0 -7
  37. package/dist/helpers/request-body.js.map +0 -7
  38. package/dist/helpers/responses.js.map +0 -7
  39. package/dist/helpers/schemas.js.map +0 -7
  40. package/dist/helpers/servers.js.map +0 -7
  41. package/dist/helpers/status-codes.js.map +0 -7
  42. package/dist/helpers/urls.js.map +0 -7
  43. package/dist/index.js.map +0 -7
  44. package/dist/types.js.map +0 -7
@@ -1,103 +1,126 @@
1
- import { inferSchemaType } from "./schemas.js";
2
- function extractParameters(request) {
3
- const parameters = [];
4
- const parameterMap = /* @__PURE__ */ new Map();
5
- if (typeof request === "string" || !request.url) {
6
- return parameters;
7
- }
8
- const url = typeof request.url === "string" ? { raw: request.url } : request.url;
9
- if (url.query) {
10
- url.query.forEach((param) => {
11
- const paramObj = createParameterObject(param, "query");
12
- if (paramObj.name) {
13
- parameterMap.set(paramObj.name, paramObj);
14
- }
15
- });
16
- }
17
- if (url.variable) {
18
- url.variable.forEach((param) => {
19
- const paramObj = createParameterObject(param, "path");
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
- if (request.header && Array.isArray(request.header)) {
42
- request.header.forEach((header) => {
43
- const paramObj = createParameterObject(header, "header");
44
- if (paramObj.name) {
45
- parameterMap.set(paramObj.name, paramObj);
46
- }
47
- });
48
- }
49
- return Array.from(parameterMap.values());
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
- const variables = [];
53
- const variableRegex = /{{\s*([\w.-]+)\s*}}/;
54
- pathArray.forEach((segment) => {
55
- const segmentString = typeof segment === "string" ? segment : segment.value;
56
- const match = segmentString.match(variableRegex);
57
- if (match?.[1]) {
58
- variables.push(match[1]);
59
- }
60
- });
61
- return variables;
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
- function createParameterObject(param, paramIn) {
64
- const parameter = {
65
- name: param.key || "",
66
- in: paramIn,
67
- description: param.description
68
- };
69
- if (paramIn === "path") {
70
- parameter.required = true;
71
- } else if (paramIn === "query") {
72
- const isRequired = param.description?.toLowerCase().includes("[required]") || param.key && param.key.toLowerCase() === "required";
73
- if (isRequired) {
74
- parameter.required = true;
75
- if (parameter.description) {
76
- parameter.description = parameter.description.replace(/\[required\]/gi, "").trim();
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
- if (param.value !== void 0) {
81
- parameter.example = param.value;
82
- if (paramIn === "path") {
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
- } else {
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