@scalar/postman-to-openapi 0.6.2 → 0.7.0
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 +25 -0
- package/README.md +15 -0
- package/dist/convert.d.ts +14 -0
- package/dist/convert.d.ts.map +1 -1
- package/dist/convert.js +392 -44
- package/dist/helpers/header-utils.d.ts +21 -0
- package/dist/helpers/header-utils.d.ts.map +1 -0
- package/dist/helpers/header-utils.js +42 -0
- package/dist/helpers/merge-operation.d.ts.map +1 -1
- package/dist/helpers/merge-operation.js +120 -5
- package/dist/helpers/merge-path-item.d.ts.map +1 -1
- package/dist/helpers/merge-path-item.js +28 -4
- package/dist/helpers/parameters.d.ts +4 -1
- package/dist/helpers/parameters.d.ts.map +1 -1
- package/dist/helpers/parameters.js +40 -1
- package/dist/helpers/path-items.d.ts +11 -1
- package/dist/helpers/path-items.d.ts.map +1 -1
- package/dist/helpers/path-items.js +111 -11
- package/dist/helpers/request-body.d.ts +5 -1
- package/dist/helpers/request-body.d.ts.map +1 -1
- package/dist/helpers/request-body.js +21 -28
- package/dist/helpers/responses.d.ts +8 -1
- package/dist/helpers/responses.d.ts.map +1 -1
- package/dist/helpers/responses.js +99 -11
- package/dist/helpers/servers.d.ts.map +1 -1
- package/dist/helpers/servers.js +10 -6
- package/dist/helpers/urls.d.ts +20 -0
- package/dist/helpers/urls.d.ts.map +1 -1
- package/dist/helpers/urls.js +101 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/is-postman-collection.d.ts +9 -0
- package/dist/is-postman-collection.d.ts.map +1 -0
- package/dist/is-postman-collection.js +23 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -5
|
@@ -3,13 +3,17 @@ import { createParameterObject } from './parameters.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Extracts and converts the request body from a Postman request to an OpenAPI RequestBodyObject.
|
|
5
5
|
* Handles raw JSON, form-data, and URL-encoded body types, creating appropriate schemas and content types.
|
|
6
|
+
*
|
|
7
|
+
* When `contentType` is provided (already normalised via `parseMediaType`), it
|
|
8
|
+
* wins over the Postman `options.raw.language` hint for `raw` bodies.
|
|
9
|
+
* `formdata` and `urlencoded` modes keep their natural media types.
|
|
6
10
|
*/
|
|
7
|
-
export function extractRequestBody(body, exampleName) {
|
|
11
|
+
export function extractRequestBody(body, exampleName, contentType) {
|
|
8
12
|
const requestBody = {
|
|
9
13
|
content: {},
|
|
10
14
|
};
|
|
11
15
|
if (body.mode === 'raw') {
|
|
12
|
-
handleRawBody(body, requestBody, exampleName);
|
|
16
|
+
handleRawBody(body, requestBody, exampleName, contentType);
|
|
13
17
|
return requestBody;
|
|
14
18
|
}
|
|
15
19
|
if (body.mode === 'formdata' && body.formdata) {
|
|
@@ -22,24 +26,11 @@ export function extractRequestBody(body, exampleName) {
|
|
|
22
26
|
}
|
|
23
27
|
return requestBody;
|
|
24
28
|
}
|
|
25
|
-
function handleRawBody(body, requestBody, exampleName) {
|
|
29
|
+
function handleRawBody(body, requestBody, exampleName, contentType) {
|
|
26
30
|
const rawBody = body.raw || '';
|
|
27
31
|
const isJsonLanguage = body.options?.raw?.language === 'json';
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
// Try parsing the raw body as JSON
|
|
31
|
-
// We use a boolean flag because `null` is a valid JSON value
|
|
32
|
-
let jsonBody;
|
|
33
|
-
let isJsonBody = false;
|
|
34
|
-
try {
|
|
35
|
-
jsonBody = JSON.parse(rawBody);
|
|
36
|
-
isJsonBody = true;
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
// Parsing failed - will handle below
|
|
40
|
-
}
|
|
41
|
-
// If we have valid JSON, use it
|
|
42
|
-
if (isJsonBody) {
|
|
32
|
+
const mediaType = contentType ?? (isJsonLanguage ? 'application/json' : 'text/plain');
|
|
33
|
+
if (mediaType === 'application/json') {
|
|
43
34
|
requestBody.content = {
|
|
44
35
|
'application/json': {
|
|
45
36
|
schema: {
|
|
@@ -47,32 +38,34 @@ function handleRawBody(body, requestBody, exampleName) {
|
|
|
47
38
|
},
|
|
48
39
|
examples: {
|
|
49
40
|
[exampleName]: {
|
|
50
|
-
value:
|
|
41
|
+
value: rawBody,
|
|
51
42
|
},
|
|
52
43
|
},
|
|
53
44
|
},
|
|
54
45
|
};
|
|
55
46
|
return;
|
|
56
47
|
}
|
|
57
|
-
|
|
58
|
-
// create a JSON schema placeholder
|
|
59
|
-
if (hasVariables && isJsonLanguage) {
|
|
48
|
+
if (mediaType === 'text/plain') {
|
|
60
49
|
requestBody.content = {
|
|
61
|
-
'
|
|
50
|
+
'text/plain': {
|
|
62
51
|
schema: {
|
|
63
|
-
type: '
|
|
64
|
-
|
|
52
|
+
type: 'string',
|
|
53
|
+
examples: rawBody ? [rawBody] : undefined,
|
|
65
54
|
},
|
|
66
55
|
},
|
|
67
56
|
};
|
|
68
57
|
return;
|
|
69
58
|
}
|
|
70
|
-
//
|
|
59
|
+
// Any other caller-declared media type (application/xml, text/csv, application/octet-stream, ...)
|
|
71
60
|
requestBody.content = {
|
|
72
|
-
|
|
61
|
+
[mediaType]: {
|
|
73
62
|
schema: {
|
|
74
63
|
type: 'string',
|
|
75
|
-
|
|
64
|
+
},
|
|
65
|
+
examples: {
|
|
66
|
+
[exampleName]: {
|
|
67
|
+
value: rawBody,
|
|
68
|
+
},
|
|
76
69
|
},
|
|
77
70
|
},
|
|
78
71
|
};
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import type { OpenAPIV3_1 } from '@scalar/openapi-types';
|
|
2
2
|
import type { Item, Response } from '../types.js';
|
|
3
|
+
export declare const DEFAULT_RESPONSE_DESCRIPTIONS: Record<string, string>;
|
|
3
4
|
/**
|
|
4
5
|
* Extracts and converts Postman response objects to OpenAPI response objects.
|
|
5
6
|
* Processes response status codes, descriptions, headers, and body content,
|
|
6
7
|
* inferring schemas from example responses when possible.
|
|
8
|
+
*
|
|
9
|
+
* Media-type selection precedence for each response:
|
|
10
|
+
* 1. The saved response's own `Content-Type` header.
|
|
11
|
+
* 2. The request's `Accept` header (passed as `acceptMediaType`, already
|
|
12
|
+
* narrowed via `pickAcceptMediaType`).
|
|
13
|
+
* 3. `application/json` fallback.
|
|
7
14
|
*/
|
|
8
|
-
export declare function extractResponses(responses: Response[], item?: Item): OpenAPIV3_1.ResponsesObject | undefined;
|
|
15
|
+
export declare function extractResponses(responses: Response[], item?: Item, acceptMediaType?: string): OpenAPIV3_1.ResponsesObject | undefined;
|
|
9
16
|
//# sourceMappingURL=responses.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../../src/helpers/responses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,KAAK,EAAc,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../../src/helpers/responses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,KAAK,EAAc,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAMzD,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAchE,CAAA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,QAAQ,EAAE,EACrB,IAAI,CAAC,EAAE,IAAI,EACX,eAAe,CAAC,EAAE,MAAM,GACvB,WAAW,CAAC,eAAe,GAAG,SAAS,CA+DzC"}
|
|
@@ -1,39 +1,77 @@
|
|
|
1
|
+
import { parseMediaType, readHeader } from './header-utils.js';
|
|
1
2
|
import { inferSchemaFromExample } from './schemas.js';
|
|
2
3
|
import { extractStatusCodesFromTests } from './status-codes.js';
|
|
4
|
+
export const DEFAULT_RESPONSE_DESCRIPTIONS = {
|
|
5
|
+
200: 'OK',
|
|
6
|
+
201: 'Created',
|
|
7
|
+
202: 'Accepted',
|
|
8
|
+
204: 'No content',
|
|
9
|
+
301: 'Moved permanently',
|
|
10
|
+
400: 'Bad request',
|
|
11
|
+
401: 'Unauthorized',
|
|
12
|
+
403: 'Forbidden',
|
|
13
|
+
404: 'Not found',
|
|
14
|
+
409: 'Conflict',
|
|
15
|
+
422: 'Unprocessable entity',
|
|
16
|
+
500: 'Internal server error',
|
|
17
|
+
default: 'Default response',
|
|
18
|
+
};
|
|
3
19
|
/**
|
|
4
20
|
* Extracts and converts Postman response objects to OpenAPI response objects.
|
|
5
21
|
* Processes response status codes, descriptions, headers, and body content,
|
|
6
22
|
* inferring schemas from example responses when possible.
|
|
23
|
+
*
|
|
24
|
+
* Media-type selection precedence for each response:
|
|
25
|
+
* 1. The saved response's own `Content-Type` header.
|
|
26
|
+
* 2. The request's `Accept` header (passed as `acceptMediaType`, already
|
|
27
|
+
* narrowed via `pickAcceptMediaType`).
|
|
28
|
+
* 3. `application/json` fallback.
|
|
7
29
|
*/
|
|
8
|
-
export function extractResponses(responses, item) {
|
|
30
|
+
export function extractResponses(responses, item, acceptMediaType) {
|
|
9
31
|
// Extract status codes from tests
|
|
10
32
|
const statusCodes = item ? extractStatusCodesFromTests(item) : [];
|
|
11
33
|
// Create a map of status codes to descriptions from responses
|
|
12
34
|
const responseMap = responses.reduce((acc, response) => {
|
|
13
35
|
const statusCode = response.code?.toString() || 'default';
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
36
|
+
const hasNoContentStatusCode = hasNoResponseBodyStatusCode(statusCode);
|
|
37
|
+
const hasExplicitBodyExample = response.body !== undefined && response.body !== null && response.body !== '';
|
|
38
|
+
if (hasNoContentStatusCode && hasExplicitBodyExample) {
|
|
39
|
+
console.warn(`[postman-to-openapi] Response ${statusCode} usually has no body, but Postman includes a body example. Keeping OpenAPI content.`);
|
|
40
|
+
}
|
|
41
|
+
const savedContentType = parseMediaType(readHeader(response.header, 'Content-Type'));
|
|
42
|
+
const mediaType = savedContentType ?? acceptMediaType ?? 'application/json';
|
|
43
|
+
const content = hasNoContentStatusCode && !hasExplicitBodyExample
|
|
44
|
+
? undefined
|
|
45
|
+
: {
|
|
46
|
+
[mediaType]: {
|
|
19
47
|
schema: inferSchemaFromExample(response.body || ''),
|
|
20
48
|
examples: {
|
|
21
49
|
default: tryParseJson(response.body || ''),
|
|
22
50
|
},
|
|
23
51
|
},
|
|
24
|
-
}
|
|
52
|
+
};
|
|
53
|
+
acc[statusCode] = {
|
|
54
|
+
description: getResponseDescription(response, statusCode),
|
|
55
|
+
headers: extractHeaders(response.header),
|
|
56
|
+
...(content ? { content } : {}),
|
|
25
57
|
};
|
|
26
58
|
return acc;
|
|
27
59
|
}, {});
|
|
28
60
|
// Add status codes from tests if not already present
|
|
61
|
+
const fallbackMediaType = acceptMediaType ?? 'application/json';
|
|
29
62
|
statusCodes.forEach((code) => {
|
|
30
63
|
const codeStr = code.toString();
|
|
31
64
|
if (!responseMap[codeStr]) {
|
|
65
|
+
const hasNoContentStatusCode = hasNoResponseBodyStatusCode(codeStr);
|
|
32
66
|
responseMap[codeStr] = {
|
|
33
|
-
description:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
67
|
+
description: getDefaultResponseDescription(codeStr),
|
|
68
|
+
...(!hasNoContentStatusCode
|
|
69
|
+
? {
|
|
70
|
+
content: {
|
|
71
|
+
[fallbackMediaType]: {},
|
|
72
|
+
},
|
|
73
|
+
}
|
|
74
|
+
: {}),
|
|
37
75
|
};
|
|
38
76
|
}
|
|
39
77
|
});
|
|
@@ -42,6 +80,56 @@ export function extractResponses(responses, item) {
|
|
|
42
80
|
}
|
|
43
81
|
return responseMap;
|
|
44
82
|
}
|
|
83
|
+
function getResponseDescription(response, statusCode) {
|
|
84
|
+
const descriptionFromName = extractDescriptionFromName(response.name, statusCode);
|
|
85
|
+
if (descriptionFromName) {
|
|
86
|
+
return descriptionFromName;
|
|
87
|
+
}
|
|
88
|
+
if (response.status) {
|
|
89
|
+
return response.status;
|
|
90
|
+
}
|
|
91
|
+
return getDefaultResponseDescription(statusCode);
|
|
92
|
+
}
|
|
93
|
+
function extractDescriptionFromName(name, statusCode) {
|
|
94
|
+
if (!name) {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
const trimmedName = name.trim();
|
|
98
|
+
const separatorIndex = trimmedName.indexOf('-');
|
|
99
|
+
if (separatorIndex < 0) {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
const code = trimmedName.slice(0, separatorIndex).trim();
|
|
103
|
+
if (!isThreeDigitStatusCode(code) || code !== statusCode) {
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
const description = trimmedName.slice(separatorIndex + 1).trim();
|
|
107
|
+
if (!description) {
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
return description;
|
|
111
|
+
}
|
|
112
|
+
function getDefaultResponseDescription(statusCode) {
|
|
113
|
+
return DEFAULT_RESPONSE_DESCRIPTIONS[statusCode] ?? DEFAULT_RESPONSE_DESCRIPTIONS.default ?? 'Default response';
|
|
114
|
+
}
|
|
115
|
+
function isThreeDigitStatusCode(value) {
|
|
116
|
+
if (value.length !== 3) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
for (const character of value) {
|
|
120
|
+
if (character < '0' || character > '9') {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
const hasNoResponseBodyStatusCode = (statusCode) => {
|
|
127
|
+
const numericCode = Number(statusCode);
|
|
128
|
+
if (!Number.isInteger(numericCode)) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
return (numericCode >= 100 && numericCode <= 199) || numericCode === 204 || numericCode === 205 || numericCode === 304;
|
|
132
|
+
};
|
|
45
133
|
function extractHeaders(headers) {
|
|
46
134
|
if (!headers || typeof headers === 'string') {
|
|
47
135
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../../src/helpers/servers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C;;GAEG;AACH,KAAK,eAAe,GAAG;IACrB,QAAQ,EAAE,WAAW,CAAC,YAAY,EAAE,CAAA;IACpC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAA;IAClD,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;CACjE,CAAA;AAsBD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../../src/helpers/servers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C;;GAEG;AACH,KAAK,eAAe,GAAG;IACrB,QAAQ,EAAE,WAAW,CAAC,YAAY,EAAE,CAAA;IACpC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAA;IAClD,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;CACjE,CAAA;AAsBD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,eAAe,CA0ElH"}
|
package/dist/helpers/servers.js
CHANGED
|
@@ -33,18 +33,22 @@ export function analyzeServerDistribution(serverUsage, allUniquePaths) {
|
|
|
33
33
|
if (serverUsage.length === 0) {
|
|
34
34
|
return placement;
|
|
35
35
|
}
|
|
36
|
-
// Build a map:
|
|
36
|
+
// Build a map: serverKey -> { server, operations }
|
|
37
37
|
// Using string keys instead of objects because JavaScript Sets compare by reference
|
|
38
38
|
const serverMap = new Map();
|
|
39
39
|
for (const usage of serverUsage) {
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
const serverObject = usage.server ?? { url: usage.serverUrl };
|
|
41
|
+
const serverKey = JSON.stringify(serverObject);
|
|
42
|
+
if (!serverMap.has(serverKey)) {
|
|
43
|
+
serverMap.set(serverKey, {
|
|
44
|
+
server: serverObject,
|
|
45
|
+
operations: new Set(),
|
|
46
|
+
});
|
|
42
47
|
}
|
|
43
|
-
serverMap.get(
|
|
48
|
+
serverMap.get(serverKey).operations.add(createOperationKey(usage.path, usage.method));
|
|
44
49
|
}
|
|
45
50
|
// For each server, determine its placement
|
|
46
|
-
for (const
|
|
47
|
-
const serverObject = { url: serverUrl };
|
|
51
|
+
for (const { server: serverObject, operations: operationKeys } of serverMap.values()) {
|
|
48
52
|
// Parse operation keys back to path/method pairs
|
|
49
53
|
const operations = Array.from(operationKeys).map(parseOperationKey);
|
|
50
54
|
// Count unique paths this server appears in
|
package/dist/helpers/urls.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { OpenAPIV3_1 } from '@scalar/openapi-types';
|
|
1
2
|
/**
|
|
2
3
|
* Extracts the domain (including protocol and port if present) from a given URL.
|
|
3
4
|
*/
|
|
@@ -11,6 +12,20 @@ export declare function extractPathFromUrl(url: string | undefined): string;
|
|
|
11
12
|
* e.g., '/users/:id' becomes '/users/{id}'
|
|
12
13
|
*/
|
|
13
14
|
export declare const normalizePath: (path: string) => string;
|
|
15
|
+
type CollectionVariableLookup = ReadonlyMap<string, string>;
|
|
16
|
+
/**
|
|
17
|
+
* Extracts Postman collection variables into a lookup table.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createCollectionVariableLookup(variables: ReadonlyArray<{
|
|
20
|
+
key?: string;
|
|
21
|
+
value?: string | number | boolean;
|
|
22
|
+
disabled?: boolean;
|
|
23
|
+
}> | undefined): ReadonlyMap<string, string>;
|
|
24
|
+
/**
|
|
25
|
+
* Generates a structural path signature by replacing parameter segments with `{*}`.
|
|
26
|
+
* Paths with the same signature are equivalent except for parameter names.
|
|
27
|
+
*/
|
|
28
|
+
export declare const getPathStructuralSignature: (path: string) => string;
|
|
14
29
|
/**
|
|
15
30
|
* Extracts parameter names from a path string.
|
|
16
31
|
* Handles double curly braces {{param}}, single curly braces {param}, and colon format :param.
|
|
@@ -22,4 +37,9 @@ export declare function extractPathParameterNames(path: string): string[];
|
|
|
22
37
|
* Returns undefined if no valid server URL can be extracted.
|
|
23
38
|
*/
|
|
24
39
|
export declare function extractServerFromUrl(url: string | undefined): string | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Extracts the server object from a request URL and resolves Postman templates.
|
|
42
|
+
*/
|
|
43
|
+
export declare function extractServerObjectFromUrl(url: string | undefined, collectionVariableLookup?: CollectionVariableLookup): OpenAPIV3_1.ServerObject | undefined;
|
|
44
|
+
export {};
|
|
25
45
|
//# sourceMappingURL=urls.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urls.d.ts","sourceRoot":"","sources":["../../src/helpers/urls.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"urls.d.ts","sourceRoot":"","sources":["../../src/helpers/urls.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAoBxD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAYlE;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MAAyC,CAAA;AAEtF,KAAK,wBAAwB,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AA8B3D;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,aAAa,CAAC;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAAG,SAAS,GAC5G,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAU7B;AAED;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GAAI,MAAM,MAAM,KAAG,MAWzD,CAAA;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAahE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAEhF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,wBAAwB,GAAE,wBAAoC,GAC7D,WAAW,CAAC,YAAY,GAAG,SAAS,CAsEtC"}
|
package/dist/helpers/urls.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { REGEX } from '@scalar/helpers/regex/regex-helpers';
|
|
2
|
+
const POSTMAN_TEMPLATE_REGEX = /\{\{([^{}]{0,1000})\}\}/g;
|
|
3
|
+
const DEFAULT_SERVER_VARIABLE_VALUE = 'example.com';
|
|
4
|
+
const SERVER_VARIABLE_DESCRIPTION = 'Declared in Postman collection variables.';
|
|
2
5
|
/**
|
|
3
6
|
* Parses a URL string into its component parts.
|
|
4
7
|
*/
|
|
@@ -27,7 +30,7 @@ export function extractPathFromUrl(url) {
|
|
|
27
30
|
// Remove scheme, domain, query parameters, and hash fragments
|
|
28
31
|
const path = url.replace(/^(?:https?:\/\/)?[^/]+(\/|$)/, '/').split(/[?#]/)[0] ?? '';
|
|
29
32
|
// Replace Postman variables and ensure single leading slash
|
|
30
|
-
const finalPath = ('/' + path.replace(
|
|
33
|
+
const finalPath = ('/' + path.replace(POSTMAN_TEMPLATE_REGEX, '{$1}').replace(/^\/+/, '')).replace(/\/\/+/g, '/');
|
|
31
34
|
return finalPath;
|
|
32
35
|
}
|
|
33
36
|
/**
|
|
@@ -35,6 +38,54 @@ export function extractPathFromUrl(url) {
|
|
|
35
38
|
* e.g., '/users/:id' becomes '/users/{id}'
|
|
36
39
|
*/
|
|
37
40
|
export const normalizePath = (path) => path.replace(/:(\w+)/g, '{$1}');
|
|
41
|
+
const isCompleteUrl = (value) => /^(https?:\/\/)/i.test(value);
|
|
42
|
+
const hasPostmanTemplateSyntax = (value) => /\{\{([^{}]{0,1000})\}\}/.test(value);
|
|
43
|
+
const createServerVariableDefinition = () => ({
|
|
44
|
+
default: DEFAULT_SERVER_VARIABLE_VALUE,
|
|
45
|
+
description: SERVER_VARIABLE_DESCRIPTION,
|
|
46
|
+
});
|
|
47
|
+
const extractFullHostTemplateVariableName = (rawServerUrl) => {
|
|
48
|
+
const protocolSeparatorIndex = rawServerUrl.indexOf('://');
|
|
49
|
+
if (protocolSeparatorIndex === -1) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
const hostCandidate = rawServerUrl.slice(protocolSeparatorIndex + 3);
|
|
53
|
+
if (!hostCandidate.startsWith('{{') || !hostCandidate.endsWith('}}')) {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
const variableName = hostCandidate.slice(2, -2).trim();
|
|
57
|
+
if (!variableName || variableName.includes('{') || variableName.includes('}')) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
return variableName;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Extracts Postman collection variables into a lookup table.
|
|
64
|
+
*/
|
|
65
|
+
export function createCollectionVariableLookup(variables) {
|
|
66
|
+
const variableLookup = new Map();
|
|
67
|
+
for (const variable of variables ?? []) {
|
|
68
|
+
const key = variable.key?.trim();
|
|
69
|
+
if (!key || variable.disabled || variable.value === undefined) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
variableLookup.set(key, String(variable.value));
|
|
73
|
+
}
|
|
74
|
+
return variableLookup;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Generates a structural path signature by replacing parameter segments with `{*}`.
|
|
78
|
+
* Paths with the same signature are equivalent except for parameter names.
|
|
79
|
+
*/
|
|
80
|
+
export const getPathStructuralSignature = (path) => {
|
|
81
|
+
const normalizedPath = normalizePath(path);
|
|
82
|
+
if (normalizedPath === '') {
|
|
83
|
+
return '';
|
|
84
|
+
}
|
|
85
|
+
const segments = normalizedPath.split('/');
|
|
86
|
+
const signatureSegments = segments.map((segment) => (/^\{[^{}]+\}$/.test(segment) ? '{*}' : segment));
|
|
87
|
+
return signatureSegments.join('/');
|
|
88
|
+
};
|
|
38
89
|
/**
|
|
39
90
|
* Extracts parameter names from a path string.
|
|
40
91
|
* Handles double curly braces {{param}}, single curly braces {param}, and colon format :param.
|
|
@@ -57,6 +108,12 @@ export function extractPathParameterNames(path) {
|
|
|
57
108
|
* Returns undefined if no valid server URL can be extracted.
|
|
58
109
|
*/
|
|
59
110
|
export function extractServerFromUrl(url) {
|
|
111
|
+
return extractServerObjectFromUrl(url)?.url;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Extracts the server object from a request URL and resolves Postman templates.
|
|
115
|
+
*/
|
|
116
|
+
export function extractServerObjectFromUrl(url, collectionVariableLookup = new Map()) {
|
|
60
117
|
if (!url) {
|
|
61
118
|
return undefined;
|
|
62
119
|
}
|
|
@@ -71,8 +128,49 @@ export function extractServerFromUrl(url) {
|
|
|
71
128
|
}
|
|
72
129
|
const hostPart = urlMatch[1];
|
|
73
130
|
// Preserve the original protocol if present, otherwise default to https
|
|
74
|
-
const
|
|
75
|
-
|
|
131
|
+
const rawServerUrl = protocol
|
|
132
|
+
? `${protocol}${hostPart}`.replace(/\/$/, '')
|
|
133
|
+
: `https://${hostPart}`.replace(/\/$/, '');
|
|
134
|
+
const templateMatches = Array.from(rawServerUrl.matchAll(POSTMAN_TEMPLATE_REGEX));
|
|
135
|
+
if (templateMatches.length === 0) {
|
|
136
|
+
return { url: rawServerUrl };
|
|
137
|
+
}
|
|
138
|
+
const unresolvedVariables = new Set();
|
|
139
|
+
const fullHostTemplateVariableName = extractFullHostTemplateVariableName(rawServerUrl);
|
|
140
|
+
if (fullHostTemplateVariableName) {
|
|
141
|
+
const variableName = fullHostTemplateVariableName;
|
|
142
|
+
const variableValue = collectionVariableLookup.get(variableName);
|
|
143
|
+
if (!variableValue || hasPostmanTemplateSyntax(variableValue)) {
|
|
144
|
+
unresolvedVariables.add(variableName);
|
|
145
|
+
}
|
|
146
|
+
else if (isCompleteUrl(variableValue)) {
|
|
147
|
+
return { url: variableValue.replace(/\/$/, '') };
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const resolvedUrl = rawServerUrl.replace(POSTMAN_TEMPLATE_REGEX, (_, rawName) => {
|
|
151
|
+
const variableName = rawName.trim();
|
|
152
|
+
const variableValue = collectionVariableLookup.get(variableName);
|
|
153
|
+
if (!variableValue || hasPostmanTemplateSyntax(variableValue)) {
|
|
154
|
+
unresolvedVariables.add(variableName);
|
|
155
|
+
return `{${variableName}}`;
|
|
156
|
+
}
|
|
157
|
+
if (isCompleteUrl(variableValue)) {
|
|
158
|
+
unresolvedVariables.add(variableName);
|
|
159
|
+
return `{${variableName}}`;
|
|
160
|
+
}
|
|
161
|
+
return variableValue;
|
|
162
|
+
});
|
|
163
|
+
if (unresolvedVariables.size > 0) {
|
|
164
|
+
const variables = {};
|
|
165
|
+
for (const variableName of unresolvedVariables) {
|
|
166
|
+
variables[variableName] = createServerVariableDefinition();
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
url: resolvedUrl,
|
|
170
|
+
variables,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
return { url: resolvedUrl.replace(/\/$/, '') };
|
|
76
174
|
}
|
|
77
175
|
catch (error) {
|
|
78
176
|
console.error(`Error extracting server from URL "${url}":`, error);
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export { type ConvertOptions, type PostmanRequestIndexPath,
|
|
1
|
+
export { type ConvertOptions, convert, type PostmanRequestIndexPath, type TagNamingStrategy } from './convert.js';
|
|
2
|
+
export { isPostmanCollection } from './is-postman-collection.js';
|
|
2
3
|
export { extractPathFromUrl, normalizePath } from './helpers/urls.js';
|
|
3
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,uBAAuB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,OAAO,EAAE,KAAK,uBAAuB,EAAE,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC9G,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks whether a JSON string looks like a Postman collection.
|
|
3
|
+
*
|
|
4
|
+
* Exported collections are not guaranteed to include `_postman_id`,
|
|
5
|
+
* so we accept either `_postman_id` or a top-level `item` array,
|
|
6
|
+
* as long as the schema host matches Postman.
|
|
7
|
+
*/
|
|
8
|
+
export declare const isPostmanCollection: (content: string) => boolean;
|
|
9
|
+
//# sourceMappingURL=is-postman-collection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-postman-collection.d.ts","sourceRoot":"","sources":["../src/is-postman-collection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAAI,SAAS,MAAM,KAAG,OAiBrD,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks whether a JSON string looks like a Postman collection.
|
|
3
|
+
*
|
|
4
|
+
* Exported collections are not guaranteed to include `_postman_id`,
|
|
5
|
+
* so we accept either `_postman_id` or a top-level `item` array,
|
|
6
|
+
* as long as the schema host matches Postman.
|
|
7
|
+
*/
|
|
8
|
+
export const isPostmanCollection = (content) => {
|
|
9
|
+
try {
|
|
10
|
+
const parsed = JSON.parse(content);
|
|
11
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
const hasPostmanId = parsed.info?._postman_id !== undefined;
|
|
15
|
+
const hasItemTree = Array.isArray(parsed.item);
|
|
16
|
+
const schema = parsed.info?.schema;
|
|
17
|
+
const hasValidSchema = typeof schema === 'string' && new URL(schema).host === 'schema.getpostman.com';
|
|
18
|
+
return hasValidSchema && (hasPostmanId || hasItemTree);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
};
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"export",
|
|
20
20
|
"scalar"
|
|
21
21
|
],
|
|
22
|
-
"version": "0.
|
|
22
|
+
"version": "0.7.0",
|
|
23
23
|
"engines": {
|
|
24
24
|
"node": ">=22"
|
|
25
25
|
},
|
|
@@ -38,16 +38,17 @@
|
|
|
38
38
|
"CHANGELOG.md"
|
|
39
39
|
],
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@scalar/helpers": "0.5.
|
|
42
|
-
"@scalar/openapi-types": "0.
|
|
41
|
+
"@scalar/helpers": "0.5.1",
|
|
42
|
+
"@scalar/openapi-types": "0.8.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@types/node": "^24.1.0",
|
|
46
|
-
"vite": "8.0.0"
|
|
46
|
+
"vite": "8.0.0",
|
|
47
|
+
"@scalar/openapi-parser": "0.25.11"
|
|
47
48
|
},
|
|
48
49
|
"scripts": {
|
|
49
50
|
"build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
|
|
50
|
-
"
|
|
51
|
+
"evaluate": "tsx ./scripts/evaluate/run.ts",
|
|
51
52
|
"test": "vitest --run",
|
|
52
53
|
"types:check": "tsc --noEmit"
|
|
53
54
|
}
|