@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,118 @@
1
+ import { performance } from 'node:perf_hooks';
2
+ import ts from 'typescript';
3
+ import { stringToAST, tsModifiers, tsRecord, NEVER, STRING } from '../lib/ts.mjs';
4
+ import { debug, createRef } from '../lib/utils.mjs';
5
+ import transformComponentsObject from './components-object.mjs';
6
+ import makeApiPathsEnum from './paths-enum.mjs';
7
+ import transformPathsObject from './paths-object.mjs';
8
+ import transformSchemaObject from './schema-object.mjs';
9
+ import transformWebhooksObject from './webhooks-object.mjs';
10
+
11
+ const transformers = {
12
+ paths: transformPathsObject,
13
+ webhooks: transformWebhooksObject,
14
+ components: transformComponentsObject,
15
+ $defs: (node, options) => transformSchemaObject(node, { path: createRef(["$defs"]), ctx: options, schema: node })
16
+ };
17
+ const READ_WRITE_HELPER_TYPES = `
18
+ export type $Read<T> = { readonly $read: T };
19
+ export type $Write<T> = { readonly $write: T };
20
+ export type Readable<T> = T extends $Write<any> ? never : T extends $Read<infer U> ? Readable<U> : T extends (infer E)[] ? Readable<E>[] : T extends object ? { [K in keyof T as NonNullable<T[K]> extends $Write<any> ? never : K]: Readable<T[K]> } : T;
21
+ export type Writable<T> = T extends $Read<any> ? never : T extends $Write<infer U> ? Writable<U> : T extends (infer E)[] ? Writable<E>[] : T extends object ? { [K in keyof T as NonNullable<T[K]> extends $Read<any> ? never : K]: Writable<T[K]> } & { [K in keyof T as NonNullable<T[K]> extends $Read<any> ? K : never]?: never } : T;
22
+ `;
23
+ function transformSchema(schema, ctx) {
24
+ const type = [];
25
+ if (ctx.readWriteMarkers) {
26
+ const helperNodes = stringToAST(READ_WRITE_HELPER_TYPES);
27
+ type.push(...helperNodes);
28
+ }
29
+ if (ctx.inject) {
30
+ const injectNodes = stringToAST(ctx.inject);
31
+ type.push(...injectNodes);
32
+ }
33
+ for (const root of Object.keys(transformers)) {
34
+ const emptyObj = ts.factory.createTypeAliasDeclaration(
35
+ /* modifiers */
36
+ tsModifiers({ export: true }),
37
+ /* name */
38
+ root,
39
+ /* typeParameters */
40
+ void 0,
41
+ /* type */
42
+ tsRecord(STRING, NEVER)
43
+ );
44
+ if (schema[root] && typeof schema[root] === "object") {
45
+ const rootT = performance.now();
46
+ const subTypes = [].concat(transformers[root](schema[root], ctx));
47
+ for (const subType of subTypes) {
48
+ if (ts.isTypeNode(subType)) {
49
+ if (subType.members?.length) {
50
+ type.push(
51
+ ctx.exportType ? ts.factory.createTypeAliasDeclaration(
52
+ /* modifiers */
53
+ tsModifiers({ export: true }),
54
+ /* name */
55
+ root,
56
+ /* typeParameters */
57
+ void 0,
58
+ /* type */
59
+ subType
60
+ ) : ts.factory.createInterfaceDeclaration(
61
+ /* modifiers */
62
+ tsModifiers({ export: true }),
63
+ /* name */
64
+ root,
65
+ /* typeParameters */
66
+ void 0,
67
+ /* heritageClauses */
68
+ void 0,
69
+ /* members */
70
+ subType.members
71
+ )
72
+ );
73
+ debug(`${root} done`, "ts", performance.now() - rootT);
74
+ } else {
75
+ type.push(emptyObj);
76
+ debug(`${root} done (skipped)`, "ts", 0);
77
+ }
78
+ } else if (ts.isTypeAliasDeclaration(subType)) {
79
+ type.push(subType);
80
+ } else {
81
+ type.push(emptyObj);
82
+ debug(`${root} done (skipped)`, "ts", 0);
83
+ }
84
+ }
85
+ } else {
86
+ type.push(emptyObj);
87
+ debug(`${root} done (skipped)`, "ts", 0);
88
+ }
89
+ }
90
+ let hasOperations = false;
91
+ for (const injectedType of ctx.injectFooter) {
92
+ if (!hasOperations && injectedType?.name?.escapedText === "operations") {
93
+ hasOperations = true;
94
+ }
95
+ type.push(injectedType);
96
+ }
97
+ if (!hasOperations) {
98
+ type.push(
99
+ ts.factory.createTypeAliasDeclaration(
100
+ /* modifiers */
101
+ tsModifiers({ export: true }),
102
+ /* name */
103
+ "operations",
104
+ /* typeParameters */
105
+ void 0,
106
+ /* type */
107
+ tsRecord(STRING, NEVER)
108
+ )
109
+ );
110
+ }
111
+ if (ctx.makePathsEnum && schema.paths) {
112
+ type.push(makeApiPathsEnum(schema.paths));
113
+ }
114
+ return type;
115
+ }
116
+
117
+ export { transformSchema as default };
118
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../src/transform/index.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport ts, { type InterfaceDeclaration, type TypeLiteralNode } from \"typescript\";\nimport { NEVER, STRING, stringToAST, tsModifiers, tsRecord } from \"../lib/ts.js\";\nimport { createRef, debug } from \"../lib/utils.js\";\nimport type { GlobalContext, OpenAPI3 } from \"../types.js\";\nimport transformComponentsObject from \"./components-object.js\";\nimport makeApiPathsEnum from \"./paths-enum.js\";\nimport transformPathsObject from \"./paths-object.js\";\nimport transformSchemaObject from \"./schema-object.js\";\nimport transformWebhooksObject from \"./webhooks-object.js\";\n\ntype SchemaTransforms = keyof Pick<OpenAPI3, \"paths\" | \"webhooks\" | \"components\" | \"$defs\">;\n\nconst transformers: Record<SchemaTransforms, (node: any, options: GlobalContext) => ts.Node | ts.Node[]> = {\n paths: transformPathsObject,\n webhooks: transformWebhooksObject,\n components: transformComponentsObject,\n $defs: (node, options) => transformSchemaObject(node, { path: createRef([\"$defs\"]), ctx: options, schema: node }),\n};\n\n// Inline helper types for readOnly/writeOnly markers (when readWriteMarkers is enabled)\nconst READ_WRITE_HELPER_TYPES = `\nexport type $Read<T> = { readonly $read: T };\nexport type $Write<T> = { readonly $write: T };\nexport type Readable<T> = T extends $Write<any> ? never : T extends $Read<infer U> ? Readable<U> : T extends (infer E)[] ? Readable<E>[] : T extends object ? { [K in keyof T as NonNullable<T[K]> extends $Write<any> ? never : K]: Readable<T[K]> } : T;\nexport type Writable<T> = T extends $Read<any> ? never : T extends $Write<infer U> ? Writable<U> : T extends (infer E)[] ? Writable<E>[] : T extends object ? { [K in keyof T as NonNullable<T[K]> extends $Read<any> ? never : K]: Writable<T[K]> } & { [K in keyof T as NonNullable<T[K]> extends $Read<any> ? K : never]?: never } : T;\n`;\n\nexport default function transformSchema(schema: OpenAPI3, ctx: GlobalContext) {\n const type: ts.Node[] = [];\n\n // Add inline helper types for readOnly/writeOnly markers\n if (ctx.readWriteMarkers) {\n const helperNodes = stringToAST(READ_WRITE_HELPER_TYPES) as ts.Node[];\n type.push(...helperNodes);\n }\n\n if (ctx.inject) {\n const injectNodes = stringToAST(ctx.inject) as ts.Node[];\n type.push(...injectNodes);\n }\n\n for (const root of Object.keys(transformers) as SchemaTransforms[]) {\n const emptyObj = ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ root,\n /* typeParameters */ undefined,\n /* type */ tsRecord(STRING, NEVER),\n );\n\n if (schema[root] && typeof schema[root] === \"object\") {\n const rootT = performance.now();\n const subTypes = ([] as ts.Node[]).concat(transformers[root](schema[root], ctx));\n for (const subType of subTypes) {\n if (ts.isTypeNode(subType)) {\n if ((subType as ts.TypeLiteralNode).members?.length) {\n type.push(\n ctx.exportType\n ? ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ root,\n /* typeParameters */ undefined,\n /* type */ subType,\n )\n : ts.factory.createInterfaceDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ root,\n /* typeParameters */ undefined,\n /* heritageClauses */ undefined,\n /* members */ (subType as TypeLiteralNode).members,\n ),\n );\n debug(`${root} done`, \"ts\", performance.now() - rootT);\n } else {\n type.push(emptyObj);\n debug(`${root} done (skipped)`, \"ts\", 0);\n }\n } else if (ts.isTypeAliasDeclaration(subType)) {\n type.push(subType);\n } else {\n type.push(emptyObj);\n debug(`${root} done (skipped)`, \"ts\", 0);\n }\n }\n } else {\n type.push(emptyObj);\n debug(`${root} done (skipped)`, \"ts\", 0);\n }\n }\n\n // inject\n let hasOperations = false;\n for (const injectedType of ctx.injectFooter) {\n if (!hasOperations && (injectedType as InterfaceDeclaration)?.name?.escapedText === \"operations\") {\n hasOperations = true;\n }\n type.push(injectedType);\n }\n if (!hasOperations) {\n // if no operations created, inject empty operations type\n type.push(\n ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ \"operations\",\n /* typeParameters */ undefined,\n /* type */ tsRecord(STRING, NEVER),\n ),\n );\n }\n\n if (ctx.makePathsEnum && schema.paths) {\n type.push(makeApiPathsEnum(schema.paths));\n }\n\n return type;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAaA,MAAM,YAAA,GAAqG;AAAA,EACzG,KAAA,EAAO,oBAAA;AAAA,EACP,QAAA,EAAU,uBAAA;AAAA,EACV,UAAA,EAAY,yBAAA;AAAA,EACZ,OAAO,CAAC,IAAA,EAAM,OAAA,KAAY,qBAAA,CAAsB,MAAM,EAAE,IAAA,EAAM,SAAA,CAAU,CAAC,OAAO,CAAC,CAAA,EAAG,KAAK,OAAA,EAAS,MAAA,EAAQ,MAAM;AAClH,CAAA;AAGA,MAAM,uBAAA,GAA0B;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAOhC,SAAwB,eAAA,CAAgB,QAAkB,GAAA,EAAoB;AAC5E,EAAA,MAAM,OAAkB,EAAC;AAGzB,EAAA,IAAI,IAAI,gBAAA,EAAkB;AACxB,IAAA,MAAM,WAAA,GAAc,YAAY,uBAAuB,CAAA;AACvD,IAAA,IAAA,CAAK,IAAA,CAAK,GAAG,WAAW,CAAA;AAAA,EAC1B;AAEA,EAAA,IAAI,IAAI,MAAA,EAAQ;AACd,IAAA,MAAM,WAAA,GAAc,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA;AAC1C,IAAA,IAAA,CAAK,IAAA,CAAK,GAAG,WAAW,CAAA;AAAA,EAC1B;AAEA,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,EAAyB;AAClE,IAAA,MAAM,QAAA,GAAW,GAAG,OAAA,CAAQ,0BAAA;AAAA;AAAA,MACL,WAAA,CAAY,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA;AAAA,MAC5B,IAAA;AAAA;AAAA,MACA,MAAA;AAAA;AAAA,MACA,QAAA,CAAS,QAAQ,KAAK;AAAA,KAC7C;AAEA,IAAA,IAAI,OAAO,IAAI,CAAA,IAAK,OAAO,MAAA,CAAO,IAAI,MAAM,QAAA,EAAU;AACpD,MAAA,MAAM,KAAA,GAAQ,YAAY,GAAA,EAAI;AAC9B,MAAA,MAAM,QAAA,GAAY,EAAC,CAAgB,MAAA,CAAO,YAAA,CAAa,IAAI,CAAA,CAAE,MAAA,CAAO,IAAI,CAAA,EAAG,GAAG,CAAC,CAAA;AAC/E,MAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,QAAA,IAAI,EAAA,CAAG,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1B,UAAA,IAAK,OAAA,CAA+B,SAAS,MAAA,EAAQ;AACnD,YAAA,IAAA,CAAK,IAAA;AAAA,cACH,GAAA,CAAI,UAAA,GACA,EAAA,CAAG,OAAA,CAAQ,0BAAA;AAAA;AAAA,gBACY,WAAA,CAAY,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA;AAAA,gBAC5B,IAAA;AAAA;AAAA,gBACA,MAAA;AAAA;AAAA,gBACA;AAAA,eACvB,GACA,GAAG,OAAA,CAAQ,0BAAA;AAAA;AAAA,gBACa,WAAA,CAAY,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA;AAAA,gBAC5B,IAAA;AAAA;AAAA,gBACA,MAAA;AAAA;AAAA,gBACA,MAAA;AAAA;AAAA,gBACC,OAAA,CAA4B;AAAA;AACrD,aACN;AACA,YAAA,KAAA,CAAM,GAAG,IAAI,CAAA,KAAA,CAAA,EAAS,MAAM,WAAA,CAAY,GAAA,KAAQ,KAAK,CAAA;AAAA,UACvD,CAAA,MAAO;AACL,YAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAClB,YAAA,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,eAAA,CAAA,EAAmB,IAAA,EAAM,CAAC,CAAA;AAAA,UACzC;AAAA,QACF,CAAA,MAAA,IAAW,EAAA,CAAG,sBAAA,CAAuB,OAAO,CAAA,EAAG;AAC7C,UAAA,IAAA,CAAK,KAAK,OAAO,CAAA;AAAA,QACnB,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAClB,UAAA,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,eAAA,CAAA,EAAmB,IAAA,EAAM,CAAC,CAAA;AAAA,QACzC;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAClB,MAAA,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,eAAA,CAAA,EAAmB,IAAA,EAAM,CAAC,CAAA;AAAA,IACzC;AAAA,EACF;AAGA,EAAA,IAAI,aAAA,GAAgB,KAAA;AACpB,EAAA,KAAA,MAAW,YAAA,IAAgB,IAAI,YAAA,EAAc;AAC3C,IAAA,IAAI,CAAC,aAAA,IAAkB,YAAA,EAAuC,IAAA,EAAM,gBAAgB,YAAA,EAAc;AAChG,MAAA,aAAA,GAAgB,IAAA;AAAA,IAClB;AACA,IAAA,IAAA,CAAK,KAAK,YAAY,CAAA;AAAA,EACxB;AACA,EAAA,IAAI,CAAC,aAAA,EAAe;AAElB,IAAA,IAAA,CAAK,IAAA;AAAA,MACH,GAAG,OAAA,CAAQ,0BAAA;AAAA;AAAA,QACY,WAAA,CAAY,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA;AAAA,QAC5B,YAAA;AAAA;AAAA,QACA,MAAA;AAAA;AAAA,QACA,QAAA,CAAS,QAAQ,KAAK;AAAA;AAC7C,KACF;AAAA,EACF;AAEA,EAAA,IAAI,GAAA,CAAI,aAAA,IAAiB,MAAA,CAAO,KAAA,EAAO;AACrC,IAAA,IAAA,CAAK,IAAA,CAAK,gBAAA,CAAiB,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC1C;AAEA,EAAA,OAAO,IAAA;AACT;;;;"}
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ const ts = require('../lib/ts.cjs');
4
+ const schemaObject = require('./schema-object.cjs');
5
+
6
+ function transformMediaTypeObject(mediaTypeObject, options) {
7
+ if (!mediaTypeObject.schema) {
8
+ return ts.UNKNOWN;
9
+ }
10
+ return schemaObject.default(mediaTypeObject.schema, options);
11
+ }
12
+
13
+ module.exports = transformMediaTypeObject;
14
+ //# sourceMappingURL=media-type-object.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-type-object.cjs","sources":["../../src/transform/media-type-object.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { UNKNOWN } from \"../lib/ts.js\";\nimport type { MediaTypeObject, TransformNodeOptions } from \"../types.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform MediaTypeObject nodes (4.8.14)\n * @see https://spec.openapis.org/oas/v3.1.0#media-type-object\n */\nexport default function transformMediaTypeObject(\n mediaTypeObject: MediaTypeObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n if (!mediaTypeObject.schema) {\n return UNKNOWN;\n }\n return transformSchemaObject(mediaTypeObject.schema, options);\n}\n"],"names":["UNKNOWN","transformSchemaObject"],"mappings":";;;;;AASA,SAAwB,wBAAA,CACtB,iBACA,OAAA,EACa;AACb,EAAA,IAAI,CAAC,gBAAgB,MAAA,EAAQ;AAC3B,IAAA,OAAOA,UAAA;AAAA,EACT;AACA,EAAA,OAAOC,oBAAA,CAAsB,eAAA,CAAgB,MAAA,EAAQ,OAAO,CAAA;AAC9D;;;;"}
@@ -0,0 +1,12 @@
1
+ import { UNKNOWN } from '../lib/ts.mjs';
2
+ import transformSchemaObject from './schema-object.mjs';
3
+
4
+ function transformMediaTypeObject(mediaTypeObject, options) {
5
+ if (!mediaTypeObject.schema) {
6
+ return UNKNOWN;
7
+ }
8
+ return transformSchemaObject(mediaTypeObject.schema, options);
9
+ }
10
+
11
+ export { transformMediaTypeObject as default };
12
+ //# sourceMappingURL=media-type-object.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-type-object.mjs","sources":["../../src/transform/media-type-object.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { UNKNOWN } from \"../lib/ts.js\";\nimport type { MediaTypeObject, TransformNodeOptions } from \"../types.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform MediaTypeObject nodes (4.8.14)\n * @see https://spec.openapis.org/oas/v3.1.0#media-type-object\n */\nexport default function transformMediaTypeObject(\n mediaTypeObject: MediaTypeObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n if (!mediaTypeObject.schema) {\n return UNKNOWN;\n }\n return transformSchemaObject(mediaTypeObject.schema, options);\n}\n"],"names":[],"mappings":";;;AASA,SAAwB,wBAAA,CACtB,iBACA,OAAA,EACa;AACb,EAAA,IAAI,CAAC,gBAAgB,MAAA,EAAQ;AAC3B,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,qBAAA,CAAsB,eAAA,CAAgB,MAAA,EAAQ,OAAO,CAAA;AAC9D;;;;"}
@@ -0,0 +1,105 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const ts$1 = require('typescript');
6
+ const ts = require('../lib/ts.cjs');
7
+ const utils = require('../lib/utils.cjs');
8
+ const parametersArray = require('./parameters-array.cjs');
9
+ const requestBodyObject = require('./request-body-object.cjs');
10
+ const responsesObject = require('./responses-object.cjs');
11
+
12
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
13
+
14
+ const ts__default = /*#__PURE__*/_interopDefaultCompat(ts$1);
15
+
16
+ function transformOperationObject(operationObject, options) {
17
+ const type = [];
18
+ type.push(...parametersArray.transformParametersArray(operationObject.parameters ?? [], options));
19
+ if (operationObject.requestBody) {
20
+ const requestBodyType = "$ref" in operationObject.requestBody ? ts.oapiRef(operationObject.requestBody.$ref) : requestBodyObject(operationObject.requestBody, {
21
+ ...options,
22
+ path: utils.createRef([options.path, "requestBody"])
23
+ });
24
+ const required = !!("$ref" in operationObject.requestBody ? options.ctx.resolve(operationObject.requestBody.$ref) : operationObject.requestBody)?.required;
25
+ const property = ts__default.factory.createPropertySignature(
26
+ /* modifiers */
27
+ ts.tsModifiers({ readonly: options.ctx.immutable }),
28
+ /* name */
29
+ ts.tsPropertyIndex("requestBody"),
30
+ /* questionToken */
31
+ required ? void 0 : ts.QUESTION_TOKEN,
32
+ /* type */
33
+ requestBodyType
34
+ );
35
+ ts.addJSDocComment(operationObject.requestBody, property);
36
+ type.push(property);
37
+ } else {
38
+ type.push(
39
+ ts__default.factory.createPropertySignature(
40
+ /* modifiers */
41
+ ts.tsModifiers({ readonly: options.ctx.immutable }),
42
+ /* name */
43
+ ts.tsPropertyIndex("requestBody"),
44
+ /* questionToken */
45
+ ts.QUESTION_TOKEN,
46
+ /* type */
47
+ ts.NEVER
48
+ )
49
+ );
50
+ }
51
+ type.push(
52
+ ts__default.factory.createPropertySignature(
53
+ /* modifiers */
54
+ ts.tsModifiers({ readonly: options.ctx.immutable }),
55
+ /* name */
56
+ ts.tsPropertyIndex("responses"),
57
+ /* questionToken */
58
+ void 0,
59
+ /* type */
60
+ responsesObject(operationObject.responses ?? {}, options)
61
+ )
62
+ );
63
+ return type;
64
+ }
65
+ function injectOperationObject(operationId, operationObject, options) {
66
+ let operations = options.ctx.injectFooter.find(
67
+ (node) => ts__default.isInterfaceDeclaration(node) && node.name.text === "operations"
68
+ );
69
+ if (!operations) {
70
+ operations = ts__default.factory.createInterfaceDeclaration(
71
+ /* modifiers */
72
+ ts.tsModifiers({
73
+ export: true
74
+ // important: do NOT make this immutable
75
+ }),
76
+ /* name */
77
+ ts__default.factory.createIdentifier("operations"),
78
+ /* typeParameters */
79
+ void 0,
80
+ /* heritageClauses */
81
+ void 0,
82
+ /* members */
83
+ []
84
+ );
85
+ options.ctx.injectFooter.push(operations);
86
+ }
87
+ const type = transformOperationObject(operationObject, options);
88
+ operations.members = ts__default.factory.createNodeArray([
89
+ ...operations.members,
90
+ ts__default.factory.createPropertySignature(
91
+ /* modifiers */
92
+ ts.tsModifiers({ readonly: options.ctx.immutable }),
93
+ /* name */
94
+ ts.tsPropertyIndex(operationId),
95
+ /* questionToken */
96
+ void 0,
97
+ /* type */
98
+ ts__default.factory.createTypeLiteralNode(type)
99
+ )
100
+ ]);
101
+ }
102
+
103
+ exports.default = transformOperationObject;
104
+ exports.injectOperationObject = injectOperationObject;
105
+ //# sourceMappingURL=operation-object.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-object.cjs","sources":["../../src/transform/operation-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef } from \"../lib/utils.js\";\nimport type { OperationObject, RequestBodyObject, TransformNodeOptions } from \"../types.js\";\nimport { transformParametersArray } from \"./parameters-array.js\";\nimport transformRequestBodyObject from \"./request-body-object.js\";\nimport transformResponsesObject from \"./responses-object.js\";\n\n/**\n * Transform OperationObject nodes (4.8.10)\n * @see https://spec.openapis.org/oas/v3.1.0#operation-object\n */\nexport default function transformOperationObject(\n operationObject: OperationObject,\n options: TransformNodeOptions,\n): ts.TypeElement[] {\n const type: ts.TypeElement[] = [];\n\n // parameters\n type.push(...transformParametersArray(operationObject.parameters ?? [], options));\n\n // requestBody\n if (operationObject.requestBody) {\n const requestBodyType =\n \"$ref\" in operationObject.requestBody\n ? oapiRef(operationObject.requestBody.$ref)\n : transformRequestBodyObject(operationObject.requestBody, {\n ...options,\n path: createRef([options.path, \"requestBody\"]),\n });\n const required = !!(\n \"$ref\" in operationObject.requestBody\n ? options.ctx.resolve<RequestBodyObject>(operationObject.requestBody.$ref)\n : operationObject.requestBody\n )?.required;\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"requestBody\"),\n /* questionToken */ required ? undefined : QUESTION_TOKEN,\n /* type */ requestBodyType,\n );\n addJSDocComment(operationObject.requestBody, property);\n type.push(property);\n } else {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"requestBody\"),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n );\n }\n\n // responses\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"responses\"),\n /* questionToken */ undefined,\n /* type */ transformResponsesObject(operationObject.responses ?? {}, options),\n ),\n );\n\n return type;\n}\n\n/** inject an operation at the top level */\nexport function injectOperationObject(\n operationId: string,\n operationObject: OperationObject,\n options: TransformNodeOptions,\n): void {\n // find or create top-level operations interface\n let operations = options.ctx.injectFooter.find(\n (node) => ts.isInterfaceDeclaration(node) && (node as ts.InterfaceDeclaration).name.text === \"operations\",\n ) as unknown as ts.InterfaceDeclaration;\n if (!operations) {\n operations = ts.factory.createInterfaceDeclaration(\n /* modifiers */ tsModifiers({\n export: true,\n // important: do NOT make this immutable\n }),\n /* name */ ts.factory.createIdentifier(\"operations\"),\n /* typeParameters */ undefined,\n /* heritageClauses */ undefined,\n /* members */ [],\n );\n options.ctx.injectFooter.push(operations);\n }\n\n // inject operation object\n const type = transformOperationObject(operationObject, options);\n // @ts-expect-error this is OK to mutate\n operations.members = ts.factory.createNodeArray([\n ...operations.members,\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(operationId),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(type),\n ),\n ]);\n}\n"],"names":["transformParametersArray","oapiRef","transformRequestBodyObject","createRef","ts","tsModifiers","tsPropertyIndex","QUESTION_TOKEN","addJSDocComment","NEVER","transformResponsesObject"],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ import ts from 'typescript';
2
+ import { oapiRef, tsModifiers, tsPropertyIndex, QUESTION_TOKEN, addJSDocComment, NEVER } from '../lib/ts.mjs';
3
+ import { createRef } from '../lib/utils.mjs';
4
+ import { transformParametersArray } from './parameters-array.mjs';
5
+ import transformRequestBodyObject from './request-body-object.mjs';
6
+ import transformResponsesObject from './responses-object.mjs';
7
+
8
+ function transformOperationObject(operationObject, options) {
9
+ const type = [];
10
+ type.push(...transformParametersArray(operationObject.parameters ?? [], options));
11
+ if (operationObject.requestBody) {
12
+ const requestBodyType = "$ref" in operationObject.requestBody ? oapiRef(operationObject.requestBody.$ref) : transformRequestBodyObject(operationObject.requestBody, {
13
+ ...options,
14
+ path: createRef([options.path, "requestBody"])
15
+ });
16
+ const required = !!("$ref" in operationObject.requestBody ? options.ctx.resolve(operationObject.requestBody.$ref) : operationObject.requestBody)?.required;
17
+ const property = ts.factory.createPropertySignature(
18
+ /* modifiers */
19
+ tsModifiers({ readonly: options.ctx.immutable }),
20
+ /* name */
21
+ tsPropertyIndex("requestBody"),
22
+ /* questionToken */
23
+ required ? void 0 : QUESTION_TOKEN,
24
+ /* type */
25
+ requestBodyType
26
+ );
27
+ addJSDocComment(operationObject.requestBody, property);
28
+ type.push(property);
29
+ } else {
30
+ type.push(
31
+ ts.factory.createPropertySignature(
32
+ /* modifiers */
33
+ tsModifiers({ readonly: options.ctx.immutable }),
34
+ /* name */
35
+ tsPropertyIndex("requestBody"),
36
+ /* questionToken */
37
+ QUESTION_TOKEN,
38
+ /* type */
39
+ NEVER
40
+ )
41
+ );
42
+ }
43
+ type.push(
44
+ ts.factory.createPropertySignature(
45
+ /* modifiers */
46
+ tsModifiers({ readonly: options.ctx.immutable }),
47
+ /* name */
48
+ tsPropertyIndex("responses"),
49
+ /* questionToken */
50
+ void 0,
51
+ /* type */
52
+ transformResponsesObject(operationObject.responses ?? {}, options)
53
+ )
54
+ );
55
+ return type;
56
+ }
57
+ function injectOperationObject(operationId, operationObject, options) {
58
+ let operations = options.ctx.injectFooter.find(
59
+ (node) => ts.isInterfaceDeclaration(node) && node.name.text === "operations"
60
+ );
61
+ if (!operations) {
62
+ operations = ts.factory.createInterfaceDeclaration(
63
+ /* modifiers */
64
+ tsModifiers({
65
+ export: true
66
+ // important: do NOT make this immutable
67
+ }),
68
+ /* name */
69
+ ts.factory.createIdentifier("operations"),
70
+ /* typeParameters */
71
+ void 0,
72
+ /* heritageClauses */
73
+ void 0,
74
+ /* members */
75
+ []
76
+ );
77
+ options.ctx.injectFooter.push(operations);
78
+ }
79
+ const type = transformOperationObject(operationObject, options);
80
+ operations.members = ts.factory.createNodeArray([
81
+ ...operations.members,
82
+ ts.factory.createPropertySignature(
83
+ /* modifiers */
84
+ tsModifiers({ readonly: options.ctx.immutable }),
85
+ /* name */
86
+ tsPropertyIndex(operationId),
87
+ /* questionToken */
88
+ void 0,
89
+ /* type */
90
+ ts.factory.createTypeLiteralNode(type)
91
+ )
92
+ ]);
93
+ }
94
+
95
+ export { transformOperationObject as default, injectOperationObject };
96
+ //# sourceMappingURL=operation-object.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-object.mjs","sources":["../../src/transform/operation-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef } from \"../lib/utils.js\";\nimport type { OperationObject, RequestBodyObject, TransformNodeOptions } from \"../types.js\";\nimport { transformParametersArray } from \"./parameters-array.js\";\nimport transformRequestBodyObject from \"./request-body-object.js\";\nimport transformResponsesObject from \"./responses-object.js\";\n\n/**\n * Transform OperationObject nodes (4.8.10)\n * @see https://spec.openapis.org/oas/v3.1.0#operation-object\n */\nexport default function transformOperationObject(\n operationObject: OperationObject,\n options: TransformNodeOptions,\n): ts.TypeElement[] {\n const type: ts.TypeElement[] = [];\n\n // parameters\n type.push(...transformParametersArray(operationObject.parameters ?? [], options));\n\n // requestBody\n if (operationObject.requestBody) {\n const requestBodyType =\n \"$ref\" in operationObject.requestBody\n ? oapiRef(operationObject.requestBody.$ref)\n : transformRequestBodyObject(operationObject.requestBody, {\n ...options,\n path: createRef([options.path, \"requestBody\"]),\n });\n const required = !!(\n \"$ref\" in operationObject.requestBody\n ? options.ctx.resolve<RequestBodyObject>(operationObject.requestBody.$ref)\n : operationObject.requestBody\n )?.required;\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"requestBody\"),\n /* questionToken */ required ? undefined : QUESTION_TOKEN,\n /* type */ requestBodyType,\n );\n addJSDocComment(operationObject.requestBody, property);\n type.push(property);\n } else {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"requestBody\"),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n );\n }\n\n // responses\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"responses\"),\n /* questionToken */ undefined,\n /* type */ transformResponsesObject(operationObject.responses ?? {}, options),\n ),\n );\n\n return type;\n}\n\n/** inject an operation at the top level */\nexport function injectOperationObject(\n operationId: string,\n operationObject: OperationObject,\n options: TransformNodeOptions,\n): void {\n // find or create top-level operations interface\n let operations = options.ctx.injectFooter.find(\n (node) => ts.isInterfaceDeclaration(node) && (node as ts.InterfaceDeclaration).name.text === \"operations\",\n ) as unknown as ts.InterfaceDeclaration;\n if (!operations) {\n operations = ts.factory.createInterfaceDeclaration(\n /* modifiers */ tsModifiers({\n export: true,\n // important: do NOT make this immutable\n }),\n /* name */ ts.factory.createIdentifier(\"operations\"),\n /* typeParameters */ undefined,\n /* heritageClauses */ undefined,\n /* members */ [],\n );\n options.ctx.injectFooter.push(operations);\n }\n\n // inject operation object\n const type = transformOperationObject(operationObject, options);\n // @ts-expect-error this is OK to mutate\n operations.members = ts.factory.createNodeArray([\n ...operations.members,\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(operationId),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(type),\n ),\n ]);\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ const ts = require('../lib/ts.cjs');
4
+ const schemaObject = require('./schema-object.cjs');
5
+
6
+ function transformParameterObject(parameterObject, options) {
7
+ return parameterObject.schema ? schemaObject.default(parameterObject.schema, options) : ts.STRING;
8
+ }
9
+
10
+ module.exports = transformParameterObject;
11
+ //# sourceMappingURL=parameter-object.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameter-object.cjs","sources":["../../src/transform/parameter-object.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { STRING } from \"../lib/ts.js\";\nimport type { ParameterObject, TransformNodeOptions } from \"../types.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform ParameterObject nodes (4.8.12)\n * @see https://spec.openapis.org/oas/v3.1.0#parameter-object\n */\nexport default function transformParameterObject(\n parameterObject: ParameterObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n return parameterObject.schema ? transformSchemaObject(parameterObject.schema, options) : STRING; // assume a parameter is a string by default rather than \"unknown\"\n}\n"],"names":["transformSchemaObject","STRING"],"mappings":";;;;;AASA,SAAwB,wBAAA,CACtB,iBACA,OAAA,EACa;AACb,EAAA,OAAO,gBAAgB,MAAA,GAASA,oBAAA,CAAsB,eAAA,CAAgB,MAAA,EAAQ,OAAO,CAAA,GAAIC,SAAA;AAC3F;;;;"}
@@ -0,0 +1,9 @@
1
+ import { STRING } from '../lib/ts.mjs';
2
+ import transformSchemaObject from './schema-object.mjs';
3
+
4
+ function transformParameterObject(parameterObject, options) {
5
+ return parameterObject.schema ? transformSchemaObject(parameterObject.schema, options) : STRING;
6
+ }
7
+
8
+ export { transformParameterObject as default };
9
+ //# sourceMappingURL=parameter-object.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameter-object.mjs","sources":["../../src/transform/parameter-object.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { STRING } from \"../lib/ts.js\";\nimport type { ParameterObject, TransformNodeOptions } from \"../types.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform ParameterObject nodes (4.8.12)\n * @see https://spec.openapis.org/oas/v3.1.0#parameter-object\n */\nexport default function transformParameterObject(\n parameterObject: ParameterObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n return parameterObject.schema ? transformSchemaObject(parameterObject.schema, options) : STRING; // assume a parameter is a string by default rather than \"unknown\"\n}\n"],"names":[],"mappings":";;;AASA,SAAwB,wBAAA,CACtB,iBACA,OAAA,EACa;AACb,EAAA,OAAO,gBAAgB,MAAA,GAAS,qBAAA,CAAsB,eAAA,CAAgB,MAAA,EAAQ,OAAO,CAAA,GAAI,MAAA;AAC3F;;;;"}
@@ -0,0 +1,120 @@
1
+ 'use strict';
2
+
3
+ const ts$1 = require('typescript');
4
+ const ts = require('../lib/ts.cjs');
5
+ const utils = require('../lib/utils.cjs');
6
+ const parameterObject = require('./parameter-object.cjs');
7
+
8
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
9
+
10
+ const ts__default = /*#__PURE__*/_interopDefaultCompat(ts$1);
11
+
12
+ const PATH_PARAM_RE = /\{([^}]+)\}/g;
13
+ function createPathParameter(paramName) {
14
+ return {
15
+ name: paramName,
16
+ in: "path",
17
+ required: true,
18
+ schema: { type: "string" }
19
+ };
20
+ }
21
+ function extractPathParamsFromUrl(path) {
22
+ const params = [];
23
+ const matches = path.match(PATH_PARAM_RE);
24
+ if (matches) {
25
+ for (const match of matches) {
26
+ const paramName = match.slice(1, -1);
27
+ params.push(createPathParameter(paramName));
28
+ }
29
+ }
30
+ return params;
31
+ }
32
+ function transformParametersArray(parametersArray, options) {
33
+ const type = [];
34
+ const workingParameters = [...parametersArray];
35
+ if (options.ctx.generatePathParams && options.path) {
36
+ const pathString = Array.isArray(options.path) ? options.path[0] : options.path;
37
+ if (typeof pathString === "string") {
38
+ const pathParams = extractPathParamsFromUrl(pathString);
39
+ for (const param of pathParams) {
40
+ const exists = workingParameters.some((p) => {
41
+ const resolved = "$ref" in p ? options.ctx.resolve(p.$ref) : p;
42
+ return resolved?.in === "path" && resolved?.name === param.name;
43
+ });
44
+ if (!exists) {
45
+ workingParameters.push(param);
46
+ }
47
+ }
48
+ }
49
+ }
50
+ const paramType = [];
51
+ for (const paramIn of ["query", "header", "path", "cookie"]) {
52
+ const paramLocType = [];
53
+ let operationParameters = workingParameters.map((param) => ({
54
+ original: param,
55
+ resolved: "$ref" in param ? options.ctx.resolve(param.$ref) : param
56
+ }));
57
+ if (options.ctx.alphabetize) {
58
+ operationParameters.sort((a, b) => (a.resolved?.name ?? "").localeCompare(b.resolved?.name ?? ""));
59
+ }
60
+ if (options.ctx.excludeDeprecated) {
61
+ operationParameters = operationParameters.filter(
62
+ ({ resolved }) => !resolved?.deprecated && !resolved?.schema?.deprecated
63
+ );
64
+ }
65
+ for (const { original, resolved } of operationParameters) {
66
+ if (resolved?.in !== paramIn) {
67
+ continue;
68
+ }
69
+ let optional;
70
+ if (paramIn !== "path" && !resolved.required) {
71
+ optional = ts.QUESTION_TOKEN;
72
+ }
73
+ const subType = "$ref" in original ? ts.oapiRef(original.$ref, resolved) : parameterObject(resolved, {
74
+ ...options,
75
+ path: utils.createRef([options.path, "parameters", resolved.in, resolved.name])
76
+ });
77
+ const property = ts__default.factory.createPropertySignature(
78
+ /* modifiers */
79
+ ts.tsModifiers({ readonly: options.ctx.immutable }),
80
+ /* name */
81
+ ts.tsPropertyIndex(resolved?.name),
82
+ /* questionToken */
83
+ optional,
84
+ /* type */
85
+ subType
86
+ );
87
+ ts.addJSDocComment(resolved, property);
88
+ paramLocType.push(property);
89
+ }
90
+ const allOptional = paramLocType.every((node) => !!node.questionToken);
91
+ paramType.push(
92
+ ts__default.factory.createPropertySignature(
93
+ /* modifiers */
94
+ ts.tsModifiers({ readonly: options.ctx.immutable }),
95
+ /* name */
96
+ ts.tsPropertyIndex(paramIn),
97
+ /* questionToken */
98
+ allOptional || !paramLocType.length ? ts.QUESTION_TOKEN : void 0,
99
+ /* type */
100
+ paramLocType.length ? ts__default.factory.createTypeLiteralNode(paramLocType) : ts.NEVER
101
+ )
102
+ );
103
+ }
104
+ type.push(
105
+ ts__default.factory.createPropertySignature(
106
+ /* modifiers */
107
+ ts.tsModifiers({ readonly: options.ctx.immutable }),
108
+ /* name */
109
+ ts.tsPropertyIndex("parameters"),
110
+ /* questionToken */
111
+ !paramType.length ? ts.QUESTION_TOKEN : void 0,
112
+ /* type */
113
+ paramType.length ? ts__default.factory.createTypeLiteralNode(paramType) : ts.NEVER
114
+ )
115
+ );
116
+ return type;
117
+ }
118
+
119
+ exports.transformParametersArray = transformParametersArray;
120
+ //# sourceMappingURL=parameters-array.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameters-array.cjs","sources":["../../src/transform/parameters-array.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef } from \"../lib/utils.js\";\nimport type { ParameterObject, ReferenceObject, TransformNodeOptions } from \"../types.js\";\nimport transformParameterObject from \"./parameter-object.js\";\n\n// Regex to match path parameters in URL\nconst PATH_PARAM_RE = /\\{([^}]+)\\}/g;\n\n/**\n * Create a synthetic path parameter object from a parameter name\n */\nfunction createPathParameter(paramName: string): ParameterObject {\n return {\n name: paramName,\n in: \"path\",\n required: true,\n schema: { type: \"string\" },\n };\n}\n\n/**\n * Extract path parameters from a URL\n */\nfunction extractPathParamsFromUrl(path: string): ParameterObject[] {\n const params: ParameterObject[] = [];\n const matches = path.match(PATH_PARAM_RE);\n if (matches) {\n for (const match of matches) {\n const paramName = match.slice(1, -1);\n params.push(createPathParameter(paramName));\n }\n }\n return params;\n}\n\n/**\n * Synthetic type. Array of (ParameterObject | ReferenceObject)s found in OperationObject and PathItemObject.\n */\nexport function transformParametersArray(\n parametersArray: (ParameterObject | ReferenceObject)[],\n options: TransformNodeOptions,\n): ts.TypeElement[] {\n const type: ts.TypeElement[] = [];\n\n // Create a working copy of parameters array\n const workingParameters = [...parametersArray];\n\n // Generate path parameters if enabled\n if (options.ctx.generatePathParams && options.path) {\n const pathString = Array.isArray(options.path) ? options.path[0] : options.path;\n if (typeof pathString === \"string\") {\n const pathParams = extractPathParamsFromUrl(pathString);\n // Only add path parameters that aren't already defined\n for (const param of pathParams) {\n const exists = workingParameters.some((p) => {\n const resolved = \"$ref\" in p ? options.ctx.resolve<ParameterObject>(p.$ref) : p;\n return resolved?.in === \"path\" && resolved?.name === param.name;\n });\n if (!exists) {\n workingParameters.push(param);\n }\n }\n }\n }\n\n // parameters\n const paramType: ts.TypeElement[] = [];\n for (const paramIn of [\"query\", \"header\", \"path\", \"cookie\"] as ParameterObject[\"in\"][]) {\n const paramLocType: ts.TypeElement[] = [];\n let operationParameters = workingParameters.map((param) => ({\n original: param,\n resolved: \"$ref\" in param ? options.ctx.resolve<ParameterObject>(param.$ref) : param,\n }));\n\n // this is the only array type in the spec, so we have to one-off sort here\n if (options.ctx.alphabetize) {\n operationParameters.sort((a, b) => (a.resolved?.name ?? \"\").localeCompare(b.resolved?.name ?? \"\"));\n }\n if (options.ctx.excludeDeprecated) {\n operationParameters = operationParameters.filter(\n ({ resolved }) => !resolved?.deprecated && !resolved?.schema?.deprecated,\n );\n }\n for (const { original, resolved } of operationParameters) {\n if (resolved?.in !== paramIn) {\n continue;\n }\n let optional: ts.QuestionToken | undefined;\n if (paramIn !== \"path\" && !(resolved as ParameterObject).required) {\n optional = QUESTION_TOKEN;\n }\n const subType =\n \"$ref\" in original\n ? oapiRef(original.$ref, resolved)\n : transformParameterObject(resolved as ParameterObject, {\n ...options,\n path: createRef([options.path, \"parameters\", resolved.in, resolved.name]),\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(resolved?.name),\n /* questionToken */ optional,\n /* type */ subType,\n );\n addJSDocComment(resolved, property);\n paramLocType.push(property);\n }\n const allOptional = paramLocType.every((node) => !!node.questionToken);\n paramType.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(paramIn),\n /* questionToken */ allOptional || !paramLocType.length ? QUESTION_TOKEN : undefined,\n /* type */ paramLocType.length ? ts.factory.createTypeLiteralNode(paramLocType) : NEVER,\n ),\n );\n }\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"parameters\"),\n /* questionToken */ !paramType.length ? QUESTION_TOKEN : undefined,\n /* type */ paramType.length ? ts.factory.createTypeLiteralNode(paramType) : NEVER,\n ),\n );\n\n return type;\n}\n"],"names":["QUESTION_TOKEN","oapiRef","transformParameterObject","createRef","ts","tsModifiers","tsPropertyIndex","addJSDocComment","NEVER"],"mappings":"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"}