@depup/openapi-typescript 7.13.0-depup.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.
Files changed (106) hide show
  1. package/CHANGELOG.md +1162 -0
  2. package/CONTRIBUTING.md +149 -0
  3. package/LICENSE +21 -0
  4. package/README.md +32 -0
  5. package/bin/cli.js +297 -0
  6. package/changes.json +14 -0
  7. package/dist/index.cjs +152 -0
  8. package/dist/index.cjs.map +1 -0
  9. package/dist/index.d.cts +517 -0
  10. package/dist/index.d.mts +515 -0
  11. package/dist/index.d.ts +517 -0
  12. package/dist/index.mjs +85 -0
  13. package/dist/index.mjs.map +1 -0
  14. package/dist/lib/redoc.cjs +129 -0
  15. package/dist/lib/redoc.cjs.map +1 -0
  16. package/dist/lib/redoc.mjs +122 -0
  17. package/dist/lib/redoc.mjs.map +1 -0
  18. package/dist/lib/ts.cjs +470 -0
  19. package/dist/lib/ts.cjs.map +1 -0
  20. package/dist/lib/ts.mjs +431 -0
  21. package/dist/lib/ts.mjs.map +1 -0
  22. package/dist/lib/utils.cjs +295 -0
  23. package/dist/lib/utils.cjs.map +1 -0
  24. package/dist/lib/utils.mjs +278 -0
  25. package/dist/lib/utils.mjs.map +1 -0
  26. package/dist/transform/components-object.cjs +150 -0
  27. package/dist/transform/components-object.cjs.map +1 -0
  28. package/dist/transform/components-object.mjs +127 -0
  29. package/dist/transform/components-object.mjs.map +1 -0
  30. package/dist/transform/header-object.cjs +48 -0
  31. package/dist/transform/header-object.cjs.map +1 -0
  32. package/dist/transform/header-object.mjs +42 -0
  33. package/dist/transform/header-object.mjs.map +1 -0
  34. package/dist/transform/index.cjs +124 -0
  35. package/dist/transform/index.cjs.map +1 -0
  36. package/dist/transform/index.mjs +118 -0
  37. package/dist/transform/index.mjs.map +1 -0
  38. package/dist/transform/media-type-object.cjs +14 -0
  39. package/dist/transform/media-type-object.cjs.map +1 -0
  40. package/dist/transform/media-type-object.mjs +12 -0
  41. package/dist/transform/media-type-object.mjs.map +1 -0
  42. package/dist/transform/operation-object.cjs +105 -0
  43. package/dist/transform/operation-object.cjs.map +1 -0
  44. package/dist/transform/operation-object.mjs +96 -0
  45. package/dist/transform/operation-object.mjs.map +1 -0
  46. package/dist/transform/parameter-object.cjs +11 -0
  47. package/dist/transform/parameter-object.cjs.map +1 -0
  48. package/dist/transform/parameter-object.mjs +9 -0
  49. package/dist/transform/parameter-object.mjs.map +1 -0
  50. package/dist/transform/parameters-array.cjs +120 -0
  51. package/dist/transform/parameters-array.cjs.map +1 -0
  52. package/dist/transform/parameters-array.mjs +114 -0
  53. package/dist/transform/parameters-array.mjs.map +1 -0
  54. package/dist/transform/path-item-object.cjs +84 -0
  55. package/dist/transform/path-item-object.cjs.map +1 -0
  56. package/dist/transform/path-item-object.mjs +78 -0
  57. package/dist/transform/path-item-object.mjs.map +1 -0
  58. package/dist/transform/paths-enum.cjs +35 -0
  59. package/dist/transform/paths-enum.cjs.map +1 -0
  60. package/dist/transform/paths-enum.mjs +33 -0
  61. package/dist/transform/paths-enum.mjs.map +1 -0
  62. package/dist/transform/paths-object.cjs +134 -0
  63. package/dist/transform/paths-object.cjs.map +1 -0
  64. package/dist/transform/paths-object.mjs +128 -0
  65. package/dist/transform/paths-object.mjs.map +1 -0
  66. package/dist/transform/request-body-object.cjs +68 -0
  67. package/dist/transform/request-body-object.cjs.map +1 -0
  68. package/dist/transform/request-body-object.mjs +62 -0
  69. package/dist/transform/request-body-object.mjs.map +1 -0
  70. package/dist/transform/response-object.cjs +123 -0
  71. package/dist/transform/response-object.cjs.map +1 -0
  72. package/dist/transform/response-object.mjs +117 -0
  73. package/dist/transform/response-object.mjs.map +1 -0
  74. package/dist/transform/responses-object.cjs +36 -0
  75. package/dist/transform/responses-object.cjs.map +1 -0
  76. package/dist/transform/responses-object.mjs +30 -0
  77. package/dist/transform/responses-object.mjs.map +1 -0
  78. package/dist/transform/schema-object.cjs +502 -0
  79. package/dist/transform/schema-object.cjs.map +1 -0
  80. package/dist/transform/schema-object.mjs +493 -0
  81. package/dist/transform/schema-object.mjs.map +1 -0
  82. package/dist/transform/webhooks-object.cjs +37 -0
  83. package/dist/transform/webhooks-object.cjs.map +1 -0
  84. package/dist/transform/webhooks-object.mjs +31 -0
  85. package/dist/transform/webhooks-object.mjs.map +1 -0
  86. package/package.json +102 -0
  87. package/src/index.ts +108 -0
  88. package/src/lib/redoc.ts +164 -0
  89. package/src/lib/ts.ts +616 -0
  90. package/src/lib/utils.ts +394 -0
  91. package/src/transform/components-object.ts +161 -0
  92. package/src/transform/header-object.ts +45 -0
  93. package/src/transform/index.ts +116 -0
  94. package/src/transform/media-type-object.ts +18 -0
  95. package/src/transform/operation-object.ts +104 -0
  96. package/src/transform/parameter-object.ts +15 -0
  97. package/src/transform/parameters-array.ts +129 -0
  98. package/src/transform/path-item-object.ts +102 -0
  99. package/src/transform/paths-enum.ts +43 -0
  100. package/src/transform/paths-object.ts +134 -0
  101. package/src/transform/request-body-object.ts +59 -0
  102. package/src/transform/response-object.ts +112 -0
  103. package/src/transform/responses-object.ts +36 -0
  104. package/src/transform/schema-object.ts +737 -0
  105. package/src/transform/webhooks-object.ts +27 -0
  106. package/src/types.ts +735 -0
