@thymian/plugin-openapi 0.1.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/README.md +11 -0
- package/dist/cli/commands/openapi/info.d.ts +10 -0
- package/dist/cli/commands/openapi/info.d.ts.map +1 -0
- package/dist/cli/commands/openapi/info.js +35 -0
- package/dist/cli/commands/openapi/info.js.map +1 -0
- package/dist/cli/commands/openapi/load.d.ts +10 -0
- package/dist/cli/commands/openapi/load.d.ts.map +1 -0
- package/dist/cli/commands/openapi/load.js +32 -0
- package/dist/cli/commands/openapi/load.js.map +1 -0
- package/dist/cli/commands/openapi/validate.d.ts +10 -0
- package/dist/cli/commands/openapi/validate.d.ts.map +1 -0
- package/dist/cli/commands/openapi/validate.js +28 -0
- package/dist/cli/commands/openapi/validate.js.map +1 -0
- package/dist/cli/init-hook.d.ts +5 -0
- package/dist/cli/init-hook.d.ts.map +1 -0
- package/dist/cli/init-hook.js +55 -0
- package/dist/cli/init-hook.js.map +1 -0
- package/dist/cli/spec-search-hook.d.ts +4 -0
- package/dist/cli/spec-search-hook.d.ts.map +1 -0
- package/dist/cli/spec-search-hook.js +11 -0
- package/dist/cli/spec-search-hook.js.map +1 -0
- package/dist/error.d.ts +4 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +4 -0
- package/dist/error.js.map +1 -0
- package/dist/http-filter-expression-to-operation-filter.d.ts +14 -0
- package/dist/http-filter-expression-to-operation-filter.d.ts.map +1 -0
- package/dist/http-filter-expression-to-operation-filter.js +221 -0
- package/dist/http-filter-expression-to-operation-filter.js.map +1 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +116 -0
- package/dist/index.js.map +1 -0
- package/dist/load-openapi.d.ts +27 -0
- package/dist/load-openapi.d.ts.map +1 -0
- package/dist/load-openapi.js +76 -0
- package/dist/load-openapi.js.map +1 -0
- package/dist/loc-mapper/json-loc-mapper.d.ts +15 -0
- package/dist/loc-mapper/json-loc-mapper.d.ts.map +1 -0
- package/dist/loc-mapper/json-loc-mapper.js +105 -0
- package/dist/loc-mapper/json-loc-mapper.js.map +1 -0
- package/dist/loc-mapper/loc-mapper-for-file.d.ts +4 -0
- package/dist/loc-mapper/loc-mapper-for-file.d.ts.map +1 -0
- package/dist/loc-mapper/loc-mapper-for-file.js +20 -0
- package/dist/loc-mapper/loc-mapper-for-file.js.map +1 -0
- package/dist/loc-mapper/loc-mapper.d.ts +9 -0
- package/dist/loc-mapper/loc-mapper.d.ts.map +1 -0
- package/dist/loc-mapper/loc-mapper.js +22 -0
- package/dist/loc-mapper/loc-mapper.js.map +1 -0
- package/dist/loc-mapper/noop-loc-mapper.d.ts +6 -0
- package/dist/loc-mapper/noop-loc-mapper.d.ts.map +1 -0
- package/dist/loc-mapper/noop-loc-mapper.js +10 -0
- package/dist/loc-mapper/noop-loc-mapper.js.map +1 -0
- package/dist/loc-mapper/yaml-loc-mapper.d.ts +13 -0
- package/dist/loc-mapper/yaml-loc-mapper.d.ts.map +1 -0
- package/dist/loc-mapper/yaml-loc-mapper.js +105 -0
- package/dist/loc-mapper/yaml-loc-mapper.js.map +1 -0
- package/dist/processors/extract-server-info.d.ts +10 -0
- package/dist/processors/extract-server-info.d.ts.map +1 -0
- package/dist/processors/extract-server-info.js +40 -0
- package/dist/processors/extract-server-info.js.map +1 -0
- package/dist/processors/headers-object.processor.d.ts +4 -0
- package/dist/processors/headers-object.processor.d.ts.map +1 -0
- package/dist/processors/headers-object.processor.js +20 -0
- package/dist/processors/headers-object.processor.js.map +1 -0
- package/dist/processors/json-schema.processor.d.ts +19 -0
- package/dist/processors/json-schema.processor.d.ts.map +1 -0
- package/dist/processors/json-schema.processor.js +40 -0
- package/dist/processors/json-schema.processor.js.map +1 -0
- package/dist/processors/link-object.processor.d.ts +5 -0
- package/dist/processors/link-object.processor.d.ts.map +1 -0
- package/dist/processors/link-object.processor.js +58 -0
- package/dist/processors/link-object.processor.js.map +1 -0
- package/dist/processors/media-type-object.processor.d.ts +9 -0
- package/dist/processors/media-type-object.processor.d.ts.map +1 -0
- package/dist/processors/media-type-object.processor.js +43 -0
- package/dist/processors/media-type-object.processor.js.map +1 -0
- package/dist/processors/openapi.processor.d.ts +27 -0
- package/dist/processors/openapi.processor.d.ts.map +1 -0
- package/dist/processors/openapi.processor.js +166 -0
- package/dist/processors/openapi.processor.js.map +1 -0
- package/dist/processors/parameter-object.processor.d.ts +6 -0
- package/dist/processors/parameter-object.processor.d.ts.map +1 -0
- package/dist/processors/parameter-object.processor.js +90 -0
- package/dist/processors/parameter-object.processor.js.map +1 -0
- package/dist/processors/request-body-object.processor.d.ts +14 -0
- package/dist/processors/request-body-object.processor.d.ts.map +1 -0
- package/dist/processors/request-body-object.processor.js +61 -0
- package/dist/processors/request-body-object.processor.js.map +1 -0
- package/dist/processors/response-object.processor.d.ts +12 -0
- package/dist/processors/response-object.processor.d.ts.map +1 -0
- package/dist/processors/response-object.processor.js +44 -0
- package/dist/processors/response-object.processor.js.map +1 -0
- package/dist/processors/responses-object.processor.d.ts +5 -0
- package/dist/processors/responses-object.processor.d.ts.map +1 -0
- package/dist/processors/responses-object.processor.js +27 -0
- package/dist/processors/responses-object.processor.js.map +1 -0
- package/dist/processors/runtime-expression.processor.d.ts +4 -0
- package/dist/processors/runtime-expression.processor.d.ts.map +1 -0
- package/dist/processors/runtime-expression.processor.js +24 -0
- package/dist/processors/runtime-expression.processor.js.map +1 -0
- package/dist/processors/security-scheme-object.processor.d.ts +4 -0
- package/dist/processors/security-scheme-object.processor.d.ts.map +1 -0
- package/dist/processors/security-scheme-object.processor.js +50 -0
- package/dist/processors/security-scheme-object.processor.js.map +1 -0
- package/dist/processors/utils.d.ts +9 -0
- package/dist/processors/utils.d.ts.map +1 -0
- package/dist/processors/utils.js +21 -0
- package/dist/processors/utils.js.map +1 -0
- package/dist/runtime-expression.d.ts +8 -0
- package/dist/runtime-expression.d.ts.map +1 -0
- package/dist/runtime-expression.js +2 -0
- package/dist/runtime-expression.js.map +1 -0
- package/dist/search-for-openapi-files.d.ts +8 -0
- package/dist/search-for-openapi-files.d.ts.map +1 -0
- package/dist/search-for-openapi-files.js +44 -0
- package/dist/search-for-openapi-files.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export const defaultServerInfo = {
|
|
2
|
+
basePath: '',
|
|
3
|
+
host: 'localhost',
|
|
4
|
+
port: 8080,
|
|
5
|
+
protocol: 'http',
|
|
6
|
+
};
|
|
7
|
+
export function extractServerInfo(serverObjects = [], defaultInfo = defaultServerInfo) {
|
|
8
|
+
const serverInfo = {
|
|
9
|
+
...defaultInfo,
|
|
10
|
+
};
|
|
11
|
+
const localServer = serverObjects.find((serverObject) => {
|
|
12
|
+
serverObject.url.includes('localhost');
|
|
13
|
+
}) ?? serverObjects[0];
|
|
14
|
+
if (localServer) {
|
|
15
|
+
const urlWithVariables = localServer.url.replaceAll(/\{(.*?)}/g, (match, variable) => {
|
|
16
|
+
if (localServer?.variables?.[variable]) {
|
|
17
|
+
return (localServer.variables[variable].default ??
|
|
18
|
+
localServer.variables[variable].enum?.[0] ??
|
|
19
|
+
match);
|
|
20
|
+
}
|
|
21
|
+
return match;
|
|
22
|
+
});
|
|
23
|
+
try {
|
|
24
|
+
const url = new URL(urlWithVariables);
|
|
25
|
+
serverInfo.host = url.hostname;
|
|
26
|
+
serverInfo.port = url.port
|
|
27
|
+
? parseInt(url.port)
|
|
28
|
+
: url.protocol === 'https:'
|
|
29
|
+
? 443
|
|
30
|
+
: 80;
|
|
31
|
+
serverInfo.protocol = url.protocol.replace(':', '');
|
|
32
|
+
serverInfo.basePath = url.pathname;
|
|
33
|
+
}
|
|
34
|
+
catch (_) {
|
|
35
|
+
/**/
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return serverInfo;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=extract-server-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-server-info.js","sourceRoot":"","sources":["../../src/processors/extract-server-info.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,iBAAiB,GAAe;IAC3C,QAAQ,EAAE,EAAE;IACZ,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,MAAM;CACjB,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAC/B,gBAA2C,EAAE,EAC7C,cAA0B,iBAAiB;IAE3C,MAAM,UAAU,GAAe;QAC7B,GAAG,WAAW;KACf,CAAC;IAEF,MAAM,WAAW,GACf,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE;QAClC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;IAEzB,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CACjD,WAAW,EACX,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YAClB,IAAI,WAAW,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvC,OAAO,CACL,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO;oBACvC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBACzC,KAAK,CACN,CAAC;YACJ,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC,CACF,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAEtC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;YAC/B,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;gBACxB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;gBACpB,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ;oBACzB,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,EAAE,CAAC;YACT,UAAU,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CACxC,GAAG,EACH,EAAE,CACuB,CAAC;YAC5B,UAAU,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI;QACN,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Parameter } from '@thymian/core';
|
|
2
|
+
import type { OpenAPIV3_1 as OpenApiV31 } from 'openapi-types';
|
|
3
|
+
export declare function processHeadersObject(headersObject: Record<string, OpenApiV31.HeaderObject> | undefined, ignoreContentTypeHeader?: boolean): Record<string, Parameter>;
|
|
4
|
+
//# sourceMappingURL=headers-object.processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers-object.processor.d.ts","sourceRoot":"","sources":["../../src/processors/headers-object.processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,IAAI,UAAU,EAAE,MAAM,eAAe,CAAC;AAI/D,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,GAAG,SAAS,EAElE,uBAAuB,UAAO,GAC7B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAoB3B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { processParameterObject } from './parameter-object.processor.js';
|
|
2
|
+
export function processHeadersObject(headersObject,
|
|
3
|
+
// https://swagger.io/specification/v3/#response-object
|
|
4
|
+
ignoreContentTypeHeader = true) {
|
|
5
|
+
return Object.entries(headersObject ?? {}).reduce((acc, [name, headerObject]) => {
|
|
6
|
+
if (ignoreContentTypeHeader && name.toLowerCase() === 'content-type') {
|
|
7
|
+
return acc;
|
|
8
|
+
}
|
|
9
|
+
const [, parameter] = processParameterObject({
|
|
10
|
+
...headerObject,
|
|
11
|
+
name,
|
|
12
|
+
in: 'header',
|
|
13
|
+
});
|
|
14
|
+
return {
|
|
15
|
+
...acc,
|
|
16
|
+
[name]: parameter,
|
|
17
|
+
};
|
|
18
|
+
}, {});
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=headers-object.processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers-object.processor.js","sourceRoot":"","sources":["../../src/processors/headers-object.processor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,MAAM,UAAU,oBAAoB,CAClC,aAAkE;AAClE,uDAAuD;AACvD,uBAAuB,GAAG,IAAI;IAE9B,OAAO,MAAM,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,MAAM,CAC/C,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,EAAE;QAC5B,IAAI,uBAAuB,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,cAAc,EAAE,CAAC;YACrE,OAAO,GAAG,CAAC;QACb,CAAC;QAED,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG,sBAAsB,CAAC;YAC3C,GAAG,YAAY;YACf,IAAI;YACJ,EAAE,EAAE,QAAQ;SACb,CAAC,CAAC;QAEH,OAAO;YACL,GAAG,GAAG;YACN,CAAC,IAAI,CAAC,EAAE,SAAS;SAClB,CAAC;IACJ,CAAC,EACD,EAA+B,CAChC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type ThymianSchema } from '@thymian/core';
|
|
2
|
+
import type { OpenAPIV3_1 as OpenAPIV31 } from 'openapi-types';
|
|
3
|
+
export type Draft202012SchemaObject = OpenAPIV31.SchemaObject & {
|
|
4
|
+
prefixItems?: Draft202012SchemaObject[];
|
|
5
|
+
unevaluatedItems?: boolean;
|
|
6
|
+
contains?: Draft202012SchemaObject;
|
|
7
|
+
minContains?: number;
|
|
8
|
+
maxContains?: number;
|
|
9
|
+
patternProperties?: {
|
|
10
|
+
[pattern: string]: Draft202012SchemaObject;
|
|
11
|
+
};
|
|
12
|
+
unevaluatedProperties?: boolean;
|
|
13
|
+
exclusiveMaximum?: number;
|
|
14
|
+
exclusiveMinimum?: number;
|
|
15
|
+
contentEncoding?: string;
|
|
16
|
+
} & boolean;
|
|
17
|
+
export declare function processSchema(schema: Draft202012SchemaObject): ThymianSchema;
|
|
18
|
+
export declare function addExampleToSchema(schema: ThymianSchema, example: unknown): ThymianSchema;
|
|
19
|
+
//# sourceMappingURL=json-schema.processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema.processor.d.ts","sourceRoot":"","sources":["../../src/processors/json-schema.processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,IAAI,UAAU,EAAE,MAAM,eAAe,CAAC;AAa/D,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,YAAY,GAAG;IAC9D,WAAW,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACxC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,uBAAuB,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE;QAClB,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB,CAAC;KAC5C,CAAC;IACF,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC;AAEZ,wBAAgB,aAAa,CAAC,MAAM,EAAE,uBAAuB,GAAG,aAAa,CA4B5E;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,OAAO,GACf,aAAa,CAMf"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { isRecord } from '@thymian/core';
|
|
2
|
+
import traverse from 'traverse';
|
|
3
|
+
const keysToRemove = new Set([
|
|
4
|
+
'nullable',
|
|
5
|
+
'example',
|
|
6
|
+
'deprecated',
|
|
7
|
+
'discriminator',
|
|
8
|
+
'externalDocs',
|
|
9
|
+
'readOnly',
|
|
10
|
+
'writeOnly',
|
|
11
|
+
]);
|
|
12
|
+
export function processSchema(schema) {
|
|
13
|
+
// https://json-schema.org/draft/2020-12/draft-bhutton-json-schema-01#name-boolean-json-schemas
|
|
14
|
+
if (schema === false) {
|
|
15
|
+
return { not: {} };
|
|
16
|
+
}
|
|
17
|
+
if (schema === true) {
|
|
18
|
+
return {};
|
|
19
|
+
}
|
|
20
|
+
return traverse(schema).map(function (node) {
|
|
21
|
+
if (!this.isLeaf && isRecord(node) && node['example']) {
|
|
22
|
+
node.examples ??= [];
|
|
23
|
+
if (!Array.isArray(node.examples)) {
|
|
24
|
+
throw new Error(`Property "examples" must be an array but got type ${typeof node.examples}.`);
|
|
25
|
+
}
|
|
26
|
+
node.examples.push(node.example);
|
|
27
|
+
this.update(node, !!this.circular);
|
|
28
|
+
}
|
|
29
|
+
if (this.key && keysToRemove.has(this.key)) {
|
|
30
|
+
this.remove(!!this.circular);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
export function addExampleToSchema(schema, example) {
|
|
35
|
+
if (isRecord(schema) && typeof example !== 'undefined') {
|
|
36
|
+
(schema.examples ??= []).push(example);
|
|
37
|
+
}
|
|
38
|
+
return schema;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=json-schema.processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema.processor.js","sourceRoot":"","sources":["../../src/processors/json-schema.processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAC;AAE7D,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAC3B,UAAU;IACV,SAAS;IACT,YAAY;IACZ,eAAe;IACf,cAAc;IACd,UAAU;IACV,WAAW;CACZ,CAAC,CAAC;AAiBH,MAAM,UAAU,aAAa,CAAC,MAA+B;IAC3D,+FAA+F;IAC/F,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,IAAI;QACxC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC;YAErB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CACb,qDAAqD,OAAO,IAAI,CAAC,QAAQ,GAAG,CAC7E,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,MAAqB,EACrB,OAAgB;IAEhB,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC;QACvD,CAAC,MAAM,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { HttpLink, ThymianHttpRequest } from '@thymian/core';
|
|
2
|
+
import type { RunExpression } from '../runtime-expression.js';
|
|
3
|
+
export declare function findPartsInRequest(req: ThymianHttpRequest, name: string): string[];
|
|
4
|
+
export declare function processLinkObjectParameters(parameters: Record<string, unknown | RunExpression> | undefined, req: ThymianHttpRequest): Pick<HttpLink, 'pathParameters' | 'queryParameters' | 'headers' | 'cookies'>;
|
|
5
|
+
//# sourceMappingURL=link-object.processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-object.processor.d.ts","sourceRoot":"","sources":["../../src/processors/link-object.processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAElE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAM9D,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,MAAM,GACX,MAAM,EAAE,CAoBV;AAED,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,aAAa,CAAC,GAAG,SAAS,EAC/D,GAAG,EAAE,kBAAkB,GACtB,IAAI,CACL,QAAQ,EACR,gBAAgB,GAAG,iBAAiB,GAAG,SAAS,GAAG,SAAS,CAC7D,CA+CA"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { isOpenApiRuntimeExpression, processOpenApiRuntimeExpression, } from './runtime-expression.processor.js';
|
|
2
|
+
export function findPartsInRequest(req, name) {
|
|
3
|
+
const parts = [];
|
|
4
|
+
if (name in req.queryParameters) {
|
|
5
|
+
parts.push('query');
|
|
6
|
+
}
|
|
7
|
+
if (name in req.pathParameters) {
|
|
8
|
+
parts.push('path');
|
|
9
|
+
}
|
|
10
|
+
if (name in req.cookies) {
|
|
11
|
+
parts.push('cookie');
|
|
12
|
+
}
|
|
13
|
+
if (name in req.headers) {
|
|
14
|
+
parts.push('header');
|
|
15
|
+
}
|
|
16
|
+
return parts;
|
|
17
|
+
}
|
|
18
|
+
export function processLinkObjectParameters(parameters, req) {
|
|
19
|
+
const result = {
|
|
20
|
+
pathParameters: {},
|
|
21
|
+
queryParameters: {},
|
|
22
|
+
headers: {},
|
|
23
|
+
cookies: {},
|
|
24
|
+
};
|
|
25
|
+
if (!parameters) {
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
for (const [key, value] of Object.entries(parameters)) {
|
|
29
|
+
const match = /((path|header|cookie|query).)?(.+)/gm.exec(key);
|
|
30
|
+
if (!match) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
const [, , part, name] = match;
|
|
34
|
+
if (!name) {
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const finalValue = isOpenApiRuntimeExpression(value)
|
|
38
|
+
? processOpenApiRuntimeExpression(value)
|
|
39
|
+
: value;
|
|
40
|
+
const parts = part ? [part] : findPartsInRequest(req, name);
|
|
41
|
+
parts.forEach((part) => {
|
|
42
|
+
if (part === 'cookie') {
|
|
43
|
+
result.cookies[name] = finalValue;
|
|
44
|
+
}
|
|
45
|
+
else if (part === 'path') {
|
|
46
|
+
result.pathParameters[name] = finalValue;
|
|
47
|
+
}
|
|
48
|
+
else if (part === 'query') {
|
|
49
|
+
result.queryParameters[name] = finalValue;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
result.headers[name] = finalValue;
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=link-object.processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-object.processor.js","sourceRoot":"","sources":["../../src/processors/link-object.processor.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,GAChC,MAAM,mCAAmC,CAAC;AAE3C,MAAM,UAAU,kBAAkB,CAChC,GAAuB,EACvB,IAAY;IAEZ,MAAM,KAAK,GAAG,EAAE,CAAC;IAEjB,IAAI,IAAI,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,IAAI,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,UAA+D,EAC/D,GAAuB;IAKvB,MAAM,MAAM,GAER;QACF,cAAc,EAAE,EAAE;QAClB,eAAe,EAAE,EAAE;QACnB,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;KACZ,CAAC;IAEF,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,sCAAsC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE/D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS;QACX,CAAC;QAED,MAAM,CAAC,EAAE,AAAD,EAAG,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;QAE/B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,0BAA0B,CAAC,KAAK,CAAC;YAClD,CAAC,CAAC,+BAA+B,CAAC,KAAK,CAAC;YACxC,CAAC,CAAC,KAAK,CAAC;QAEV,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAE5D,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;YACpC,CAAC;iBAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC3B,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;YAC3C,CAAC;iBAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC5B,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;YACpC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Encoding, type Parameter, type SerializationStyle, type ThymianSchema } from '@thymian/core';
|
|
2
|
+
import type { OpenAPIV3_1 as OpenApiV31 } from 'openapi-types';
|
|
3
|
+
export declare function extractSerializationStyle(encodingObj: OpenApiV31.EncodingObject): SerializationStyle;
|
|
4
|
+
export declare function processMediaTypeObject(mediaTypeObject: OpenApiV31.MediaTypeObject, addEncodings?: boolean, isMultipart?: boolean): {
|
|
5
|
+
schema?: ThymianSchema;
|
|
6
|
+
headers: Record<string, Parameter>;
|
|
7
|
+
encoding?: Encoding;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=media-type-object.processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-type-object.processor.d.ts","sourceRoot":"","sources":["../../src/processors/media-type-object.processor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,kBAAkB,EAEvB,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,WAAW,IAAI,UAAU,EAAE,MAAM,eAAe,CAAC;AAS/D,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,UAAU,CAAC,cAAc,GACrC,kBAAkB,CAQpB;AAED,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,UAAU,CAAC,eAAe,EAC3C,YAAY,UAAQ,EACpB,WAAW,UAAQ,GAClB;IACD,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAkDA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { SerializationStyleBuilder, } from '@thymian/core';
|
|
2
|
+
import { processHeadersObject } from './headers-object.processor.js';
|
|
3
|
+
import { addExampleToSchema, processSchema, } from './json-schema.processor.js';
|
|
4
|
+
export function extractSerializationStyle(encodingObj) {
|
|
5
|
+
const style = encodingObj.style ?? 'form';
|
|
6
|
+
const explode = encodingObj.explode ?? style === 'form';
|
|
7
|
+
return new SerializationStyleBuilder(style, explode).build();
|
|
8
|
+
}
|
|
9
|
+
export function processMediaTypeObject(mediaTypeObject, addEncodings = false, isMultipart = false) {
|
|
10
|
+
const schema = mediaTypeObject.schema
|
|
11
|
+
? processSchema(mediaTypeObject.schema)
|
|
12
|
+
: undefined;
|
|
13
|
+
if (schema) {
|
|
14
|
+
Object.values(mediaTypeObject.examples ?? {}).forEach((example) => {
|
|
15
|
+
addExampleToSchema(schema, example.value);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
let headers = {};
|
|
19
|
+
if (isMultipart && mediaTypeObject.encoding) {
|
|
20
|
+
Object.values(mediaTypeObject.encoding).forEach((encodingObject) => {
|
|
21
|
+
headers = processHeadersObject(encodingObject.headers);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
if (schema) {
|
|
25
|
+
addExampleToSchema(schema, mediaTypeObject.example);
|
|
26
|
+
}
|
|
27
|
+
const result = {
|
|
28
|
+
headers,
|
|
29
|
+
schema,
|
|
30
|
+
};
|
|
31
|
+
if (addEncodings) {
|
|
32
|
+
result.encoding = Object.entries(mediaTypeObject.encoding ?? {}).reduce((acc, [propertyName, encodingObj]) => ({
|
|
33
|
+
...acc,
|
|
34
|
+
[propertyName]: {
|
|
35
|
+
contentType: encodingObj.contentType,
|
|
36
|
+
headers: processHeadersObject(encodingObj.headers),
|
|
37
|
+
serializationStyle: extractSerializationStyle(encodingObj),
|
|
38
|
+
},
|
|
39
|
+
}), {});
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=media-type-object.processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-type-object.processor.js","sourceRoot":"","sources":["../../src/processors/media-type-object.processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,yBAAyB,GAE1B,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EACL,kBAAkB,EAElB,aAAa,GACd,MAAM,4BAA4B,CAAC;AAEpC,MAAM,UAAU,yBAAyB,CACvC,WAAsC;IAEtC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,IAAI,MAAM,CAAC;IAC1C,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,IAAI,KAAK,KAAK,MAAM,CAAC;IAExD,OAAO,IAAI,yBAAyB,CAClC,KAAoC,EACpC,OAAO,CACR,CAAC,KAAK,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,eAA2C,EAC3C,YAAY,GAAG,KAAK,EACpB,WAAW,GAAG,KAAK;IAMnB,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM;QACnC,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC,MAAiC,CAAC;QAClE,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAChE,kBAAkB,CAAC,MAAM,EAAG,OAAoC,CAAC,KAAK,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,GAA8B,EAAE,CAAC;IAC5C,IAAI,WAAW,IAAI,eAAe,CAAC,QAAQ,EAAE,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;YACjE,OAAO,GAAG,oBAAoB,CAC5B,cAAc,CAAC,OAAkD,CAClE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,kBAAkB,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,MAAM,GAIR;QACF,OAAO;QACP,MAAM;KACP,CAAC;IAEF,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CACrE,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;YACrC,GAAG,GAAG;YACN,CAAC,YAAY,CAAC,EAAE;gBACd,WAAW,EAAE,WAAW,CAAC,WAAW;gBACpC,OAAO,EAAE,oBAAoB,CAC3B,WAAW,CAAC,OAAkD,CAC/D;gBACD,kBAAkB,EAAE,yBAAyB,CAAC,WAAW,CAAC;aAC3D;SACF,CAAC,EACF,EAAc,CACf,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type HttpFilterExpression, type Logger, ThymianFormat } from '@thymian/core';
|
|
2
|
+
import type { OpenAPIV3_1 as OpenApiV31 } from 'openapi-types';
|
|
3
|
+
import type { LocMapper } from '../loc-mapper/loc-mapper.js';
|
|
4
|
+
import { type ServerInfo } from './extract-server-info.js';
|
|
5
|
+
export type OpenapiV30ParserOptions = ServerInfo;
|
|
6
|
+
export type LinkObjectToProcess = {
|
|
7
|
+
linkObj: OpenApiV31.LinkObject;
|
|
8
|
+
name: string;
|
|
9
|
+
responseIds: string[];
|
|
10
|
+
};
|
|
11
|
+
export declare const supportedMethods: string[];
|
|
12
|
+
export declare class OpenapiProcessor {
|
|
13
|
+
private readonly logger;
|
|
14
|
+
private readonly options;
|
|
15
|
+
private readonly locMapper;
|
|
16
|
+
private readonly format;
|
|
17
|
+
private readonly linkObjects;
|
|
18
|
+
private readonly securitySchemeToNodeId;
|
|
19
|
+
private globalSecuritySchemes;
|
|
20
|
+
private sourceName;
|
|
21
|
+
constructor(logger: Logger, options: OpenapiV30ParserOptions, locMapper: LocMapper, format?: ThymianFormat);
|
|
22
|
+
private processLinkObject;
|
|
23
|
+
private processOperationObject;
|
|
24
|
+
process(document: OpenApiV31.Document, filter: HttpFilterExpression, sourceName?: string): ThymianFormat;
|
|
25
|
+
}
|
|
26
|
+
export type OperationObjectFilterFn = (operationObject: OpenApiV31.OperationObject, document: OpenApiV31.Document) => boolean;
|
|
27
|
+
//# sourceMappingURL=openapi.processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi.processor.d.ts","sourceRoot":"","sources":["../../src/processors/openapi.processor.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,MAAM,EACX,aAAa,EAEd,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,WAAW,IAAI,UAAU,EAAE,MAAM,eAAe,CAAC;AAG/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAQ9E,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC;AAEjD,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,gBAAgB,UAS5B,CAAC;AAKF,qBAAa,gBAAgB;IAUzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAZzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IAEzD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA8B;IAErE,OAAO,CAAC,qBAAqB,CAAgB;IAE7C,OAAO,CAAC,UAAU,CAAU;gBAGT,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,uBAAuB,EAChC,SAAS,EAAE,SAAS,EACpB,MAAM,gBAAsB;IAG/C,OAAO,CAAC,iBAAiB;IA8BzB,OAAO,CAAC,sBAAsB;IAsGvB,OAAO,CACZ,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAC7B,MAAM,EAAE,oBAAoB,EAC5B,UAAU,GAAE,MAA4B,GACvC,aAAa;CA+EjB;AAED,MAAM,MAAM,uBAAuB,GAAG,CACpC,eAAe,EAAE,UAAU,CAAC,eAAe,EAC3C,QAAQ,EAAE,UAAU,CAAC,QAAQ,KAC1B,OAAO,CAAC"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { isNodeType, ThymianFormat, } from '@thymian/core';
|
|
3
|
+
import { httpFilterExpressionToOperationFilter } from '../http-filter-expression-to-operation-filter.js';
|
|
4
|
+
import { extractServerInfo } from './extract-server-info.js';
|
|
5
|
+
import { processLinkObjectParameters } from './link-object.processor.js';
|
|
6
|
+
import { processParameterObjects } from './parameter-object.processor.js';
|
|
7
|
+
import { processRequestBodyObjet } from './request-body-object.processor.js';
|
|
8
|
+
import { processResponsesObject } from './responses-object.processor.js';
|
|
9
|
+
import { processSecuritySchemes } from './security-scheme-object.processor.js';
|
|
10
|
+
import { mergeParameters } from './utils.js';
|
|
11
|
+
export const supportedMethods = [
|
|
12
|
+
'get',
|
|
13
|
+
'put',
|
|
14
|
+
'post',
|
|
15
|
+
'delete',
|
|
16
|
+
'options',
|
|
17
|
+
'head',
|
|
18
|
+
'patch',
|
|
19
|
+
'trace',
|
|
20
|
+
];
|
|
21
|
+
/*
|
|
22
|
+
https://swagger.io/specification/v3/
|
|
23
|
+
*/
|
|
24
|
+
export class OpenapiProcessor {
|
|
25
|
+
logger;
|
|
26
|
+
options;
|
|
27
|
+
locMapper;
|
|
28
|
+
format;
|
|
29
|
+
linkObjects = [];
|
|
30
|
+
securitySchemeToNodeId = {};
|
|
31
|
+
globalSecuritySchemes = [];
|
|
32
|
+
sourceName;
|
|
33
|
+
constructor(logger, options, locMapper, format = new ThymianFormat()) {
|
|
34
|
+
this.logger = logger;
|
|
35
|
+
this.options = options;
|
|
36
|
+
this.locMapper = locMapper;
|
|
37
|
+
this.format = format;
|
|
38
|
+
}
|
|
39
|
+
processLinkObject(linkObjectToProcess) {
|
|
40
|
+
if (!linkObjectToProcess.linkObj.operationId) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const reqs = this.format.graph.filterNodes((id, attributes) => isNodeType(attributes, 'http-request') &&
|
|
44
|
+
attributes.extensions?.openapi?.operationId ===
|
|
45
|
+
linkObjectToProcess.linkObj.operationId);
|
|
46
|
+
linkObjectToProcess.responseIds.forEach((resId) => {
|
|
47
|
+
reqs.forEach((reqId) => {
|
|
48
|
+
if (this.format.graph.hasNode(resId) &&
|
|
49
|
+
this.format.graph.hasNode(reqId)) {
|
|
50
|
+
this.format.addHttpLink(resId, reqId, {
|
|
51
|
+
...processLinkObjectParameters(linkObjectToProcess.linkObj.parameters, this.format.getNode(reqId)),
|
|
52
|
+
sourceName: this.sourceName,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
processOperationObject(operationObject, params, method, path, serverInfo) {
|
|
59
|
+
if (operationObject.deprecated) {
|
|
60
|
+
this.logger.debug(`Operation with id "${operationObject.operationId ?? '(no operationId provided)'}" is deprecated but still used by Thymian.`);
|
|
61
|
+
}
|
|
62
|
+
const parameters = mergeParameters(params, processParameterObjects(operationObject.parameters));
|
|
63
|
+
const operationServerInfo = extractServerInfo(operationObject.servers, serverInfo);
|
|
64
|
+
const requests = processRequestBodyObjet(operationObject.requestBody, parameters, this.locMapper, {
|
|
65
|
+
host: operationServerInfo.host,
|
|
66
|
+
port: operationServerInfo.port,
|
|
67
|
+
protocol: operationServerInfo.protocol,
|
|
68
|
+
operationId: operationObject.operationId,
|
|
69
|
+
method,
|
|
70
|
+
path: join(operationServerInfo.basePath, path),
|
|
71
|
+
sourceName: this.sourceName,
|
|
72
|
+
});
|
|
73
|
+
const responsesAndLinks = processResponsesObject(operationObject.responses, parameters);
|
|
74
|
+
const securitySchemes = this.globalSecuritySchemes.length
|
|
75
|
+
? this.globalSecuritySchemes
|
|
76
|
+
: operationObject.security?.length
|
|
77
|
+
? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
78
|
+
operationObject.security.map((sec) => Object.keys(sec)[0])
|
|
79
|
+
: [];
|
|
80
|
+
for (const req of requests) {
|
|
81
|
+
const reqId = this.format.addRequest({
|
|
82
|
+
sourceName: this.sourceName,
|
|
83
|
+
...req,
|
|
84
|
+
});
|
|
85
|
+
for (const { responses, links } of responsesAndLinks) {
|
|
86
|
+
const responseIds = [];
|
|
87
|
+
for (const res of responses) {
|
|
88
|
+
const sourceLocation = operationObject.operationId
|
|
89
|
+
? this.locMapper.locationForOperationId(operationObject.operationId)
|
|
90
|
+
: undefined;
|
|
91
|
+
const [resId] = this.format.addResponseToRequest(reqId, {
|
|
92
|
+
...res,
|
|
93
|
+
sourceLocation,
|
|
94
|
+
sourceName: this.sourceName,
|
|
95
|
+
}, {
|
|
96
|
+
sourceLocation,
|
|
97
|
+
sourceName: this.sourceName,
|
|
98
|
+
});
|
|
99
|
+
responseIds.push(resId);
|
|
100
|
+
securitySchemes.forEach((scheme) => {
|
|
101
|
+
if (typeof this.securitySchemeToNodeId[scheme] === 'string') {
|
|
102
|
+
this.format.addEdge(reqId, this.securitySchemeToNodeId[scheme], {
|
|
103
|
+
type: 'is-secured',
|
|
104
|
+
sourceName: this.sourceName,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
links.forEach(({ name, linkObj }) => {
|
|
110
|
+
this.linkObjects.push({
|
|
111
|
+
name,
|
|
112
|
+
linkObj,
|
|
113
|
+
responseIds,
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
process(document, filter, sourceName = document.info.title) {
|
|
120
|
+
this.sourceName = sourceName;
|
|
121
|
+
const filterFn = httpFilterExpressionToOperationFilter(filter);
|
|
122
|
+
const securitySchemes = processSecuritySchemes(document.components?.securitySchemes ?? {});
|
|
123
|
+
securitySchemes.forEach((scheme) => {
|
|
124
|
+
this.securitySchemeToNodeId[scheme.extensions.openapi.schemeName] =
|
|
125
|
+
this.format.addSecurityScheme({
|
|
126
|
+
...scheme,
|
|
127
|
+
sourceName: this.sourceName,
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
document.security?.forEach((security) => {
|
|
131
|
+
const name = Object.keys(security)[0];
|
|
132
|
+
if (name) {
|
|
133
|
+
this.globalSecuritySchemes.push(name);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
const serverInfo = extractServerInfo(document.servers, this.options);
|
|
137
|
+
for (const [path, pathItem] of Object.entries(document.paths ?? {})) {
|
|
138
|
+
if (typeof pathItem === 'undefined') {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
const parameters = processParameterObjects(pathItem.parameters);
|
|
142
|
+
for (const [method, op] of Object.entries(pathItem)) {
|
|
143
|
+
if (!supportedMethods.includes(method)) {
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
const operation = op;
|
|
147
|
+
const operationParameters = processParameterObjects(operation.parameters);
|
|
148
|
+
const allParameters = mergeParameters(parameters, operationParameters);
|
|
149
|
+
if (filterFn({
|
|
150
|
+
document,
|
|
151
|
+
method,
|
|
152
|
+
params: allParameters,
|
|
153
|
+
path,
|
|
154
|
+
operationObject: operation,
|
|
155
|
+
serverInfo,
|
|
156
|
+
})) {
|
|
157
|
+
this.logger.debug('Do not skip operation:' + operation.operationId);
|
|
158
|
+
this.processOperationObject(operation, allParameters, method, path, serverInfo);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
this.linkObjects.forEach((linkToProcess) => this.processLinkObject(linkToProcess));
|
|
163
|
+
return this.format;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=openapi.processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi.processor.js","sourceRoot":"","sources":["../../src/processors/openapi.processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type Parameter } from '@thymian/core';
|
|
2
|
+
import type { OpenAPIV3_1 as OpenApiV31 } from 'openapi-types';
|
|
3
|
+
import type { Parameters } from './utils.js';
|
|
4
|
+
export declare function processParameterObjects(parameterObjects: OpenApiV31.ParameterObject[] | undefined): Parameters;
|
|
5
|
+
export declare function processParameterObject(parameterObject: OpenApiV31.ParameterObject): [string, Parameter];
|
|
6
|
+
//# sourceMappingURL=parameter-object.processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameter-object.processor.d.ts","sourceRoot":"","sources":["../../src/processors/parameter-object.processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EAIf,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,WAAW,IAAI,UAAU,EAAE,MAAM,eAAe,CAAC;AAQ/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,uBAAuB,CACrC,gBAAgB,EAAE,UAAU,CAAC,eAAe,EAAE,GAAG,SAAS,GACzD,UAAU,CA2BZ;AAED,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,UAAU,CAAC,eAAe,GAC1C,CAAC,MAAM,EAAE,SAAS,CAAC,CA2FrB"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { capitalizeFirstChar, CookieSerializationStyleBuilder, HeaderSerializationStyleBuilder, PathSerializationStyleBuilder, QuerySerializationStyleBuilder, } from '@thymian/core';
|
|
2
|
+
import { addExampleToSchema, processSchema, } from './json-schema.processor.js';
|
|
3
|
+
import { processMediaTypeObject } from './media-type-object.processor.js';
|
|
4
|
+
export function processParameterObjects(parameterObjects) {
|
|
5
|
+
const parameters = {
|
|
6
|
+
headers: {},
|
|
7
|
+
queryParameters: {},
|
|
8
|
+
cookies: {},
|
|
9
|
+
pathParameters: {},
|
|
10
|
+
};
|
|
11
|
+
if (!parameterObjects) {
|
|
12
|
+
return parameters;
|
|
13
|
+
}
|
|
14
|
+
for (const parameterObject of parameterObjects) {
|
|
15
|
+
const [name, param] = processParameterObject(parameterObject);
|
|
16
|
+
if (parameterObject.in === 'query') {
|
|
17
|
+
parameters.queryParameters[name] = param;
|
|
18
|
+
}
|
|
19
|
+
else if (parameterObject.in === 'path') {
|
|
20
|
+
parameters.pathParameters[name] = param;
|
|
21
|
+
}
|
|
22
|
+
else if (parameterObject.in === 'cookie') {
|
|
23
|
+
parameters.cookies[name] = param;
|
|
24
|
+
}
|
|
25
|
+
else if (parameterObject.in === 'header') {
|
|
26
|
+
parameters.headers[name] = param;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return parameters;
|
|
30
|
+
}
|
|
31
|
+
export function processParameterObject(parameterObject) {
|
|
32
|
+
let thymianSchema;
|
|
33
|
+
let parameterContentType;
|
|
34
|
+
if (parameterObject.schema) {
|
|
35
|
+
thymianSchema = processSchema(parameterObject.schema);
|
|
36
|
+
}
|
|
37
|
+
else if (parameterObject.content) {
|
|
38
|
+
const entries = Object.entries(parameterObject.content);
|
|
39
|
+
if (entries.length !== 1 || !entries[0]) {
|
|
40
|
+
throw new Error('ParameterObject.content MUST contain exactly one entry.');
|
|
41
|
+
}
|
|
42
|
+
const [contentType, mediaTypeObject] = entries[0];
|
|
43
|
+
const isMultipart = /^multipart\/.*/i.test(contentType);
|
|
44
|
+
const addEncoding = contentType === 'application/x-www-form-urlencoded' || isMultipart;
|
|
45
|
+
const { schema } = processMediaTypeObject(mediaTypeObject, addEncoding, isMultipart);
|
|
46
|
+
if (!schema) {
|
|
47
|
+
throw new Error(`${capitalizeFirstChar(parameterObject.in)} parameter "${parameterObject.name}" object must define either a schema or a content property.`);
|
|
48
|
+
}
|
|
49
|
+
thymianSchema = schema;
|
|
50
|
+
parameterContentType = contentType;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
throw new Error(`${capitalizeFirstChar(parameterObject.in)} parameter "${parameterObject.name}" object must define either a schema or a content property.`);
|
|
54
|
+
}
|
|
55
|
+
addExampleToSchema(thymianSchema, parameterObject.example);
|
|
56
|
+
Object.values(parameterObject.examples ?? {}).forEach((example) => {
|
|
57
|
+
addExampleToSchema(thymianSchema, example.value);
|
|
58
|
+
});
|
|
59
|
+
const style = parameterObject.in === 'header'
|
|
60
|
+
? new HeaderSerializationStyleBuilder()
|
|
61
|
+
.withExplode(parameterObject.explode)
|
|
62
|
+
.build()
|
|
63
|
+
: parameterObject.in === 'query'
|
|
64
|
+
? new QuerySerializationStyleBuilder()
|
|
65
|
+
.withStyle(parameterObject.style)
|
|
66
|
+
.withExplode(parameterObject.explode)
|
|
67
|
+
.build()
|
|
68
|
+
: parameterObject.in === 'path'
|
|
69
|
+
? new PathSerializationStyleBuilder()
|
|
70
|
+
.withStyle(parameterObject.style)
|
|
71
|
+
.withExplode(parameterObject.explode)
|
|
72
|
+
.build()
|
|
73
|
+
: new CookieSerializationStyleBuilder()
|
|
74
|
+
.withStyle(parameterObject.style)
|
|
75
|
+
.withExplode(parameterObject.explode)
|
|
76
|
+
.build();
|
|
77
|
+
const param = {
|
|
78
|
+
required: parameterObject.required ?? false,
|
|
79
|
+
schema: thymianSchema,
|
|
80
|
+
style,
|
|
81
|
+
};
|
|
82
|
+
if (parameterObject.description) {
|
|
83
|
+
param.description = parameterObject.description;
|
|
84
|
+
}
|
|
85
|
+
if (parameterContentType) {
|
|
86
|
+
param.contentType = parameterContentType;
|
|
87
|
+
}
|
|
88
|
+
return [parameterObject.name, param];
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=parameter-object.processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameter-object.processor.js","sourceRoot":"","sources":["../../src/processors/parameter-object.processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type PartialBy, type ThymianHttpRequest } from '@thymian/core';
|
|
2
|
+
import type { OpenAPIV3_1 as OpenApiV31 } from 'openapi-types';
|
|
3
|
+
import type { LocMapper } from '../loc-mapper/loc-mapper.js';
|
|
4
|
+
import type { Parameters } from './utils.js';
|
|
5
|
+
export declare function processRequestBodyObjet(requestBodyObject: OpenApiV31.RequestBodyObject | undefined, parameters: Parameters, locMapper: LocMapper, context: {
|
|
6
|
+
path: string;
|
|
7
|
+
operationId?: string;
|
|
8
|
+
method: string;
|
|
9
|
+
host: string;
|
|
10
|
+
port: number;
|
|
11
|
+
protocol: 'http' | 'https';
|
|
12
|
+
sourceName: string;
|
|
13
|
+
}): PartialBy<ThymianHttpRequest, 'label' | 'sourceName'>[];
|
|
14
|
+
//# sourceMappingURL=request-body-object.processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-body-object.processor.d.ts","sourceRoot":"","sources":["../../src/processors/request-body-object.processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,IAAI,UAAU,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,uBAAuB,CACrC,iBAAiB,EAAE,UAAU,CAAC,iBAAiB,GAAG,SAAS,EAC3D,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE;IACP,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB,GACA,SAAS,CAAC,kBAAkB,EAAE,OAAO,GAAG,YAAY,CAAC,EAAE,CAuEzD"}
|