@kubb/plugin-oas 3.15.1 → 3.16.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 (37) hide show
  1. package/dist/{OperationGenerator-DyM5QANw.d.ts → OperationGenerator-C7NPZtOM.d.ts} +7 -21
  2. package/dist/{OperationGenerator-LFwakDt7.d.cts → OperationGenerator-DJE2XQ83.d.cts} +7 -21
  3. package/dist/{chunk-2LJ3ZJZP.cjs → chunk-CNSA5TDG.cjs} +34 -42
  4. package/dist/chunk-CNSA5TDG.cjs.map +1 -0
  5. package/dist/{chunk-JSR2ZSPP.js → chunk-ISOHAFCA.js} +33 -42
  6. package/dist/chunk-ISOHAFCA.js.map +1 -0
  7. package/dist/{chunk-S7ZYTJXL.js → chunk-MBX66JAT.js} +5 -5
  8. package/dist/chunk-MBX66JAT.js.map +1 -0
  9. package/dist/{chunk-S3UPJP7I.cjs → chunk-QJMOOF2A.cjs} +5 -5
  10. package/dist/chunk-QJMOOF2A.cjs.map +1 -0
  11. package/dist/components.d.cts +1 -1
  12. package/dist/components.d.ts +1 -1
  13. package/dist/generators.cjs +2 -2
  14. package/dist/generators.d.cts +1 -1
  15. package/dist/generators.d.ts +1 -1
  16. package/dist/generators.js +1 -1
  17. package/dist/hooks.cjs +2 -2
  18. package/dist/hooks.d.cts +1 -1
  19. package/dist/hooks.d.ts +1 -1
  20. package/dist/hooks.js +1 -1
  21. package/dist/index.cjs +126 -191
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.cts +2 -2
  24. package/dist/index.d.ts +2 -2
  25. package/dist/index.js +122 -188
  26. package/dist/index.js.map +1 -1
  27. package/dist/utils.d.cts +1 -1
  28. package/dist/utils.d.ts +1 -1
  29. package/package.json +8 -7
  30. package/src/OperationGenerator.ts +126 -223
  31. package/src/SchemaGenerator.ts +31 -45
  32. package/src/generator.tsx +4 -12
  33. package/src/types.ts +0 -1
  34. package/dist/chunk-2LJ3ZJZP.cjs.map +0 -1
  35. package/dist/chunk-JSR2ZSPP.js.map +0 -1
  36. package/dist/chunk-S3UPJP7I.cjs.map +0 -1
  37. package/dist/chunk-S7ZYTJXL.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -1,269 +1,204 @@
1
1
  'use strict';
2
2
 
3
3
  var chunk7RFNM43R_cjs = require('./chunk-7RFNM43R.cjs');
4
- var chunkS3UPJP7I_cjs = require('./chunk-S3UPJP7I.cjs');
4
+ var chunkQJMOOF2A_cjs = require('./chunk-QJMOOF2A.cjs');
5
5
  require('./chunk-DTD4ZUDA.cjs');
6
- var chunk2LJ3ZJZP_cjs = require('./chunk-2LJ3ZJZP.cjs');
6
+ var chunkCNSA5TDG_cjs = require('./chunk-CNSA5TDG.cjs');
7
7
  var chunkYWMMI3MO_cjs = require('./chunk-YWMMI3MO.cjs');
8
8
  require('./chunk-ZVFL3NXX.cjs');
9
9
  require('./chunk-Z2NREI4X.cjs');
10
10
  var core = require('@kubb/core');
11
11
  var transformers = require('@kubb/core/transformers');
12
+ var pLimit = require('p-limit');
12
13
  var path = require('path');
13
14
 
14
15
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
15
16
 
16
17
  var transformers__default = /*#__PURE__*/_interopDefault(transformers);
18
+ var pLimit__default = /*#__PURE__*/_interopDefault(pLimit);
17
19
  var path__default = /*#__PURE__*/_interopDefault(path);
18
20
 