@@ -0,0 +1,59 @@
1
+ import ts from "typescript";
2
+ import { addJSDocComment, NEVER, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from "../lib/ts.js";
3
+ import { createRef, getEntries } from "../lib/utils.js";
4
+ import type { RequestBodyObject, TransformNodeOptions } from "../types.js";
5
+ import transformMediaTypeObject from "./media-type-object.js";
6
+ import transformSchemaObject from "./schema-object.js";
7
+
8
+ /**
9
+ * Transform RequestBodyObject nodes (4.8.13)
10
+ * @see https://spec.openapis.org/oas/v3.1.0#request-body-object
11
+ */
12
+ export default function transformRequestBodyObject(
13
+ requestBodyObject: RequestBodyObject,
14
+ options: TransformNodeOptions,
15
+ ): ts.TypeNode {
16
+ const type: ts.TypeElement[] = [];
17
+ for (const [contentType, mediaTypeObject] of getEntries(requestBodyObject.content ?? {}, options.ctx)) {
18
+ const nextPath = createRef([options.path, "content", contentType]);
19
+ const mediaType =
20
+ "$ref" in mediaTypeObject
21
+ ? transformSchemaObject(mediaTypeObject, {
22
+ ...options,
23
+ path: nextPath,
24
+ })
25
+ : transformMediaTypeObject(mediaTypeObject, {
26
+ ...options,
27
+ path: nextPath,
28
+ });
29
+ const property = ts.factory.createPropertySignature(
30
+ /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),
31
+ /* name */ tsPropertyIndex(contentType),
32
+ /* questionToken */ undefined,
33
+ /* type */ mediaType,
34
+ );
35
+ addJSDocComment(mediaTypeObject, property);
36
+ type.push(property);
37
+ }
38
+
39
+ return ts.factory.createTypeLiteralNode([
40
+ ts.factory.createPropertySignature(
41
+ /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),
42
+ /* name */ tsPropertyIndex("content"),
43
+ /* questionToken */ undefined,
44
+ /* type */ ts.factory.createTypeLiteralNode(
45
+ type.length
46
+ ? type
47
+ : // add `"*/*": never` if no media types are defined
48
+ [
49
+ ts.factory.createPropertySignature(
50
+ /* modifiers */ undefined,
51
+ /* name */ tsPropertyIndex("*/*"),
52
+ /* questionToken */ QUESTION_TOKEN,
53
+ /* type */ NEVER,
54
+ ),
55
+ ],
56
+ ),
57
+ ),
58
+ ]);
59
+ }
@@ -0,0 +1,112 @@
1
+ import ts from "typescript";
2
+ import {
3
+ addJSDocComment,
4
+ NEVER,
5
+ oapiRef,
6
+ QUESTION_TOKEN,
7
+ STRING,
8
+ tsModifiers,
9
+ tsPropertyIndex,
10
+ UNKNOWN,
11
+ } from "../lib/ts.js";
12
+ import { createRef, getEntries } from "../lib/utils.js";
13
+ import type { ResponseObject, TransformNodeOptions } from "../types.js";
14
+ import transformHeaderObject from "./header-object.js";
15
+ import transformMediaTypeObject from "./media-type-object.js";
16
+
17
+ /**
18
+ * Transform ResponseObject nodes (4.8.17)
19
+ * @see https://spec.openapis.org/oas/v3.1.0#response-object
20
+ */
21
+ export default function transformResponseObject(
22
+ responseObject: ResponseObject,
23
+ options: TransformNodeOptions,
24
+ ): ts.TypeNode {
25
+ const type: ts.TypeElement[] = [];
26
+
27
+ // headers
28
+ const headersObject: ts.TypeElement[] = [];
29
+ if (responseObject.headers) {
30
+ for (const [name, headerObject] of getEntries(responseObject.headers, options.ctx)) {
31
+ const optional = "$ref" in headerObject || headerObject.required ? undefined : QUESTION_TOKEN;
32
+ const subType =
33
+ "$ref" in headerObject
34
+ ? oapiRef(headerObject.$ref)
35
+ : transformHeaderObject(headerObject, {
36
+ ...options,
37
+ path: createRef([options.path, "headers", name]),
38
+ });
39
+ const property = ts.factory.createPropertySignature(
40
+ /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),
41
+ /* name */ tsPropertyIndex(name),
42
+ /* questionToken */ optional,
43
+ /* type */ subType,
44
+ );
45
+ addJSDocComment(headerObject, property);
46
+ headersObject.push(property);
47
+ }
48
+ }
49
+ // allow additional unknown headers
50
+ headersObject.push(
51
+ ts.factory.createIndexSignature(
52
+ /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),
53
+ /* parameters */ [
54
+ ts.factory.createParameterDeclaration(
55
+ /* modifiers */ undefined,
56
+ /* dotDotDotToken */ undefined,
57
+ /* name */ ts.factory.createIdentifier("name"),
58
+ /* questionToken */ undefined,
59
+ /* type */ STRING,
60
+ ),
61
+ ],
62
+ /* type */ UNKNOWN,
63
+ ),
64
+ );
65
+ type.push(
66
+ ts.factory.createPropertySignature(
67
+ /* modifiers */ undefined,
68
+ /* name */ tsPropertyIndex("headers"),
69
+ /* questionToken */ undefined,
70
+ /* type */ ts.factory.createTypeLiteralNode(headersObject),
71
+ ),
72
+ );
73
+
74
+ // content
75
+ const contentObject: ts.TypeElement[] = [];
76
+ if (responseObject.content) {
77
+ for (const [contentType, mediaTypeObject] of getEntries(responseObject.content ?? {}, options.ctx)) {
78
+ const property = ts.factory.createPropertySignature(
79
+ /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),
80
+ /* name */ tsPropertyIndex(contentType),
81
+ /* questionToken */ undefined,
82
+ /* type */ transformMediaTypeObject(mediaTypeObject, {
83
+ ...options,
84
+ path: createRef([options.path, "content", contentType]),
85
+ }),
86
+ );
87
+ addJSDocComment(mediaTypeObject, property);
88
+ contentObject.push(property);
89
+ }
90
+ }
91
+ if (contentObject.length) {
92
+ type.push(
93
+ ts.factory.createPropertySignature(
94
+ /* modifiers */ undefined,
95
+ /* name */ tsPropertyIndex("content"),
96
+ /* questionToken */ undefined,
97
+ /* type */ ts.factory.createTypeLiteralNode(contentObject),
98
+ ),
99
+ );
100
+ } else {
101
+ type.push(
102
+ ts.factory.createPropertySignature(
103
+ /* modifiers */ undefined,
104
+ /* name */ tsPropertyIndex("content"),
105
+ /* questionToken */ QUESTION_TOKEN,
106
+ /* type */ NEVER,
107
+ ),
108
+ );
109
+ }
110
+
111
+ return ts.factory.createTypeLiteralNode(type);
112
+ }
@@ -0,0 +1,36 @@
1
+ import ts from "typescript";
2
+ import { addJSDocComment, NEVER, oapiRef, tsModifiers, tsPropertyIndex } from "../lib/ts.js";
3
+ import { createRef, getEntries } from "../lib/utils.js";
4
+ import type { ResponsesObject, TransformNodeOptions } from "../types.js";
5
+ import transformResponseObject from "./response-object.js";
6
+
7
+ /**
8
+ * Transform ResponsesObject nodes (4.8.16)
9
+ * @see https://spec.openapis.org/oas/v3.1.0#responses-object
10
+ */
11
+ export default function transformResponsesObject(
12
+ responsesObject: ResponsesObject,
13
+ options: TransformNodeOptions,
14
+ ): ts.TypeNode {
15
+ const type: ts.TypeElement[] = [];
16
+
17
+ for (const [responseCode, responseObject] of getEntries(responsesObject, options.ctx)) {
18
+ const responseType =
19
+ "$ref" in responseObject
20
+ ? oapiRef(responseObject.$ref)
21
+ : transformResponseObject(responseObject, {
22
+ ...options,
23
+ path: createRef([options.path, "responses", responseCode]),
24
+ });
25
+ const property = ts.factory.createPropertySignature(
26
+ /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),
27
+ /* name */ tsPropertyIndex(responseCode),
28
+ /* questionToken */ undefined,
29
+ /* type */ responseType,
30
+ );
31
+ addJSDocComment(responseObject, property);
32
+ type.push(property);
33
+ }
34
+
35
+ return type.length ? ts.factory.createTypeLiteralNode(type) : NEVER;
36
+ }