typed-openapi 0.1.5 → 0.3.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/dist/{chunk-RMN2CYTB.js → chunk-6BNKDC6H.js} +17 -9
- package/dist/cli.cjs +18 -10
- package/dist/cli.js +2 -2
- package/dist/index.cjs +17 -9
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/generator.ts +16 -2
- package/src/map-openapi-endpoints.ts +12 -12
|
@@ -373,6 +373,14 @@ var generateEndpointSchemaList = (ctx) => {
|
|
|
373
373
|
${parameters.query ? `query: ${parameterObjectToString(parameters.query)},` : ""}
|
|
374
374
|
${parameters.path ? `path: ${parameterObjectToString(parameters.path)},` : ""}
|
|
375
375
|
${parameters.header ? `header: ${parameterObjectToString(parameters.header)},` : ""}
|
|
376
|
+
${parameters.body ? `body: ${parameterObjectToString(
|
|
377
|
+
ctx.runtime === "none" ? parameters.body.recompute((box) => {
|
|
378
|
+
if (Box.isReference(box) && !box.params.generics) {
|
|
379
|
+
box.value = `Schemas.${box.value}`;
|
|
380
|
+
}
|
|
381
|
+
return box;
|
|
382
|
+
}) : parameters.body
|
|
383
|
+
)},` : ""}
|
|
376
384
|
}` : "parameters: never,"}
|
|
377
385
|
response: ${ctx.runtime === "none" ? endpoint.response.recompute((box) => {
|
|
378
386
|
if (Box.isReference(box) && !box.params.generics) {
|
|
@@ -723,7 +731,7 @@ var mapOpenApiEndpoints = (doc) => {
|
|
|
723
731
|
}
|
|
724
732
|
};
|
|
725
733
|
const lists = { query: [], path: [], header: [] };
|
|
726
|
-
const paramObjects =
|
|
734
|
+
const paramObjects = [...pathItemObj.parameters ?? [], ...operation.parameters ?? []].reduce(
|
|
727
735
|
(acc, paramOrRef) => {
|
|
728
736
|
const param = refs.unwrap(paramOrRef);
|
|
729
737
|
const schema = openApiSchemaToTs({ schema: refs.unwrap(param.schema ?? {}), ctx });
|
|
@@ -753,6 +761,7 @@ var mapOpenApiEndpoints = (doc) => {
|
|
|
753
761
|
return acc;
|
|
754
762
|
}, {});
|
|
755
763
|
if (operation.requestBody) {
|
|
764
|
+
endpoint.meta.hasParameters = true;
|
|
756
765
|
const requestBody = refs.unwrap(operation.requestBody ?? {});
|
|
757
766
|
const content2 = requestBody.content;
|
|
758
767
|
const matchingMediaType = Object.keys(content2).find(isAllowedParamMediaTypes);
|
|
@@ -779,15 +788,14 @@ var mapOpenApiEndpoints = (doc) => {
|
|
|
779
788
|
endpoint.parameters = Object.keys(params).length ? params : void 0;
|
|
780
789
|
}
|
|
781
790
|
let responseObject;
|
|
782
|
-
|
|
791
|
+
Object.entries(operation.responses).map(([status, responseOrRef]) => {
|
|
792
|
+
const statusCode = Number(status);
|
|
793
|
+
if (statusCode >= 200 && statusCode < 300) {
|
|
794
|
+
responseObject = refs.unwrap(responseOrRef);
|
|
795
|
+
}
|
|
796
|
+
});
|
|
797
|
+
if (!responseObject && operation.responses.default) {
|
|
783
798
|
responseObject = refs.unwrap(operation.responses.default);
|
|
784
|
-
} else {
|
|
785
|
-
Object.entries(operation.responses).map(([status, responseOrRef]) => {
|
|
786
|
-
const statusCode = Number(status);
|
|
787
|
-
if (statusCode >= 200 && statusCode < 300) {
|
|
788
|
-
responseObject = refs.unwrap(responseOrRef);
|
|
789
|
-
}
|
|
790
|
-
});
|
|
791
799
|
}
|
|
792
800
|
const content = responseObject?.content;
|
|
793
801
|
if (content) {
|
package/dist/cli.cjs
CHANGED
|
@@ -31,7 +31,7 @@ var import_promises = require("fs/promises");
|
|
|
31
31
|
|
|
32
32
|
// package.json
|
|
33
33
|
var name = "typed-openapi";
|
|
34
|
-
var version = "0.
|
|
34
|
+
var version = "0.3.0";
|
|
35
35
|
|
|
36
36
|
// src/generator.ts
|
|
37
37
|
var import_server2 = require("pastable/server");
|
|
@@ -408,6 +408,14 @@ var generateEndpointSchemaList = (ctx) => {
|
|
|
408
408
|
${parameters.query ? `query: ${parameterObjectToString(parameters.query)},` : ""}
|
|
409
409
|
${parameters.path ? `path: ${parameterObjectToString(parameters.path)},` : ""}
|
|
410
410
|
${parameters.header ? `header: ${parameterObjectToString(parameters.header)},` : ""}
|
|
411
|
+
${parameters.body ? `body: ${parameterObjectToString(
|
|
412
|
+
ctx.runtime === "none" ? parameters.body.recompute((box) => {
|
|
413
|
+
if (Box.isReference(box) && !box.params.generics) {
|
|
414
|
+
box.value = `Schemas.${box.value}`;
|
|
415
|
+
}
|
|
416
|
+
return box;
|
|
417
|
+
}) : parameters.body
|
|
418
|
+
)},` : ""}
|
|
411
419
|
}` : "parameters: never,"}
|
|
412
420
|
response: ${ctx.runtime === "none" ? endpoint.response.recompute((box) => {
|
|
413
421
|
if (Box.isReference(box) && !box.params.generics) {
|
|
@@ -760,7 +768,7 @@ var mapOpenApiEndpoints = (doc) => {
|
|
|
760
768
|
}
|
|
761
769
|
};
|
|
762
770
|
const lists = { query: [], path: [], header: [] };
|
|
763
|
-
const paramObjects =
|
|
771
|
+
const paramObjects = [...pathItemObj.parameters ?? [], ...operation.parameters ?? []].reduce(
|
|
764
772
|
(acc, paramOrRef) => {
|
|
765
773
|
const param = refs.unwrap(paramOrRef);
|
|
766
774
|
const schema = openApiSchemaToTs({ schema: refs.unwrap(param.schema ?? {}), ctx });
|
|
@@ -790,6 +798,7 @@ var mapOpenApiEndpoints = (doc) => {
|
|
|
790
798
|
return acc;
|
|
791
799
|
}, {});
|
|
792
800
|
if (operation.requestBody) {
|
|
801
|
+
endpoint.meta.hasParameters = true;
|
|
793
802
|
const requestBody = refs.unwrap(operation.requestBody ?? {});
|
|
794
803
|
const content2 = requestBody.content;
|
|
795
804
|
const matchingMediaType = Object.keys(content2).find(isAllowedParamMediaTypes);
|
|
@@ -816,15 +825,14 @@ var mapOpenApiEndpoints = (doc) => {
|
|
|
816
825
|
endpoint.parameters = Object.keys(params).length ? params : void 0;
|
|
817
826
|
}
|
|
818
827
|
let responseObject;
|
|
819
|
-
|
|
828
|
+
Object.entries(operation.responses).map(([status, responseOrRef]) => {
|
|
829
|
+
const statusCode = Number(status);
|
|
830
|
+
if (statusCode >= 200 && statusCode < 300) {
|
|
831
|
+
responseObject = refs.unwrap(responseOrRef);
|
|
832
|
+
}
|
|
833
|
+
});
|
|
834
|
+
if (!responseObject && operation.responses.default) {
|
|
820
835
|
responseObject = refs.unwrap(operation.responses.default);
|
|
821
|
-
} else {
|
|
822
|
-
Object.entries(operation.responses).map(([status, responseOrRef]) => {
|
|
823
|
-
const statusCode = Number(status);
|
|
824
|
-
if (statusCode >= 200 && statusCode < 300) {
|
|
825
|
-
responseObject = refs.unwrap(responseOrRef);
|
|
826
|
-
}
|
|
827
|
-
});
|
|
828
836
|
}
|
|
829
837
|
const content = responseObject?.content;
|
|
830
838
|
if (content) {
|
package/dist/cli.js
CHANGED
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
allowedRuntimes,
|
|
3
3
|
generateFile,
|
|
4
4
|
mapOpenApiEndpoints
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-6BNKDC6H.js";
|
|
6
6
|
|
|
7
7
|
// src/cli.ts
|
|
8
8
|
import SwaggerParser from "@apidevtools/swagger-parser";
|
|
@@ -13,7 +13,7 @@ import { writeFile } from "fs/promises";
|
|
|
13
13
|
|
|
14
14
|
// package.json
|
|
15
15
|
var name = "typed-openapi";
|
|
16
|
-
var version = "0.
|
|
16
|
+
var version = "0.3.0";
|
|
17
17
|
|
|
18
18
|
// src/cli.ts
|
|
19
19
|
var cwd = process.cwd();
|
package/dist/index.cjs
CHANGED
|
@@ -416,6 +416,14 @@ var generateEndpointSchemaList = (ctx) => {
|
|
|
416
416
|
${parameters.query ? `query: ${parameterObjectToString(parameters.query)},` : ""}
|
|
417
417
|
${parameters.path ? `path: ${parameterObjectToString(parameters.path)},` : ""}
|
|
418
418
|
${parameters.header ? `header: ${parameterObjectToString(parameters.header)},` : ""}
|
|
419
|
+
${parameters.body ? `body: ${parameterObjectToString(
|
|
420
|
+
ctx.runtime === "none" ? parameters.body.recompute((box) => {
|
|
421
|
+
if (Box.isReference(box) && !box.params.generics) {
|
|
422
|
+
box.value = `Schemas.${box.value}`;
|
|
423
|
+
}
|
|
424
|
+
return box;
|
|
425
|
+
}) : parameters.body
|
|
426
|
+
)},` : ""}
|
|
419
427
|
}` : "parameters: never,"}
|
|
420
428
|
response: ${ctx.runtime === "none" ? endpoint.response.recompute((box) => {
|
|
421
429
|
if (Box.isReference(box) && !box.params.generics) {
|
|
@@ -768,7 +776,7 @@ var mapOpenApiEndpoints = (doc) => {
|
|
|
768
776
|
}
|
|
769
777
|
};
|
|
770
778
|
const lists = { query: [], path: [], header: [] };
|
|
771
|
-
const paramObjects =
|
|
779
|
+
const paramObjects = [...pathItemObj.parameters ?? [], ...operation.parameters ?? []].reduce(
|
|
772
780
|
(acc, paramOrRef) => {
|
|
773
781
|
const param = refs.unwrap(paramOrRef);
|
|
774
782
|
const schema = openApiSchemaToTs({ schema: refs.unwrap(param.schema ?? {}), ctx });
|
|
@@ -798,6 +806,7 @@ var mapOpenApiEndpoints = (doc) => {
|
|
|
798
806
|
return acc;
|
|
799
807
|
}, {});
|
|
800
808
|
if (operation.requestBody) {
|
|
809
|
+
endpoint.meta.hasParameters = true;
|
|
801
810
|
const requestBody = refs.unwrap(operation.requestBody ?? {});
|
|
802
811
|
const content2 = requestBody.content;
|
|
803
812
|
const matchingMediaType = Object.keys(content2).find(isAllowedParamMediaTypes);
|
|
@@ -824,15 +833,14 @@ var mapOpenApiEndpoints = (doc) => {
|
|
|
824
833
|
endpoint.parameters = Object.keys(params).length ? params : void 0;
|
|
825
834
|
}
|
|
826
835
|
let responseObject;
|
|
827
|
-
|
|
836
|
+
Object.entries(operation.responses).map(([status, responseOrRef]) => {
|
|
837
|
+
const statusCode = Number(status);
|
|
838
|
+
if (statusCode >= 200 && statusCode < 300) {
|
|
839
|
+
responseObject = refs.unwrap(responseOrRef);
|
|
840
|
+
}
|
|
841
|
+
});
|
|
842
|
+
if (!responseObject && operation.responses.default) {
|
|
828
843
|
responseObject = refs.unwrap(operation.responses.default);
|
|
829
|
-
} else {
|
|
830
|
-
Object.entries(operation.responses).map(([status, responseOrRef]) => {
|
|
831
|
-
const statusCode = Number(status);
|
|
832
|
-
if (statusCode >= 200 && statusCode < 300) {
|
|
833
|
-
responseObject = refs.unwrap(responseOrRef);
|
|
834
|
-
}
|
|
835
|
-
});
|
|
836
844
|
}
|
|
837
845
|
const content = responseObject?.content;
|
|
838
846
|
if (content) {
|
package/dist/index.d.cts
CHANGED
|
@@ -208,7 +208,7 @@ declare const mapOpenApiEndpoints: (doc: OpenAPIObject) => {
|
|
|
208
208
|
type MutationMethod = "post" | "put" | "patch" | "delete";
|
|
209
209
|
type Method = "get" | "head" | "options" | MutationMethod;
|
|
210
210
|
type EndpointParameters = {
|
|
211
|
-
body?: Box
|
|
211
|
+
body?: Box<BoxRef>;
|
|
212
212
|
query?: Box<BoxRef> | Record<string, AnyBox>;
|
|
213
213
|
header?: Box<BoxRef> | Record<string, AnyBox>;
|
|
214
214
|
path?: Box<BoxRef> | Record<string, AnyBox>;
|
package/dist/index.d.ts
CHANGED
|
@@ -208,7 +208,7 @@ declare const mapOpenApiEndpoints: (doc: OpenAPIObject) => {
|
|
|
208
208
|
type MutationMethod = "post" | "put" | "patch" | "delete";
|
|
209
209
|
type Method = "get" | "head" | "options" | MutationMethod;
|
|
210
210
|
type EndpointParameters = {
|
|
211
|
-
body?: Box
|
|
211
|
+
body?: Box<BoxRef>;
|
|
212
212
|
query?: Box<BoxRef> | Record<string, AnyBox>;
|
|
213
213
|
header?: Box<BoxRef> | Record<string, AnyBox>;
|
|
214
214
|
path?: Box<BoxRef> | Record<string, AnyBox>;
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
package/src/generator.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { capitalize, groupBy } from "pastable/server";
|
|
|
2
2
|
import { Box } from "./box";
|
|
3
3
|
import { prettify } from "./format";
|
|
4
4
|
import { mapOpenApiEndpoints } from "./map-openapi-endpoints";
|
|
5
|
-
import { AnyBox,
|
|
5
|
+
import { AnyBox, AnyBoxDef } from "./types";
|
|
6
6
|
import * as Codegen from "@sinclair/typebox-codegen";
|
|
7
7
|
import { match } from "ts-pattern";
|
|
8
8
|
import { type } from "arktype";
|
|
@@ -117,7 +117,7 @@ const generateSchemaList = ({ refs, runtime }: GeneratorContext) => {
|
|
|
117
117
|
);
|
|
118
118
|
};
|
|
119
119
|
|
|
120
|
-
const parameterObjectToString = (parameters: Box<
|
|
120
|
+
const parameterObjectToString = (parameters: Box<AnyBoxDef> | Record<string, AnyBox>) => {
|
|
121
121
|
if (parameters instanceof Box) return parameters.value;
|
|
122
122
|
|
|
123
123
|
let str = "{";
|
|
@@ -143,6 +143,20 @@ const generateEndpointSchemaList = (ctx: GeneratorContext) => {
|
|
|
143
143
|
${parameters.query ? `query: ${parameterObjectToString(parameters.query)},` : ""}
|
|
144
144
|
${parameters.path ? `path: ${parameterObjectToString(parameters.path)},` : ""}
|
|
145
145
|
${parameters.header ? `header: ${parameterObjectToString(parameters.header)},` : ""}
|
|
146
|
+
${
|
|
147
|
+
parameters.body
|
|
148
|
+
? `body: ${parameterObjectToString(
|
|
149
|
+
ctx.runtime === "none"
|
|
150
|
+
? parameters.body.recompute((box) => {
|
|
151
|
+
if (Box.isReference(box) && !box.params.generics) {
|
|
152
|
+
box.value = `Schemas.${box.value}`;
|
|
153
|
+
}
|
|
154
|
+
return box;
|
|
155
|
+
})
|
|
156
|
+
: parameters.body,
|
|
157
|
+
)},`
|
|
158
|
+
: ""
|
|
159
|
+
}
|
|
146
160
|
}`
|
|
147
161
|
: "parameters: never,"
|
|
148
162
|
}
|
|
@@ -35,7 +35,7 @@ export const mapOpenApiEndpoints = (doc: OpenAPIObject) => {
|
|
|
35
35
|
|
|
36
36
|
// Build a list of parameters by type + fill an object with all of them
|
|
37
37
|
const lists = { query: [] as ParameterObject[], path: [] as ParameterObject[], header: [] as ParameterObject[] };
|
|
38
|
-
const paramObjects = (operation.parameters ?? []).reduce(
|
|
38
|
+
const paramObjects = [...(pathItemObj.parameters ?? []), ...(operation.parameters ?? [])].reduce(
|
|
39
39
|
(acc, paramOrRef) => {
|
|
40
40
|
const param = refs.unwrap(paramOrRef);
|
|
41
41
|
const schema = openApiSchemaToTs({ schema: refs.unwrap(param.schema ?? {}), ctx });
|
|
@@ -72,6 +72,7 @@ export const mapOpenApiEndpoints = (doc: OpenAPIObject) => {
|
|
|
72
72
|
|
|
73
73
|
// Body
|
|
74
74
|
if (operation.requestBody) {
|
|
75
|
+
endpoint.meta.hasParameters = true;
|
|
75
76
|
const requestBody = refs.unwrap(operation.requestBody ?? {});
|
|
76
77
|
const content = requestBody.content;
|
|
77
78
|
const matchingMediaType = Object.keys(content).find(isAllowedParamMediaTypes);
|
|
@@ -102,17 +103,16 @@ export const mapOpenApiEndpoints = (doc: OpenAPIObject) => {
|
|
|
102
103
|
endpoint.parameters = Object.keys(params).length ? (params as any as EndpointParameters) : undefined;
|
|
103
104
|
}
|
|
104
105
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
// Match the first 2xx-3xx response found, or fallback to default one otherwise
|
|
107
|
+
let responseObject: ResponseObject | undefined;
|
|
108
|
+
Object.entries(operation.responses).map(([status, responseOrRef]) => {
|
|
109
|
+
const statusCode = Number(status);
|
|
110
|
+
if (statusCode >= 200 && statusCode < 300) {
|
|
111
|
+
responseObject = refs.unwrap<ResponseObject>(responseOrRef);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
if (!responseObject && operation.responses.default) {
|
|
108
115
|
responseObject = refs.unwrap(operation.responses.default);
|
|
109
|
-
} else {
|
|
110
|
-
Object.entries(operation.responses).map(([status, responseOrRef]) => {
|
|
111
|
-
const statusCode = Number(status);
|
|
112
|
-
if (statusCode >= 200 && statusCode < 300) {
|
|
113
|
-
responseObject = refs.unwrap<ResponseObject>(responseOrRef);
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
const content = responseObject?.content;
|
|
@@ -154,7 +154,7 @@ type MutationMethod = "post" | "put" | "patch" | "delete";
|
|
|
154
154
|
type Method = "get" | "head" | "options" | MutationMethod;
|
|
155
155
|
|
|
156
156
|
export type EndpointParameters = {
|
|
157
|
-
body?: Box
|
|
157
|
+
body?: Box<BoxRef>;
|
|
158
158
|
query?: Box<BoxRef> | Record<string, AnyBox>;
|
|
159
159
|
header?: Box<BoxRef> | Record<string, AnyBox>;
|
|
160
160
|
path?: Box<BoxRef> | Record<string, AnyBox>;
|