19
21
  var OperationGenerator = class extends core.BaseGenerator {
20
- #operationsByMethod = {};
21
- get operationsByMethod() {
22
- return this.#operationsByMethod;
23
- }
24
- set operationsByMethod(paths) {
25
- this.#operationsByMethod = paths;
26
- }
27
22
  #getOptions(operation, method) {
28
23
  const { override = [] } = this.context;
24
+ const operationId = operation.getOperationId({ friendlyCase: true });
25
+ const contentType = operation.getContentType();
29
26
  return override.find(({ pattern, type }) => {
30
- if (type === "tag") {
31
- return !!operation.getTags().some((tag) => tag.name.match(pattern));
32
- }
33
- if (type === "operationId") {
34
- return !!operation.getOperationId({ friendlyCase: true }).match(pattern);
35
- }
36
- if (type === "path") {
37
- return !!operation.path.match(pattern);
27
+ switch (type) {
28
+ case "tag":
29
+ return operation.getTags().some((tag) => tag.name.match(pattern));
30
+ case "operationId":
31
+ return !!operationId.match(pattern);
32
+ case "path":
33
+ return !!operation.path.match(pattern);
34
+ case "method":
35
+ return !!method.match(pattern);
36
+ case "contentType":
37
+ return !!contentType.match(pattern);
38
+ default:
39
+ return false;
38
40
  }
39
- if (type === "method") {
40
- return !!method.match(pattern);
41
- }
42
- if (type === "contentType") {
43
- return !!operation.getContentType().match(pattern);
44
- }
45
- return false;
46
41
  })?.options || {};
47
42
  }
48
43
  #isExcluded(operation, method) {
49
44
  const { exclude = [] } = this.context;
50
- let matched = false;
51
- exclude.forEach(({ pattern, type }) => {
52
- if (type === "tag" && !matched) {
53
- matched = !!operation.getTags().some((tag) => tag.name.match(pattern));
54
- }
55
- if (type === "operationId" && !matched) {
56
- matched = !!operation.getOperationId({ friendlyCase: true }).match(pattern);
57
- }
58
- if (type === "path" && !matched) {
59
- matched = !!operation.path.match(pattern);
60
- }
61
- if (type === "method" && !matched) {
62
- matched = !!method.match(pattern);
63
- }
64
- if (type === "contentType" && !matched) {
65
- return !!operation.getContentType().match(pattern);
45
+ const operationId = operation.getOperationId({ friendlyCase: true });
46
+ const contentType = operation.getContentType();
47
+ return exclude.some(({ pattern, type }) => {
48
+ switch (type) {
49
+ case "tag":
50
+ return operation.getTags().some((tag) => tag.name.match(pattern));
51
+ case "operationId":
52
+ return !!operationId.match(pattern);
53
+ case "path":
54
+ return !!operation.path.match(pattern);
55
+ case "method":
56
+ return !!method.match(pattern);
57
+ case "contentType":
58
+ return !!contentType.match(pattern);
59
+ default:
60
+ return false;
66
61
  }
67
62
  });
68
- return matched;
69
63
  }
70
64
  #isIncluded(operation, method) {
71
65
  const { include = [] } = this.context;
72
- let matched = false;
73
- include.forEach(({ pattern, type }) => {
74
- if (type === "tag" && !matched) {
75
- matched = !!operation.getTags().some((tag) => tag.name.match(pattern));
76
- }
77
- if (type === "operationId" && !matched) {
78
- matched = !!operation.getOperationId({ friendlyCase: true }).match(pattern);
79
- }
80
- if (type === "path" && !matched) {
81
- matched = !!operation.path.match(pattern);
82
- }
83
- if (type === "method" && !matched) {
84
- matched = !!method.match(pattern);
85
- }
86
- if (type === "contentType" && !matched) {
87
- matched = !!operation.getContentType().match(pattern);
66
+ const operationId = operation.getOperationId({ friendlyCase: true });
67
+ const contentType = operation.getContentType();
68
+ return include.some(({ pattern, type }) => {
69
+ switch (type) {
70
+ case "tag":
71
+ return operation.getTags().some((tag) => tag.name.match(pattern));
72
+ case "operationId":
73
+ return !!operationId.match(pattern);
74
+ case "path":
75
+ return !!operation.path.match(pattern);
76
+ case "method":
77
+ return !!method.match(pattern);
78
+ case "contentType":
79
+ return !!contentType.match(pattern);
80
+ default:
81
+ return false;
88
82
  }
89
83
  });
90
- return matched;
91
84
  }
92
85
  getSchemas(operation, {
93
86
  resolveName = (name) => name
94
87
  } = {}) {
88
+ const operationId = operation.getOperationId({ friendlyCase: true });
89
+ const method = operation.method;
90
+ const operationName = transformers__default.default.pascalCase(operationId);
91
+ const resolveKeys = (schema) => schema?.properties ? Object.keys(schema.properties) : void 0;
95
92
  const pathParamsSchema = this.context.oas.getParametersSchema(operation, "path");
96
93
  const queryParamsSchema = this.context.oas.getParametersSchema(operation, "query");
97
94
  const headerParamsSchema = this.context.oas.getParametersSchema(operation, "header");
98
95
  const requestSchema = this.context.oas.getRequestSchema(operation);
99
96
  const statusCodes = operation.getResponseStatusCodes().map((statusCode) => {
100
- let name = statusCode;
101
- if (name === "default") {
102
- name = "error";
103
- }
97
+ const name = statusCode === "default" ? "error" : statusCode;
104
98
  const schema = this.context.oas.getResponseSchema(operation, statusCode);
99
+ const keys = resolveKeys(schema);
105
100
  return {
106
- name: resolveName(transformers__default.default.pascalCase(`${operation.getOperationId({ friendlyCase: true })} ${name}`)),
101
+ name: resolveName(transformers__default.default.pascalCase(`${operationId} ${name}`)),
107
102
  description: operation.getResponseByStatusCode(statusCode)?.description,
108
103
  schema,
109
104
  operation,
110
- operationName: transformers__default.default.pascalCase(`${operation.getOperationId({ friendlyCase: true })}`),
105
+ operationName,
111
106
  statusCode: name === "error" ? void 0 : Number(statusCode),
112
- keys: schema?.properties ? Object.keys(schema.properties) : void 0,
113
- keysToOmit: schema?.properties ? Object.keys(schema.properties).filter((key) => {
114
- const item = schema.properties?.[key];
115
- return item?.writeOnly;
116
- }) : void 0
107
+ keys,
108
+ keysToOmit: keys?.filter((key) => schema?.properties?.[key]?.writeOnly)
117
109
  };
118
110
  });
119
- const hasResponses = statusCodes.some((item) => item.statusCode?.toString().startsWith("2"));
111
+ const successful = statusCodes.filter((item) => item.statusCode?.toString().startsWith("2"));
112
+ const errors = statusCodes.filter((item) => item.statusCode?.toString().startsWith("4") || item.statusCode?.toString().startsWith("5"));
120
113
  return {
121
114
  pathParams: pathParamsSchema ? {
122
- name: resolveName(transformers__default.default.pascalCase(`${operation.getOperationId({ friendlyCase: true })} PathParams`)),
115
+ name: resolveName(transformers__default.default.pascalCase(`${operationId} PathParams`)),
123
116
  operation,
124
- operationName: transformers__default.default.pascalCase(`${operation.getOperationId({ friendlyCase: true })}`),
117
+ operationName,
125
118
  schema: pathParamsSchema,
126
- keys: pathParamsSchema.properties ? Object.keys(pathParamsSchema.properties) : void 0
119
+ keys: resolveKeys(pathParamsSchema)
127
120
  } : void 0,
128
121
  queryParams: queryParamsSchema ? {
129
- name: resolveName(transformers__default.default.pascalCase(`${operation.getOperationId({ friendlyCase: true })} QueryParams`)),
122
+ name: resolveName(transformers__default.default.pascalCase(`${operationId} QueryParams`)),
130
123
  operation,
131
- operationName: transformers__default.default.pascalCase(`${operation.getOperationId({ friendlyCase: true })}`),
124
+ operationName,
132
125
  schema: queryParamsSchema,
133
- keys: queryParamsSchema.properties ? Object.keys(queryParamsSchema.properties) : []
126
+ keys: resolveKeys(queryParamsSchema) || []
134
127
  } : void 0,
135
128
  headerParams: headerParamsSchema ? {
136
- name: resolveName(transformers__default.default.pascalCase(`${operation.getOperationId({ friendlyCase: true })} HeaderParams`)),
129
+ name: resolveName(transformers__default.default.pascalCase(`${operationId} HeaderParams`)),
137
130
  operation,
138
- operationName: transformers__default.default.pascalCase(`${operation.getOperationId({ friendlyCase: true })}`),
131
+ operationName,
139
132
  schema: headerParamsSchema,
140
- keys: headerParamsSchema.properties ? Object.keys(headerParamsSchema.properties) : void 0
133
+ keys: resolveKeys(headerParamsSchema)
141
134
  } : void 0,
142
135
  request: requestSchema ? {
143
- name: resolveName(
144
- transformers__default.default.pascalCase(`${operation.getOperationId({ friendlyCase: true })} ${operation.method === "get" ? "queryRequest" : "mutationRequest"}`)
145
- ),
136
+ name: resolveName(transformers__default.default.pascalCase(`${operationId} ${method === "get" ? "queryRequest" : "mutationRequest"}`)),
146
137
  description: operation.schema.requestBody?.description,
147
138
  operation,
148
- operationName: transformers__default.default.pascalCase(`${operation.getOperationId({ friendlyCase: true })}`),
139
+ operationName,
149
140
  schema: requestSchema,
150
- keys: requestSchema.properties ? Object.keys(requestSchema.properties) : void 0,
151
- keysToOmit: requestSchema.properties ? Object.keys(requestSchema.properties).filter((key) => {
152
- const item = requestSchema.properties?.[key];
153
- return item?.readOnly;
154
- }) : void 0
141
+ keys: resolveKeys(requestSchema),
142
+ keysToOmit: resolveKeys(requestSchema)?.filter((key) => requestSchema.properties?.[key]?.readOnly)
155
143
  } : void 0,
156
144
  response: {
157
- name: resolveName(
158
- transformers__default.default.pascalCase(`${operation.getOperationId({ friendlyCase: true })} ${operation.method === "get" ? "queryResponse" : "mutationResponse"}`)
159
- ),
145
+ name: resolveName(transformers__default.default.pascalCase(`${operationId} ${method === "get" ? "queryResponse" : "mutationResponse"}`)),
160
146
  operation,
161
- operationName: transformers__default.default.pascalCase(`${operation.getOperationId({ friendlyCase: true })}`),
147
+ operationName,
162
148
  schema: {
163
- oneOf: hasResponses ? statusCodes.filter((item) => item.statusCode?.toString().startsWith("2")).map((item) => {
164
- return {
165
- ...item.schema,
166
- $ref: resolveName(transformers__default.default.pascalCase(`${operation.getOperationId({ friendlyCase: true })} ${item.statusCode}`))
167
- };
168
- }) : void 0
149
+ oneOf: successful.map((item) => ({ ...item.schema, $ref: item.name })) || void 0
169
150
  }
170
151
  },
171
- responses: statusCodes.filter((item) => item.statusCode?.toString().startsWith("2")),
172
- errors: statusCodes.filter((item) => item.statusCode?.toString().startsWith("4") || item.statusCode?.toString().startsWith("5")),
152
+ responses: successful,
153
+ errors,
173
154
  statusCodes
174
155
  };
175
156
  }
176
- async build(...generators) {
157
+ async getOperations() {
177
158
  const { oas } = this.context;
178
159
  const paths = oas.getPaths();
179
- this.operationsByMethod = Object.entries(paths).reduce((acc, [path2, method]) => {
180
- const methods = Object.keys(method);
181
- methods.forEach((method2) => {
182
- const operation = oas.operation(path2, method2);
183
- if (operation && method2 === operation.method) {
184
- const isExcluded = this.#isExcluded(operation, method2);
185
- const isIncluded = this.context.include ? this.#isIncluded(operation, method2) : true;
186
- if (isIncluded && !isExcluded) {
187
- if (!acc[path2]) {
188
- acc[path2] = {};
189
- }
190
- acc[path2] = {
191
- ...acc[path2],
192
- [method2]: {
193
- operation,
194
- schemas: this.getSchemas(operation)
195
- }
196
- };
197
- }
198
- }
199
- });
200
- return acc;
201
- }, {});
202
- const promises = Object.keys(this.operationsByMethod).reduce((acc, path2) => {
203
- const methods = this.operationsByMethod[path2] ? Object.keys(this.operationsByMethod[path2]) : [];
204
- methods.forEach((method) => {
205
- const { operation } = this.operationsByMethod[path2]?.[method];
206
- const options = this.#getOptions(operation, method);
207
- const methodToCall = this[method];
208
- if (typeof methodToCall === "function") {
209
- const promiseMethod = methodToCall?.call(this, operation, {
210
- ...this.options,
211
- ...options
212
- });
213
- if (promiseMethod) {
214
- acc.push(promiseMethod);
215
- }
160
+ return Object.entries(paths).flatMap(
161
+ ([path2, methods]) => Object.entries(methods).map((values) => {
162
+ const [method, operation] = values;
163
+ if (this.#isExcluded(operation, method)) {
164
+ return null;
216
165
  }
217
- const promiseOperation = this.operation.call(this, operation, {
218
- ...this.options,
219
- ...options
220
- });
221
- if (promiseOperation) {
222
- acc.push(promiseOperation);
166
+ if (this.context.include && !this.#isIncluded(operation, method)) {
167
+ return null;
223
168
  }
224
- generators?.forEach((generator) => {
225
- const promise = generator.operation?.({
226
- instance: this,
227
- operation,
228
- options: {
229
- ...this.options,
230
- ...options
231
- }
232
- });
233
- if (promise) {
234
- acc.push(promise);
235
- }
236
- });
237
- });
238
- return acc;
239
- }, []);
240
- const operations = Object.values(this.operationsByMethod).map((item) => Object.values(item).map((item2) => item2.operation));
241
- promises.push(this.all(operations.flat().filter(Boolean), this.operationsByMethod));
242
- generators?.forEach((generator) => {
243
- const promise = generator.operations?.({
244
- instance: this,
245
- operations: operations.flat().filter(Boolean),
246
- operationsByMethod: this.operationsByMethod,
247
- options: this.options
248
- });
249
- if (promise) {
250
- promises.push(promise);
251
- }
252
- });
253
- const files = await Promise.all(promises);
254
- return files.flat().filter(Boolean);
255
- }
256
- /**
257
- * Operation
258
- */
259
- async operation(_operation, _options) {
260
- return [];
169
+ return operation ? { path: path2, method, operation } : null;
170
+ }).filter(Boolean)
171
+ );
261
172
  }
262
- /**
263
- * Combination of GET, POST, PATCH, PUT, DELETE
264
- */
265
- async all(_operations, _paths) {
266
- return [];
173
+ async build(...generators) {
174
+ const operations = await this.getOperations();
175
+ const generatorLimit = pLimit__default.default(1);
176
+ const operationLimit = pLimit__default.default(10);
177
+ const writeTasks = generators.map(
178
+ (generator) => generatorLimit(async () => {
179
+ const operationTasks = operations.map(
180
+ ({ operation, method }) => operationLimit(async () => {
181
+ const options = this.#getOptions(operation, method);
182
+ const result = await generator.operation?.({
183
+ instance: this,
184
+ operation,
185
+ options: { ...this.options, ...options }
186
+ });
187
+ return result ?? [];
188
+ })
189
+ );
190
+ const operationResults = await Promise.all(operationTasks);
191
+ const opResultsFlat = operationResults.flat();
192
+ const operationsResult = await generator.operations?.({
193
+ instance: this,
194
+ operations: operations.map((op) => op.operation),
195
+ options: this.options
196
+ });
197
+ return [...opResultsFlat, ...operationsResult ?? []];
198
+ })
199
+ );
200
+ const nestedResults = await Promise.all(writeTasks);
201
+ return nestedResults.flat();
267
202
  }
268
203
  };
269
204
  var pluginOasName = "plugin-oas";
@@ -274,7 +209,7 @@ var pluginOas = core.createPlugin((options) => {
274
209
  },
275
210
  group,
276
211
  validate = true,
277
- generators = [chunkS3UPJP7I_cjs.jsonGenerator],
212
+ generators = [chunkQJMOOF2A_cjs.jsonGenerator],
278
213
  serverIndex,
279
214
  contentType,
280
215
  oasClass,
@@ -353,7 +288,7 @@ var pluginOas = core.createPlugin((options) => {
353
288
  logger: this.logger
354
289
  });
355
290
  await oas2.dereference();
356
- const schemaGenerator = new chunk2LJ3ZJZP_cjs.SchemaGenerator(
291
+ const schemaGenerator = new chunkCNSA5TDG_cjs.SchemaGenerator(
357
292
  {
358
293
  unknownType: "unknown",
359
294
  emptySchemaType: "unknown",
@@ -392,15 +327,15 @@ var pluginOas = core.createPlugin((options) => {
392
327
 
393
328
  Object.defineProperty(exports, "createGenerator", {
394
329
  enumerable: true,
395
- get: function () { return chunkS3UPJP7I_cjs.createGenerator; }
330
+ get: function () { return chunkQJMOOF2A_cjs.createGenerator; }
396
331
  });
397
332
  Object.defineProperty(exports, "createReactGenerator", {
398
333
  enumerable: true,
399
- get: function () { return chunkS3UPJP7I_cjs.createReactGenerator; }
334
+ get: function () { return chunkQJMOOF2A_cjs.createReactGenerator; }
400
335
  });
401
336
  Object.defineProperty(exports, "SchemaGenerator", {
402
337
  enumerable: true,
403
- get: function () { return chunk2LJ3ZJZP_cjs.SchemaGenerator; }
338
+ get: function () { return chunkCNSA5TDG_cjs.SchemaGenerator; }
404
339
  });
405
340
  Object.defineProperty(exports, "isKeyword", {
406
341
  enumerable: true,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/OperationGenerator.ts","../src/plugin.ts"],"names":["BaseGenerator","transformers","path","method","item","createPlugin","jsonGenerator","parseFromConfig","options","FileManager","camelCase","oas","SchemaGenerator"],"mappings":"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","file":"index.cjs","sourcesContent":["import { BaseGenerator, type FileMetaBase } from '@kubb/core'\nimport transformers from '@kubb/core/transformers'\n\nimport type { PluginFactoryOptions, PluginManager } from '@kubb/core'\nimport type { KubbFile } from '@kubb/core/fs'\n\nimport type { Plugin } from '@kubb/core'\nimport type { HttpMethod, Oas, OasTypes, Operation, SchemaObject, contentType } from '@kubb/oas'\nimport type { Generator } from './generator.tsx'\nimport type { Exclude, Include, OperationSchemas, OperationsByMethod, Override } from './types.ts'\n\nexport type OperationMethodResult<TFileMeta extends FileMetaBase> = Promise<KubbFile.File<TFileMeta> | Array<KubbFile.File<TFileMeta>> | null>\n\ntype Context<TOptions, TPluginOptions extends PluginFactoryOptions> = {\n oas: Oas\n exclude: Array<Exclude> | undefined\n include: Array<Include> | undefined\n override: Array<Override<TOptions>> | undefined\n contentType: contentType | undefined\n pluginManager: PluginManager\n /**\n * Current plugin\n */\n plugin: Plugin<TPluginOptions>\n mode: KubbFile.Mode\n}\n\nexport class OperationGenerator<\n TPluginOptions extends PluginFactoryOptions = PluginFactoryOptions,\n TFileMeta extends FileMetaBase = FileMetaBase,\n> extends BaseGenerator<TPluginOptions['resolvedOptions'], Context<TPluginOptions['resolvedOptions'], TPluginOptions>> {\n #operationsByMethod: OperationsByMethod = {}\n get operationsByMethod(): OperationsByMethod {\n return this.#operationsByMethod\n }\n\n set operationsByMethod(paths: OperationsByMethod) {\n this.#operationsByMethod = paths\n }\n\n #getOptions(operation: Operation, method: HttpMethod): Partial<TPluginOptions['resolvedOptions']> {\n const { override = [] } = this.context\n\n return (\n override.find(({ pattern, type }) => {\n if (type === 'tag') {\n return !!operation.getTags().some((tag) => tag.name.match(pattern))\n }\n\n if (type === 'operationId') {\n return !!operation.getOperationId({ friendlyCase: true }).match(pattern)\n }\n\n if (type === 'path') {\n return !!operation.path.match(pattern)\n }\n\n if (type === 'method') {\n return !!method.match(pattern)\n }\n\n if (type === 'contentType') {\n return !!operation.getContentType().match(pattern)\n }\n\n return false\n })?.options || {}\n )\n }\n\n #isExcluded(operation: Operation, method: HttpMethod): boolean {\n const { exclude = [] } = this.context\n let matched = false\n\n exclude.forEach(({ pattern, type }) => {\n if (type === 'tag' && !matched) {\n matched = !!operation.getTags().some((tag) => tag.name.match(pattern))\n }\n\n if (type === 'operationId' && !matched) {\n matched = !!operation.getOperationId({ friendlyCase: true }).match(pattern)\n }\n\n if (type === 'path' && !matched) {\n matched = !!operation.path.match(pattern)\n }\n\n if (type === 'method' && !matched) {\n matched = !!method.match(pattern)\n }\n\n if (type === 'contentType' && !matched) {\n return !!operation.getContentType().match(pattern)\n }\n })\n\n return matched\n }\n\n #isIncluded(operation: Operation, method: HttpMethod): boolean {\n const { include = [] } = this.context\n let matched = false\n\n include.forEach(({ pattern, type }) => {\n if (type === 'tag' && !matched) {\n matched = !!operation.getTags().some((tag) => tag.name.match(pattern))\n }\n\n if (type === 'operationId' && !matched) {\n matched = !!operation.getOperationId({ friendlyCase: true }).match(pattern)\n }\n\n if (type === 'path' && !matched) {\n matched = !!operation.path.match(pattern)\n }\n\n if (type === 'method' && !matched) {\n matched = !!method.match(pattern)\n }\n\n if (type === 'contentType' && !matched) {\n matched = !!operation.getContentType().match(pattern)\n }\n })\n\n return matched\n }\n\n getSchemas(\n operation: Operation,\n {\n resolveName = (name) => name,\n }: {\n resolveName?: (name: string) => string\n } = {},\n ): OperationSchemas {\n const pathParamsSchema = this.context.oas.getParametersSchema(operation, 'path')\n const queryParamsSchema = this.context.oas.getParametersSchema(operation, 'query')\n const headerParamsSchema = this.context.oas.getParametersSchema(operation, 'header')\n const requestSchema = this.context.oas.getRequestSchema(operation)\n const statusCodes = operation.getResponseStatusCodes().map((statusCode) => {\n let name = statusCode\n if (name === 'default') {\n name = 'error'\n }\n\n const schema = this.context.oas.getResponseSchema(operation, statusCode)\n\n return {\n name: resolveName(transformers.pascalCase(`${operation.getOperationId({ friendlyCase: true })} ${name}`)),\n description: (operation.getResponseByStatusCode(statusCode) as OasTypes.ResponseObject)?.description,\n schema,\n operation,\n operationName: transformers.pascalCase(`${operation.getOperationId({ friendlyCase: true })}`),\n statusCode: name === 'error' ? undefined : Number(statusCode),\n keys: schema?.properties ? Object.keys(schema.properties) : undefined,\n keysToOmit: schema?.properties\n ? Object.keys(schema.properties).filter((key) => {\n const item = schema.properties?.[key] as OasTypes.SchemaObject\n return item?.writeOnly\n })\n : undefined,\n }\n })\n const hasResponses = statusCodes.some((item) => item.statusCode?.toString().startsWith('2'))\n\n return {\n pathParams: pathParamsSchema\n ? {\n name: resolveName(transformers.pascalCase(`${operation.getOperationId({ friendlyCase: true })} PathParams`)),\n operation,\n operationName: transformers.pascalCase(`${operation.getOperationId({ friendlyCase: true })}`),\n schema: pathParamsSchema,\n keys: pathParamsSchema.properties ? Object.keys(pathParamsSchema.properties) : undefined,\n }\n : undefined,\n queryParams: queryParamsSchema\n ? {\n name: resolveName(transformers.pascalCase(`${operation.getOperationId({ friendlyCase: true })} QueryParams`)),\n operation,\n operationName: transformers.pascalCase(`${operation.getOperationId({ friendlyCase: true })}`),\n schema: queryParamsSchema,\n keys: queryParamsSchema.properties ? Object.keys(queryParamsSchema.properties) : [],\n }\n : undefined,\n headerParams: headerParamsSchema\n ? {\n name: resolveName(transformers.pascalCase(`${operation.getOperationId({ friendlyCase: true })} HeaderParams`)),\n operation,\n operationName: transformers.pascalCase(`${operation.getOperationId({ friendlyCase: true })}`),\n schema: headerParamsSchema,\n keys: headerParamsSchema.properties ? Object.keys(headerParamsSchema.properties) : undefined,\n }\n : undefined,\n request: requestSchema\n ? {\n name: resolveName(\n transformers.pascalCase(`${operation.getOperationId({ friendlyCase: true })} ${operation.method === 'get' ? 'queryRequest' : 'mutationRequest'}`),\n ),\n description: (operation.schema.requestBody as OasTypes.RequestBodyObject)?.description,\n operation,\n operationName: transformers.pascalCase(`${operation.getOperationId({ friendlyCase: true })}`),\n schema: requestSchema,\n keys: requestSchema.properties ? Object.keys(requestSchema.properties) : undefined,\n keysToOmit: requestSchema.properties\n ? Object.keys(requestSchema.properties).filter((key) => {\n const item = requestSchema.properties?.[key] as OasTypes.SchemaObject\n\n return item?.readOnly\n })\n : undefined,\n }\n : undefined,\n response: {\n name: resolveName(\n transformers.pascalCase(`${operation.getOperationId({ friendlyCase: true })} ${operation.method === 'get' ? 'queryResponse' : 'mutationResponse'}`),\n ),\n operation,\n operationName: transformers.pascalCase(`${operation.getOperationId({ friendlyCase: true })}`),\n schema: {\n oneOf: hasResponses\n ? statusCodes\n .filter((item) => item.statusCode?.toString().startsWith('2'))\n .map((item) => {\n return {\n ...item.schema,\n $ref: resolveName(transformers.pascalCase(`${operation.getOperationId({ friendlyCase: true })} ${item.statusCode}`)),\n }\n })\n : undefined,\n } as SchemaObject,\n },\n responses: statusCodes.filter((item) => item.statusCode?.toString().startsWith('2')),\n errors: statusCodes.filter((item) => item.statusCode?.toString().startsWith('4') || item.statusCode?.toString().startsWith('5')),\n statusCodes,\n }\n }\n\n async build(...generators: Array<Generator<TPluginOptions>>): Promise<Array<KubbFile.File<TFileMeta>>> {\n const { oas } = this.context\n\n const paths = oas.getPaths()\n this.operationsByMethod = Object.entries(paths).reduce((acc, [path, method]) => {\n const methods = Object.keys(method) as HttpMethod[]\n\n methods.forEach((method) => {\n const operation = oas.operation(path, method)\n if (operation && method === operation.method) {\n const isExcluded = this.#isExcluded(operation, method)\n const isIncluded = this.context.include ? this.#isIncluded(operation, method) : true\n\n if (isIncluded && !isExcluded) {\n if (!acc[path]) {\n acc[path] = {} as OperationsByMethod['get']\n }\n acc[path] = {\n ...acc[path],\n [method]: {\n operation,\n schemas: this.getSchemas(operation),\n },\n } as OperationsByMethod['get']\n }\n }\n })\n\n return acc\n }, {} as OperationsByMethod)\n\n const promises = Object.keys(this.operationsByMethod).reduce((acc, path) => {\n const methods = this.operationsByMethod[path] ? (Object.keys(this.operationsByMethod[path]!) as HttpMethod[]) : []\n\n methods.forEach((method) => {\n const { operation } = this.operationsByMethod[path]?.[method]!\n const options = this.#getOptions(operation, method)\n\n const methodToCall = this[method as keyof typeof this] as any\n\n if (typeof methodToCall === 'function') {\n const promiseMethod = methodToCall?.call(this, operation, {\n ...this.options,\n ...options,\n })\n\n if (promiseMethod) {\n acc.push(promiseMethod)\n }\n }\n\n const promiseOperation = this.operation.call(this, operation, {\n ...this.options,\n ...options,\n })\n\n if (promiseOperation) {\n acc.push(promiseOperation)\n }\n\n generators?.forEach((generator) => {\n const promise = generator.operation?.({\n instance: this,\n operation,\n options: {\n ...this.options,\n ...options,\n },\n } as any) as Promise<Array<KubbFile.File<TFileMeta>>>\n\n if (promise) {\n acc.push(promise)\n }\n })\n })\n\n return acc\n }, [] as OperationMethodResult<TFileMeta>[])\n\n const operations = Object.values(this.operationsByMethod).map((item) => Object.values(item).map((item) => item.operation))\n\n promises.push(this.all(operations.flat().filter(Boolean), this.operationsByMethod))\n\n generators?.forEach((generator) => {\n const promise = generator.operations?.({\n instance: this,\n operations: operations.flat().filter(Boolean),\n operationsByMethod: this.operationsByMethod,\n options: this.options,\n } as any) as Promise<Array<KubbFile.File<TFileMeta>>>\n\n if (promise) {\n promises.push(promise)\n }\n })\n\n const files = await Promise.all(promises)\n\n // using .flat because operationGenerator[method] can return a array of files or just one file\n return files.flat().filter(Boolean)\n }\n\n /**\n * Operation\n */\n async operation(_operation: Operation, _options: TPluginOptions['resolvedOptions']): OperationMethodResult<TFileMeta> {\n return []\n }\n /**\n * Combination of GET, POST, PATCH, PUT, DELETE\n */\n async all(_operations: Operation[], _paths: OperationsByMethod): OperationMethodResult<TFileMeta> {\n return []\n }\n}\n","import path from 'node:path'\nimport type { Config } from '@kubb/core'\nimport { createPlugin, FileManager, type Group } from '@kubb/core'\nimport type { Logger } from '@kubb/core/logger'\nimport { camelCase } from '@kubb/core/transformers'\nimport type { Oas } from '@kubb/oas'\nimport { jsonGenerator } from './generators'\nimport { OperationGenerator } from './OperationGenerator.ts'\nimport { SchemaGenerator } from './SchemaGenerator.ts'\nimport type { PluginOas } from './types.ts'\nimport { parseFromConfig } from './utils/parseFromConfig.ts'\n\nexport const pluginOasName = 'plugin-oas' satisfies PluginOas['name']\n\nexport const pluginOas = createPlugin<PluginOas>((options) => {\n const {\n output = {\n path: 'schemas',\n },\n group,\n validate = true,\n generators = [jsonGenerator],\n serverIndex,\n contentType,\n oasClass,\n discriminator = 'strict',\n } = options\n let oas: Oas\n\n const getOas = async ({ config, logger }: { config: Config; logger: Logger }): Promise<Oas> => {\n // needs to be in a different variable or the catch here will not work(return of a promise instead)\n oas = await parseFromConfig(config, oasClass)\n\n oas.setOptions({\n contentType,\n discriminator,\n })\n\n try {\n if (validate) {\n await oas.valdiate()\n }\n } catch (e) {\n const error = e as Error\n\n logger.emit('warning', error?.message)\n }\n\n return oas\n }\n\n return {\n name: pluginOasName,\n options: {\n output,\n validate,\n discriminator,\n ...options,\n },\n context() {\n const { config, logger } = this\n\n return {\n getOas() {\n return getOas({ config, logger })\n },\n async getBaseURL() {\n const oasInstance = await this.getOas()\n if (serverIndex) {\n return oasInstance.api.servers?.at(serverIndex)?.url\n }\n\n return undefined\n },\n }\n },\n resolvePath(baseName, pathMode, options) {\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = pathMode ?? FileManager.getMode(path.resolve(root, output.path))\n\n if (mode === 'single') {\n /**\n * when output is a file then we will always append to the same file(output file), see fileManager.addOrAppend\n * Other plugins then need to call addOrAppend instead of just add from the fileManager class\n */\n return path.resolve(root, output.path)\n }\n\n if (group && (options?.group?.path || options?.group?.tag)) {\n const groupName: Group['name'] = group?.name\n ? group.name\n : (ctx) => {\n if (group?.type === 'path') {\n return `${ctx.group.split('/')[1]}`\n }\n return `${camelCase(ctx.group)}Controller`\n }\n\n return path.resolve(\n root,\n output.path,\n groupName({\n group: group.type === 'path' ? options.group.path! : options.group.tag!,\n }),\n baseName,\n )\n }\n\n return path.resolve(root, output.path, baseName)\n },\n async buildStart() {\n if (!output) {\n return\n }\n\n const oas = await getOas({\n config: this.config,\n logger: this.logger,\n })\n await oas.dereference()\n\n const schemaGenerator = new SchemaGenerator(\n {\n unknownType: 'unknown',\n emptySchemaType: 'unknown',\n dateType: 'date',\n transformers: {},\n ...this.plugin.options,\n },\n {\n oas,\n pluginManager: this.pluginManager,\n plugin: this.plugin,\n contentType,\n include: undefined,\n override: undefined,\n mode: 'split',\n output: output.path,\n },\n )\n\n const schemaFiles = await schemaGenerator.build(...generators)\n await this.addFile(...schemaFiles)\n\n const operationGenerator = new OperationGenerator(this.plugin.options, {\n oas,\n pluginManager: this.pluginManager,\n plugin: this.plugin,\n contentType,\n exclude: undefined,\n include: undefined,\n override: undefined,\n mode: 'split',\n })\n\n const operationFiles = await operationGenerator.build(...generators)\n\n await this.addFile(...operationFiles)\n },\n }\n})\n"]}
1
+ {"version":3,"sources":["../src/OperationGenerator.ts","../src/plugin.ts"],"names":["BaseGenerator","transformers","path","pLimit","createPlugin","jsonGenerator","parseFromConfig","options","FileManager","camelCase","oas","SchemaGenerator"],"mappings":"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","file":"index.cjs","sourcesContent":["import { BaseGenerator, type FileMetaBase } from '@kubb/core'\nimport transformers from '@kubb/core/transformers'\n\nimport type { PluginFactoryOptions, PluginManager } from '@kubb/core'\nimport type { KubbFile } from '@kubb/core/fs'\nimport type { Plugin } from '@kubb/core'\nimport type { HttpMethod, Oas, OasTypes, Operation, SchemaObject, contentType } from '@kubb/oas'\nimport type { Generator } from './generator.tsx'\nimport type { Exclude, Include, OperationSchemas, Override } from './types.ts'\nimport pLimit from 'p-limit'\n\nexport type OperationMethodResult<TFileMeta extends FileMetaBase> = Promise<KubbFile.File<TFileMeta> | Array<KubbFile.File<TFileMeta>> | null>\n\ntype Context<TOptions, TPluginOptions extends PluginFactoryOptions> = {\n oas: Oas\n exclude: Array<Exclude> | undefined\n include: Array<Include> | undefined\n override: Array<Override<TOptions>> | undefined\n contentType: contentType | undefined\n pluginManager: PluginManager\n /**\n * Current plugin\n */\n plugin: Plugin<TPluginOptions>\n mode: KubbFile.Mode\n}\n\nexport class OperationGenerator<\n TPluginOptions extends PluginFactoryOptions = PluginFactoryOptions,\n TFileMeta extends FileMetaBase = FileMetaBase,\n> extends BaseGenerator<TPluginOptions['resolvedOptions'], Context<TPluginOptions['resolvedOptions'], TPluginOptions>> {\n #getOptions(operation: Operation, method: HttpMethod): Partial<TPluginOptions['resolvedOptions']> {\n const { override = [] } = this.context\n const operationId = operation.getOperationId({ friendlyCase: true })\n const contentType = operation.getContentType()\n\n return (\n override.find(({ pattern, type }) => {\n switch (type) {\n case 'tag':\n return operation.getTags().some((tag) => tag.name.match(pattern))\n case 'operationId':\n return !!operationId.match(pattern)\n case 'path':\n return !!operation.path.match(pattern)\n case 'method':\n return !!method.match(pattern)\n case 'contentType':\n return !!contentType.match(pattern)\n default:\n return false\n }\n })?.options || {}\n )\n }\n\n #isExcluded(operation: Operation, method: HttpMethod): boolean {\n const { exclude = [] } = this.context\n const operationId = operation.getOperationId({ friendlyCase: true })\n const contentType = operation.getContentType()\n\n return exclude.some(({ pattern, type }) => {\n switch (type) {\n case 'tag':\n return operation.getTags().some((tag) => tag.name.match(pattern))\n case 'operationId':\n return !!operationId.match(pattern)\n case 'path':\n return !!operation.path.match(pattern)\n case 'method':\n return !!method.match(pattern)\n case 'contentType':\n return !!contentType.match(pattern)\n default:\n return false\n }\n })\n }\n\n #isIncluded(operation: Operation, method: HttpMethod): boolean {\n const { include = [] } = this.context\n const operationId = operation.getOperationId({ friendlyCase: true })\n const contentType = operation.getContentType()\n\n return include.some(({ pattern, type }) => {\n switch (type) {\n case 'tag':\n return operation.getTags().some((tag) => tag.name.match(pattern))\n case 'operationId':\n return !!operationId.match(pattern)\n case 'path':\n return !!operation.path.match(pattern)\n case 'method':\n return !!method.match(pattern)\n case 'contentType':\n return !!contentType.match(pattern)\n default:\n return false\n }\n })\n }\n\n getSchemas(\n operation: Operation,\n {\n resolveName = (name) => name,\n }: {\n resolveName?: (name: string) => string\n } = {},\n ): OperationSchemas {\n const operationId = operation.getOperationId({ friendlyCase: true })\n const method = operation.method\n const operationName = transformers.pascalCase(operationId)\n\n const resolveKeys = (schema?: SchemaObject) => (schema?.properties ? Object.keys(schema.properties) : undefined)\n\n const pathParamsSchema = this.context.oas.getParametersSchema(operation, 'path')\n const queryParamsSchema = this.context.oas.getParametersSchema(operation, 'query')\n const headerParamsSchema = this.context.oas.getParametersSchema(operation, 'header')\n const requestSchema = this.context.oas.getRequestSchema(operation)\n const statusCodes = operation.getResponseStatusCodes().map((statusCode) => {\n const name = statusCode === 'default' ? 'error' : statusCode\n const schema = this.context.oas.getResponseSchema(operation, statusCode)\n const keys = resolveKeys(schema)\n\n return {\n name: resolveName(transformers.pascalCase(`${operationId} ${name}`)),\n description: (operation.getResponseByStatusCode(statusCode) as OasTypes.ResponseObject)?.description,\n schema,\n operation,\n operationName,\n statusCode: name === 'error' ? undefined : Number(statusCode),\n keys,\n keysToOmit: keys?.filter((key) => (schema?.properties?.[key] as OasTypes.SchemaObject)?.writeOnly),\n }\n })\n\n const successful = statusCodes.filter((item) => item.statusCode?.toString().startsWith('2'))\n const errors = statusCodes.filter((item) => item.statusCode?.toString().startsWith('4') || item.statusCode?.toString().startsWith('5'))\n\n return {\n pathParams: pathParamsSchema\n ? {\n name: resolveName(transformers.pascalCase(`${operationId} PathParams`)),\n operation,\n operationName,\n schema: pathParamsSchema,\n keys: resolveKeys(pathParamsSchema),\n }\n : undefined,\n queryParams: queryParamsSchema\n ? {\n name: resolveName(transformers.pascalCase(`${operationId} QueryParams`)),\n operation,\n operationName,\n schema: queryParamsSchema,\n keys: resolveKeys(queryParamsSchema) || [],\n }\n : undefined,\n headerParams: headerParamsSchema\n ? {\n name: resolveName(transformers.pascalCase(`${operationId} HeaderParams`)),\n operation,\n operationName,\n schema: headerParamsSchema,\n keys: resolveKeys(headerParamsSchema),\n }\n : undefined,\n request: requestSchema\n ? {\n name: resolveName(transformers.pascalCase(`${operationId} ${method === 'get' ? 'queryRequest' : 'mutationRequest'}`)),\n description: (operation.schema.requestBody as OasTypes.RequestBodyObject)?.description,\n operation,\n operationName,\n schema: requestSchema,\n keys: resolveKeys(requestSchema),\n keysToOmit: resolveKeys(requestSchema)?.filter((key) => (requestSchema.properties?.[key] as OasTypes.SchemaObject)?.readOnly),\n }\n : undefined,\n response: {\n name: resolveName(transformers.pascalCase(`${operationId} ${method === 'get' ? 'queryResponse' : 'mutationResponse'}`)),\n operation,\n operationName,\n schema: {\n oneOf: successful.map((item) => ({ ...item.schema, $ref: item.name })) || undefined,\n } as SchemaObject,\n },\n responses: successful,\n errors,\n statusCodes,\n }\n }\n\n async getOperations(): Promise<Array<{ path: string; method: HttpMethod; operation: Operation }>> {\n const { oas } = this.context\n\n const paths = oas.getPaths()\n\n return Object.entries(paths).flatMap(([path, methods]) =>\n Object.entries(methods)\n .map((values) => {\n const [method, operation] = values as [HttpMethod, Operation]\n if (this.#isExcluded(operation, method)) {\n return null\n }\n\n if (this.context.include && !this.#isIncluded(operation, method)) {\n return null\n }\n\n return operation ? { path, method: method as HttpMethod, operation } : null\n })\n .filter(Boolean),\n )\n }\n\n async build(...generators: Array<Generator<TPluginOptions>>): Promise<Array<KubbFile.File<TFileMeta>>> {\n const operations = await this.getOperations()\n\n const generatorLimit = pLimit(1)\n const operationLimit = pLimit(10)\n\n const writeTasks = generators.map((generator) =>\n generatorLimit(async () => {\n const operationTasks = operations.map(({ operation, method }) =>\n operationLimit(async () => {\n const options = this.#getOptions(operation, method)\n\n const result = await generator.operation?.({\n instance: this,\n operation,\n options: { ...this.options, ...options },\n })\n\n return result ?? []\n }),\n )\n\n const operationResults = await Promise.all(operationTasks)\n const opResultsFlat = operationResults.flat()\n\n const operationsResult = await generator.operations?.({\n instance: this,\n operations: operations.map((op) => op.operation),\n options: this.options,\n })\n\n return [...opResultsFlat, ...(operationsResult ?? [])] as unknown as KubbFile.File<TFileMeta>\n }),\n )\n\n const nestedResults = await Promise.all(writeTasks)\n\n return nestedResults.flat()\n }\n}\n","import path from 'node:path'\nimport type { Config } from '@kubb/core'\nimport { createPlugin, FileManager, type Group } from '@kubb/core'\nimport type { Logger } from '@kubb/core/logger'\nimport { camelCase } from '@kubb/core/transformers'\nimport type { Oas } from '@kubb/oas'\nimport { jsonGenerator } from './generators'\nimport { OperationGenerator } from './OperationGenerator.ts'\nimport { SchemaGenerator } from './SchemaGenerator.ts'\nimport type { PluginOas } from './types.ts'\nimport { parseFromConfig } from './utils/parseFromConfig.ts'\n\nexport const pluginOasName = 'plugin-oas' satisfies PluginOas['name']\n\nexport const pluginOas = createPlugin<PluginOas>((options) => {\n const {\n output = {\n path: 'schemas',\n },\n group,\n validate = true,\n generators = [jsonGenerator],\n serverIndex,\n contentType,\n oasClass,\n discriminator = 'strict',\n } = options\n let oas: Oas\n\n const getOas = async ({ config, logger }: { config: Config; logger: Logger }): Promise<Oas> => {\n // needs to be in a different variable or the catch here will not work(return of a promise instead)\n oas = await parseFromConfig(config, oasClass)\n\n oas.setOptions({\n contentType,\n discriminator,\n })\n\n try {\n if (validate) {\n await oas.valdiate()\n }\n } catch (e) {\n const error = e as Error\n\n logger.emit('warning', error?.message)\n }\n\n return oas\n }\n\n return {\n name: pluginOasName,\n options: {\n output,\n validate,\n discriminator,\n ...options,\n },\n context() {\n const { config, logger } = this\n\n return {\n getOas() {\n return getOas({ config, logger })\n },\n async getBaseURL() {\n const oasInstance = await this.getOas()\n if (serverIndex) {\n return oasInstance.api.servers?.at(serverIndex)?.url\n }\n\n return undefined\n },\n }\n },\n resolvePath(baseName, pathMode, options) {\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = pathMode ?? FileManager.getMode(path.resolve(root, output.path))\n\n if (mode === 'single') {\n /**\n * when output is a file then we will always append to the same file(output file), see fileManager.addOrAppend\n * Other plugins then need to call addOrAppend instead of just add from the fileManager class\n */\n return path.resolve(root, output.path)\n }\n\n if (group && (options?.group?.path || options?.group?.tag)) {\n const groupName: Group['name'] = group?.name\n ? group.name\n : (ctx) => {\n if (group?.type === 'path') {\n return `${ctx.group.split('/')[1]}`\n }\n return `${camelCase(ctx.group)}Controller`\n }\n\n return path.resolve(\n root,\n output.path,\n groupName({\n group: group.type === 'path' ? options.group.path! : options.group.tag!,\n }),\n baseName,\n )\n }\n\n return path.resolve(root, output.path, baseName)\n },\n async buildStart() {\n if (!output) {\n return\n }\n\n const oas = await getOas({\n config: this.config,\n logger: this.logger,\n })\n await oas.dereference()\n\n const schemaGenerator = new SchemaGenerator(\n {\n unknownType: 'unknown',\n emptySchemaType: 'unknown',\n dateType: 'date',\n transformers: {},\n ...this.plugin.options,\n },\n {\n oas,\n pluginManager: this.pluginManager,\n plugin: this.plugin,\n contentType,\n include: undefined,\n override: undefined,\n mode: 'split',\n output: output.path,\n },\n )\n\n const schemaFiles = await schemaGenerator.build(...generators)\n await this.addFile(...schemaFiles)\n\n const operationGenerator = new OperationGenerator(this.plugin.options, {\n oas,\n pluginManager: this.pluginManager,\n plugin: this.plugin,\n contentType,\n exclude: undefined,\n include: undefined,\n override: undefined,\n mode: 'split',\n })\n\n const operationFiles = await operationGenerator.build(...generators)\n\n await this.addFile(...operationFiles)\n },\n }\n})\n"]}
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { O as Options, P as PluginOas } from './OperationGenerator-LFwakDt7.cjs';
2
- export { A as API, E as Exclude, h as Generator, i as GeneratorOptions, G as GetSchemaGeneratorOptions, I as Include, b as OperationGenerator, a as OperationMethodResult, n as OperationSchema, o as OperationSchemas, p as OperationsByMethod, q as Override, R as ReactGeneratorOptions, k as Ref, l as Refs, j as ResolvePathOptions, m as Resolver, e as SchemaGenerator, S as SchemaGeneratorBuildOptions, c as SchemaGeneratorOptions, d as SchemaMethodResult, f as createGenerator, g as createReactGenerator } from './OperationGenerator-LFwakDt7.cjs';
1
+ import { O as Options, P as PluginOas } from './OperationGenerator-DJE2XQ83.cjs';
2
+ export { A as API, E as Exclude, h as Generator, i as GeneratorOptions, G as GetSchemaGeneratorOptions, I as Include, b as OperationGenerator, a as OperationMethodResult, n as OperationSchema, o as OperationSchemas, p as Override, R as ReactGeneratorOptions, k as Ref, l as Refs, j as ResolvePathOptions, m as Resolver, e as SchemaGenerator, S as SchemaGeneratorBuildOptions, c as SchemaGeneratorOptions, d as SchemaMethodResult, f as createGenerator, g as createReactGenerator } from './OperationGenerator-DJE2XQ83.cjs';
3
3
  import * as _kubb_core from '@kubb/core';
4
4
  export { S as Schema, b as SchemaKeyword, c as SchemaKeywordBase, d as SchemaKeywordMapper, e as SchemaMapper, a as SchemaTree, i as isKeyword, s as schemaKeywords } from './SchemaMapper-B21ZmWag.cjs';
5
5
  import '@kubb/core/fs';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { O as Options, P as PluginOas } from './OperationGenerator-DyM5QANw.js';
2
- export { A as API, E as Exclude, h as Generator, i as GeneratorOptions, G as GetSchemaGeneratorOptions, I as Include, b as OperationGenerator, a as OperationMethodResult, n as OperationSchema, o as OperationSchemas, p as OperationsByMethod, q as Override, R as ReactGeneratorOptions, k as Ref, l as Refs, j as ResolvePathOptions, m as Resolver, e as SchemaGenerator, S as SchemaGeneratorBuildOptions, c as SchemaGeneratorOptions, d as SchemaMethodResult, f as createGenerator, g as createReactGenerator } from './OperationGenerator-DyM5QANw.js';
1
+ import { O as Options, P as PluginOas } from './OperationGenerator-C7NPZtOM.js';
2
+ export { A as API, E as Exclude, h as Generator, i as GeneratorOptions, G as GetSchemaGeneratorOptions, I as Include, b as OperationGenerator, a as OperationMethodResult, n as OperationSchema, o as OperationSchemas, p as Override, R as ReactGeneratorOptions, k as Ref, l as Refs, j as ResolvePathOptions, m as Resolver, e as SchemaGenerator, S as SchemaGeneratorBuildOptions, c as SchemaGeneratorOptions, d as SchemaMethodResult, f as createGenerator, g as createReactGenerator } from './OperationGenerator-C7NPZtOM.js';
3
3
  import * as _kubb_core from '@kubb/core';
4
4
  export { S as Schema, b as SchemaKeyword, c as SchemaKeywordBase, d as SchemaKeywordMapper, e as SchemaMapper, a as SchemaTree, i as isKeyword, s as schemaKeywords } from './SchemaMapper-B21ZmWag.js';
5
5
  import '@kubb/core/fs';