@skmtc/core 0.30.1 → 0.31.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/esm/context/generateTypes.d.ts +14 -2
- package/esm/context/generateTypes.js +3 -1
- package/esm/mod.d.ts +1 -0
- package/esm/mod.js +1 -0
- package/esm/oas/header/Header.d.ts +4 -2
- package/esm/oas/header/Header.js +12 -5
- package/esm/oas/mediaType/jsonMediaType.d.ts +50 -0
- package/esm/oas/mediaType/jsonMediaType.js +64 -0
- package/esm/oas/mediaType/toContentSchema.d.ts +8 -0
- package/esm/oas/mediaType/toContentSchema.js +6 -0
- package/esm/oas/operation/Operation.d.ts +10 -2
- package/esm/oas/operation/Operation.js +20 -7
- package/esm/oas/parameter/Parameter.d.ts +1 -1
- package/esm/oas/parameter/Parameter.js +7 -4
- package/esm/oas/requestBody/RequestBody.d.ts +11 -0
- package/esm/oas/requestBody/RequestBody.js +16 -2
- package/esm/oas/response/Response.d.ts +11 -0
- package/esm/oas/response/Response.js +16 -2
- package/esm/oas/webhook/Webhook.d.ts +4 -4
- package/esm/oas/webhook/Webhook.js +6 -6
- package/esm/parse/logBodyMediaTypes.d.ts +27 -0
- package/esm/parse/logBodyMediaTypes.js +50 -0
- package/esm/parse/v3-0/requestBody/toRequestBodiesV3.js +4 -1
- package/esm/parse/v3-0/response/toResponseV3.js +4 -1
- package/esm/parse/v3-1/requestBody/toRequestBodiesV3.js +4 -1
- package/esm/parse/v3-1/response/toResponseV3.js +4 -1
- package/esm/parse/v3-2/requestBody/toRequestBodiesV3.js +4 -1
- package/esm/parse/v3-2/response/toResponseV3.js +4 -1
- package/package.json +1 -1
- package/script/context/generateTypes.d.ts +14 -2
- package/script/context/generateTypes.js +3 -1
- package/script/mod.d.ts +1 -0
- package/script/mod.js +1 -0
- package/script/oas/header/Header.d.ts +4 -2
- package/script/oas/header/Header.js +12 -5
- package/script/oas/mediaType/jsonMediaType.d.ts +50 -0
- package/script/oas/mediaType/jsonMediaType.js +71 -0
- package/script/oas/mediaType/toContentSchema.d.ts +8 -0
- package/script/oas/mediaType/toContentSchema.js +10 -0
- package/script/oas/operation/Operation.d.ts +10 -2
- package/script/oas/operation/Operation.js +20 -7
- package/script/oas/parameter/Parameter.d.ts +1 -1
- package/script/oas/parameter/Parameter.js +7 -4
- package/script/oas/requestBody/RequestBody.d.ts +11 -0
- package/script/oas/requestBody/RequestBody.js +16 -2
- package/script/oas/response/Response.d.ts +11 -0
- package/script/oas/response/Response.js +16 -2
- package/script/oas/webhook/Webhook.d.ts +4 -4
- package/script/oas/webhook/Webhook.js +6 -6
- package/script/parse/logBodyMediaTypes.d.ts +27 -0
- package/script/parse/logBodyMediaTypes.js +54 -0
- package/script/parse/v3-0/requestBody/toRequestBodiesV3.js +4 -1
- package/script/parse/v3-0/response/toResponseV3.js +4 -1
- package/script/parse/v3-1/requestBody/toRequestBodiesV3.js +4 -1
- package/script/parse/v3-1/response/toResponseV3.js +4 -1
- package/script/parse/v3-2/requestBody/toRequestBodiesV3.js +4 -1
- package/script/parse/v3-2/response/toResponseV3.js +4 -1
|
@@ -113,10 +113,10 @@ export declare class OasWebhook extends OasBase {
|
|
|
113
113
|
*/
|
|
114
114
|
toPayload(): OasRequestBody | undefined;
|
|
115
115
|
/**
|
|
116
|
-
* The schema of the received payload for `mediaType
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
* type.
|
|
116
|
+
* The schema of the received payload for `mediaType`, an exact lookup —
|
|
117
|
+
* the inbound body shape a handler generator writes a type for. Without
|
|
118
|
+
* `mediaType`, the media type `OasRequestBody.toJsonContent` picks.
|
|
119
|
+
* `undefined` when there is no body or no schema for that media type.
|
|
120
120
|
*/
|
|
121
121
|
toPayloadSchema(mediaType?: string): OasSchema | OasRef<'schema'> | undefined;
|
|
122
122
|
/**
|
|
@@ -160,13 +160,13 @@ class OasWebhook extends OasBase_js_1.OasBase {
|
|
|
160
160
|
return this.requestBody?.resolve();
|
|
161
161
|
}
|
|
162
162
|
/**
|
|
163
|
-
* The schema of the received payload for `mediaType
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
* type.
|
|
163
|
+
* The schema of the received payload for `mediaType`, an exact lookup —
|
|
164
|
+
* the inbound body shape a handler generator writes a type for. Without
|
|
165
|
+
* `mediaType`, the media type `OasRequestBody.toJsonContent` picks.
|
|
166
|
+
* `undefined` when there is no body or no schema for that media type.
|
|
167
167
|
*/
|
|
168
|
-
toPayloadSchema(mediaType
|
|
169
|
-
return this.toPayload()?.
|
|
168
|
+
toPayloadSchema(mediaType) {
|
|
169
|
+
return this.toPayload()?.toSchema(mediaType);
|
|
170
170
|
}
|
|
171
171
|
/**
|
|
172
172
|
* Resolve the inbound parameters (e.g. the signature/headers a handler
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ParseContextType } from '../context/parseTypes.js';
|
|
2
|
+
import type { StackTrail } from '../context/StackTrail.js';
|
|
3
|
+
import type { OasMediaType } from '../oas/mediaType/MediaType.js';
|
|
4
|
+
export type LogBodyMediaTypesArgs = {
|
|
5
|
+
/** The parsed `content` map of a response or request body. */
|
|
6
|
+
content: Record<string, OasMediaType> | undefined;
|
|
7
|
+
/** Trail of the response or request body; the issue is logged at its `content` key. */
|
|
8
|
+
stackTrail: StackTrail;
|
|
9
|
+
context: ParseContextType;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Log at most one issue for a parsed response or request body, from the same
|
|
13
|
+
* choice the lookups make (`toJsonContent`), so the issue and the lookup
|
|
14
|
+
* cannot disagree. Called after the body is built, so a body that fails to
|
|
15
|
+
* parse logs nothing.
|
|
16
|
+
*
|
|
17
|
+
* - `WILDCARD_MEDIA_TYPE` (`warning`): the body is read from `*\/*` as JSON,
|
|
18
|
+
* though the document does not say its format.
|
|
19
|
+
* - `NO_JSON_MEDIA_TYPE` (`debug`): no lookup reads the body, and its keys
|
|
20
|
+
* include a range (`*\/*` with a scalar schema, `application/*`), so its
|
|
21
|
+
* format is unknown.
|
|
22
|
+
*
|
|
23
|
+
* A body with only specific non-JSON types (`multipart/form-data`,
|
|
24
|
+
* `application/octet-stream`, `text/plain`) logs nothing: that is a normal
|
|
25
|
+
* text, form or binary body.
|
|
26
|
+
*/
|
|
27
|
+
export declare const logBodyMediaTypes: ({ content, stackTrail, context }: LogBodyMediaTypesArgs) => void;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logBodyMediaTypes = void 0;
|
|
4
|
+
const jsonMediaType_js_1 = require("../oas/mediaType/jsonMediaType.js");
|
|
5
|
+
/**
|
|
6
|
+
* Log at most one issue for a parsed response or request body, from the same
|
|
7
|
+
* choice the lookups make (`toJsonContent`), so the issue and the lookup
|
|
8
|
+
* cannot disagree. Called after the body is built, so a body that fails to
|
|
9
|
+
* parse logs nothing.
|
|
10
|
+
*
|
|
11
|
+
* - `WILDCARD_MEDIA_TYPE` (`warning`): the body is read from `*\/*` as JSON,
|
|
12
|
+
* though the document does not say its format.
|
|
13
|
+
* - `NO_JSON_MEDIA_TYPE` (`debug`): no lookup reads the body, and its keys
|
|
14
|
+
* include a range (`*\/*` with a scalar schema, `application/*`), so its
|
|
15
|
+
* format is unknown.
|
|
16
|
+
*
|
|
17
|
+
* A body with only specific non-JSON types (`multipart/form-data`,
|
|
18
|
+
* `application/octet-stream`, `text/plain`) logs nothing: that is a normal
|
|
19
|
+
* text, form or binary body.
|
|
20
|
+
*/
|
|
21
|
+
const logBodyMediaTypes = ({ content, stackTrail, context }) => {
|
|
22
|
+
const mediaTypes = Object.keys(content ?? {});
|
|
23
|
+
if (mediaTypes.length === 0) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const listed = mediaTypes.map(mediaType => `"${mediaType}"`).join(', ');
|
|
27
|
+
// `parent` is only the keys: the issue log serializes it on every issue.
|
|
28
|
+
const parent = { mediaTypes };
|
|
29
|
+
const chosen = (0, jsonMediaType_js_1.toJsonContent)(content);
|
|
30
|
+
if (chosen !== undefined) {
|
|
31
|
+
if ((0, jsonMediaType_js_1.isAnyMediaType)(chosen.mediaType)) {
|
|
32
|
+
context.logIssue({
|
|
33
|
+
key: 'content',
|
|
34
|
+
level: 'warning',
|
|
35
|
+
type: 'WILDCARD_MEDIA_TYPE',
|
|
36
|
+
message: `Content has no JSON media type (${listed}), so the body is read from "*/*" as JSON although the document does not say its format`,
|
|
37
|
+
parent,
|
|
38
|
+
stackTrail
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (mediaTypes.some(mediaType => (0, jsonMediaType_js_1.toMediaTypeEssence)(mediaType).includes('*'))) {
|
|
44
|
+
context.logIssue({
|
|
45
|
+
key: 'content',
|
|
46
|
+
level: 'debug',
|
|
47
|
+
type: 'NO_JSON_MEDIA_TYPE',
|
|
48
|
+
message: `Content names only a media type range or non-JSON types (${listed}), so no lookup without a media type reads its schema`,
|
|
49
|
+
parent,
|
|
50
|
+
stackTrail
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
exports.logBodyMediaTypes = logBodyMediaTypes;
|
|
@@ -6,6 +6,7 @@ const toRefV31_js_1 = require("../ref/toRefV31.js");
|
|
|
6
6
|
const toMediaTypeItemV3_js_1 = require("../mediaType/toMediaTypeItemV3.js");
|
|
7
7
|
const RequestBody_js_1 = require("../../../oas/requestBody/RequestBody.js");
|
|
8
8
|
const toSpecificationExtensionsV3_js_1 = require("../specificationExtensions/toSpecificationExtensionsV3.js");
|
|
9
|
+
const logBodyMediaTypes_js_1 = require("../../logBodyMediaTypes.js");
|
|
9
10
|
const toRequestBodyV3 = ({ requestBody, stackTrail, context }) => {
|
|
10
11
|
if (!requestBody) {
|
|
11
12
|
return undefined;
|
|
@@ -29,7 +30,9 @@ const toRequestBodyV3 = ({ requestBody, stackTrail, context }) => {
|
|
|
29
30
|
required,
|
|
30
31
|
extensionFields
|
|
31
32
|
};
|
|
32
|
-
|
|
33
|
+
const parsed = context.withStackTrail(stackTrail, () => new RequestBody_js_1.OasRequestBody(fields, context));
|
|
34
|
+
(0, logBodyMediaTypes_js_1.logBodyMediaTypes)({ content: fields.content, stackTrail, context });
|
|
35
|
+
return parsed;
|
|
33
36
|
};
|
|
34
37
|
exports.toRequestBodyV3 = toRequestBodyV3;
|
|
35
38
|
const toRequestBodiesV3 = ({ requestBodies, stackTrail, context }) => {
|
|
@@ -9,6 +9,7 @@ const toMediaTypeItemV3_js_1 = require("../mediaType/toMediaTypeItemV3.js");
|
|
|
9
9
|
const Response_js_1 = require("../../../oas/response/Response.js");
|
|
10
10
|
const toSpecificationExtensionsV3_js_1 = require("../specificationExtensions/toSpecificationExtensionsV3.js");
|
|
11
11
|
const tryParseAt_js_1 = require("../../../context/tryParseAt.js");
|
|
12
|
+
const logBodyMediaTypes_js_1 = require("../../logBodyMediaTypes.js");
|
|
12
13
|
const toResponsesV3 = ({ responses, stackTrail, context }) => {
|
|
13
14
|
const output = {};
|
|
14
15
|
const entries = Object.entries(responses);
|
|
@@ -50,12 +51,14 @@ const toResponseV3 = ({ response, stackTrail, context }) => {
|
|
|
50
51
|
const parsedHeaders = stackTrail.trace('headers', st => (0, toHeadersV3_js_1.toHeadersV3)({ headers, stackTrail: st, context }));
|
|
51
52
|
const parsedLinks = stackTrail.trace('links', st => (0, toLinksV3_js_1.toLinksV3)({ links, stackTrail: st, context }));
|
|
52
53
|
const parsedContent = stackTrail.trace('content', st => (0, toMediaTypeItemV3_js_1.toOptionalMediaTypeItemsV3)({ content, stackTrail: st, context }));
|
|
53
|
-
|
|
54
|
+
const parsed = context.withStackTrail(stackTrail, () => new Response_js_1.OasResponse({
|
|
54
55
|
description,
|
|
55
56
|
headers: parsedHeaders,
|
|
56
57
|
links: parsedLinks,
|
|
57
58
|
content: parsedContent,
|
|
58
59
|
extensionFields
|
|
59
60
|
}, context));
|
|
61
|
+
(0, logBodyMediaTypes_js_1.logBodyMediaTypes)({ content: parsedContent, stackTrail, context });
|
|
62
|
+
return parsed;
|
|
60
63
|
};
|
|
61
64
|
exports.toResponseV3 = toResponseV3;
|
|
@@ -6,6 +6,7 @@ const toRefV31_js_1 = require("../ref/toRefV31.js");
|
|
|
6
6
|
const toMediaTypeItemV3_js_1 = require("../mediaType/toMediaTypeItemV3.js");
|
|
7
7
|
const RequestBody_js_1 = require("../../../oas/requestBody/RequestBody.js");
|
|
8
8
|
const toSpecificationExtensionsV3_js_1 = require("../specificationExtensions/toSpecificationExtensionsV3.js");
|
|
9
|
+
const logBodyMediaTypes_js_1 = require("../../logBodyMediaTypes.js");
|
|
9
10
|
const toRequestBodyV3 = ({ requestBody, stackTrail, context }) => {
|
|
10
11
|
if (!requestBody) {
|
|
11
12
|
return undefined;
|
|
@@ -29,7 +30,9 @@ const toRequestBodyV3 = ({ requestBody, stackTrail, context }) => {
|
|
|
29
30
|
required,
|
|
30
31
|
extensionFields
|
|
31
32
|
};
|
|
32
|
-
|
|
33
|
+
const parsed = context.withStackTrail(stackTrail, () => new RequestBody_js_1.OasRequestBody(fields, context));
|
|
34
|
+
(0, logBodyMediaTypes_js_1.logBodyMediaTypes)({ content: fields.content, stackTrail, context });
|
|
35
|
+
return parsed;
|
|
33
36
|
};
|
|
34
37
|
exports.toRequestBodyV3 = toRequestBodyV3;
|
|
35
38
|
const toRequestBodiesV3 = ({ requestBodies, stackTrail, context }) => {
|
|
@@ -9,6 +9,7 @@ const toMediaTypeItemV3_js_1 = require("../mediaType/toMediaTypeItemV3.js");
|
|
|
9
9
|
const Response_js_1 = require("../../../oas/response/Response.js");
|
|
10
10
|
const toSpecificationExtensionsV3_js_1 = require("../specificationExtensions/toSpecificationExtensionsV3.js");
|
|
11
11
|
const tryParseAt_js_1 = require("../../../context/tryParseAt.js");
|
|
12
|
+
const logBodyMediaTypes_js_1 = require("../../logBodyMediaTypes.js");
|
|
12
13
|
const toResponsesV3 = ({ responses, stackTrail, context }) => {
|
|
13
14
|
const output = {};
|
|
14
15
|
const entries = Object.entries(responses);
|
|
@@ -50,12 +51,14 @@ const toResponseV3 = ({ response, stackTrail, context }) => {
|
|
|
50
51
|
const parsedHeaders = stackTrail.trace('headers', st => (0, toHeadersV3_js_1.toHeadersV3)({ headers, stackTrail: st, context }));
|
|
51
52
|
const parsedLinks = stackTrail.trace('links', st => (0, toLinksV3_js_1.toLinksV3)({ links, stackTrail: st, context }));
|
|
52
53
|
const parsedContent = stackTrail.trace('content', st => (0, toMediaTypeItemV3_js_1.toOptionalMediaTypeItemsV3)({ content, stackTrail: st, context }));
|
|
53
|
-
|
|
54
|
+
const parsed = context.withStackTrail(stackTrail, () => new Response_js_1.OasResponse({
|
|
54
55
|
description,
|
|
55
56
|
headers: parsedHeaders,
|
|
56
57
|
links: parsedLinks,
|
|
57
58
|
content: parsedContent,
|
|
58
59
|
extensionFields
|
|
59
60
|
}, context));
|
|
61
|
+
(0, logBodyMediaTypes_js_1.logBodyMediaTypes)({ content: parsedContent, stackTrail, context });
|
|
62
|
+
return parsed;
|
|
60
63
|
};
|
|
61
64
|
exports.toResponseV3 = toResponseV3;
|
|
@@ -6,6 +6,7 @@ const toRefV31_js_1 = require("../ref/toRefV31.js");
|
|
|
6
6
|
const toMediaTypeItemV3_js_1 = require("../mediaType/toMediaTypeItemV3.js");
|
|
7
7
|
const RequestBody_js_1 = require("../../../oas/requestBody/RequestBody.js");
|
|
8
8
|
const toSpecificationExtensionsV3_js_1 = require("../specificationExtensions/toSpecificationExtensionsV3.js");
|
|
9
|
+
const logBodyMediaTypes_js_1 = require("../../logBodyMediaTypes.js");
|
|
9
10
|
const toRequestBodyV3 = ({ requestBody, stackTrail, context }) => {
|
|
10
11
|
if (!requestBody) {
|
|
11
12
|
return undefined;
|
|
@@ -29,7 +30,9 @@ const toRequestBodyV3 = ({ requestBody, stackTrail, context }) => {
|
|
|
29
30
|
required,
|
|
30
31
|
extensionFields
|
|
31
32
|
};
|
|
32
|
-
|
|
33
|
+
const parsed = context.withStackTrail(stackTrail, () => new RequestBody_js_1.OasRequestBody(fields, context));
|
|
34
|
+
(0, logBodyMediaTypes_js_1.logBodyMediaTypes)({ content: fields.content, stackTrail, context });
|
|
35
|
+
return parsed;
|
|
33
36
|
};
|
|
34
37
|
exports.toRequestBodyV3 = toRequestBodyV3;
|
|
35
38
|
const toRequestBodiesV3 = ({ requestBodies, stackTrail, context }) => {
|
|
@@ -9,6 +9,7 @@ const toMediaTypeItemV3_js_1 = require("../mediaType/toMediaTypeItemV3.js");
|
|
|
9
9
|
const Response_js_1 = require("../../../oas/response/Response.js");
|
|
10
10
|
const toSpecificationExtensionsV3_js_1 = require("../specificationExtensions/toSpecificationExtensionsV3.js");
|
|
11
11
|
const tryParseAt_js_1 = require("../../../context/tryParseAt.js");
|
|
12
|
+
const logBodyMediaTypes_js_1 = require("../../logBodyMediaTypes.js");
|
|
12
13
|
const toResponsesV3 = ({ responses, stackTrail, context }) => {
|
|
13
14
|
const output = {};
|
|
14
15
|
const entries = Object.entries(responses);
|
|
@@ -50,7 +51,7 @@ const toResponseV3 = ({ response, stackTrail, context }) => {
|
|
|
50
51
|
const parsedHeaders = stackTrail.trace('headers', st => (0, toHeadersV3_js_1.toHeadersV3)({ headers, stackTrail: st, context }));
|
|
51
52
|
const parsedLinks = stackTrail.trace('links', st => (0, toLinksV3_js_1.toLinksV3)({ links, stackTrail: st, context }));
|
|
52
53
|
const parsedContent = stackTrail.trace('content', st => (0, toMediaTypeItemV3_js_1.toOptionalMediaTypeItemsV3)({ content, stackTrail: st, context }));
|
|
53
|
-
|
|
54
|
+
const parsed = context.withStackTrail(stackTrail, () => new Response_js_1.OasResponse({
|
|
54
55
|
summary,
|
|
55
56
|
description,
|
|
56
57
|
headers: parsedHeaders,
|
|
@@ -58,5 +59,7 @@ const toResponseV3 = ({ response, stackTrail, context }) => {
|
|
|
58
59
|
content: parsedContent,
|
|
59
60
|
extensionFields
|
|
60
61
|
}, context));
|
|
62
|
+
(0, logBodyMediaTypes_js_1.logBodyMediaTypes)({ content: parsedContent, stackTrail, context });
|
|
63
|
+
return parsed;
|
|
61
64
|
};
|
|
62
65
|
exports.toResponseV3 = toResponseV3;
|