@kubb/swagger-ts 1.0.0-beta.3 → 1.0.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +7 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +7 -26
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
- package/src/generators/OperationGenerator.ts +9 -32
package/dist/index.cjs
CHANGED
|
@@ -325,12 +325,11 @@ var TypeBuilder = class extends swagger.OasBuilder {
|
|
|
325
325
|
}
|
|
326
326
|
};
|
|
327
327
|
var OperationGenerator = class extends swagger.OperationGenerator {
|
|
328
|
-
async
|
|
328
|
+
async all() {
|
|
329
|
+
return null;
|
|
330
|
+
}
|
|
331
|
+
async get(operation, schemas) {
|
|
329
332
|
const { resolveId, directory, mode, nameResolver, oas } = this.options;
|
|
330
|
-
const operation = oas.operation(path, "get");
|
|
331
|
-
if (!operation.schema.operationId)
|
|
332
|
-
return null;
|
|
333
|
-
const schemas = this.getSchemas(operation);
|
|
334
333
|
const typeName = `${nameResolver(operation.getOperationId())}.ts`;
|
|
335
334
|
const typeFilePath = await resolveId(typeName, directory);
|
|
336
335
|
const fileResolver = async (name) => {
|
|
@@ -348,12 +347,8 @@ var OperationGenerator = class extends swagger.OperationGenerator {
|
|
|
348
347
|
}
|
|
349
348
|
return null;
|
|
350
349
|
}
|
|
351
|
-
async
|
|
350
|
+
async post(operation, schemas) {
|
|
352
351
|
const { resolveId, directory, mode, nameResolver, oas } = this.options;
|
|
353
|
-
const operation = oas.operation(path, "post");
|
|
354
|
-
if (!operation.schema.operationId)
|
|
355
|
-
return null;
|
|
356
|
-
const schemas = this.getSchemas(operation);
|
|
357
352
|
const typeName = `${nameResolver(operation.getOperationId())}.ts`;
|
|
358
353
|
const typeFilePath = await resolveId(typeName, directory);
|
|
359
354
|
const fileResolver = async (name) => {
|
|
@@ -371,12 +366,8 @@ var OperationGenerator = class extends swagger.OperationGenerator {
|
|
|
371
366
|
}
|
|
372
367
|
return null;
|
|
373
368
|
}
|
|
374
|
-
async
|
|
369
|
+
async put(operation, schemas) {
|
|
375
370
|
const { resolveId, directory, mode, nameResolver, oas } = this.options;
|
|
376
|
-
const operation = oas.operation(path, "put");
|
|
377
|
-
if (!operation.schema.operationId)
|
|
378
|
-
return null;
|
|
379
|
-
const schemas = this.getSchemas(operation);
|
|
380
371
|
const typeName = `${nameResolver(operation.getOperationId())}.ts`;
|
|
381
372
|
const typeFilePath = await resolveId(typeName, directory);
|
|
382
373
|
const fileResolver = async (name) => {
|
|
@@ -394,12 +385,8 @@ var OperationGenerator = class extends swagger.OperationGenerator {
|
|
|
394
385
|
}
|
|
395
386
|
return null;
|
|
396
387
|
}
|
|
397
|
-
async
|
|
388
|
+
async delete(operation, schemas) {
|
|
398
389
|
const { resolveId, directory, mode, nameResolver, oas } = this.options;
|
|
399
|
-
const operation = oas.operation(path, "delete");
|
|
400
|
-
if (!operation.schema.operationId)
|
|
401
|
-
return null;
|
|
402
|
-
const schemas = this.getSchemas(operation);
|
|
403
390
|
const typeName = `${nameResolver(operation.getOperationId())}.ts`;
|
|
404
391
|
const typeFilePath = await resolveId(typeName, directory);
|
|
405
392
|
const fileResolver = async (name) => {
|
|
@@ -417,12 +404,6 @@ var OperationGenerator = class extends swagger.OperationGenerator {
|
|
|
417
404
|
}
|
|
418
405
|
return null;
|
|
419
406
|
}
|
|
420
|
-
async build() {
|
|
421
|
-
return this.buildOperations({
|
|
422
|
-
fileManager: this.options.fileManager,
|
|
423
|
-
oas: this.options.oas
|
|
424
|
-
});
|
|
425
|
-
}
|
|
426
407
|
};
|
|
427
408
|
|
|
428
409
|
// src/plugin.ts
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugin.ts","../src/builders/TypeBuilder.ts","../src/generators/TypeGenerator.ts","../src/utils/keywordTypeNodes.ts","../src/generators/ImportsGenerator.ts","../src/generators/OperationGenerator.ts","../src/index.ts"],"names":["pascalCase","getRelativePath","ts","factory","node","uniq","Generator"],"mappings":";;;;;;;;;AAIA,OAAO,gBAAgB;AAEvB,SAAS,cAAAA,mBAAkB;AAE3B,SAAS,mBAAAC,kBAAiB,cAAc,aAAa,uBAAuB;AAC5E,SAAS,cAAc,yBAAyB;AAEhD,SAAS,oBAAoB;;;ACX7B,SAAS,kBAAkB;AAE3B,SAAS,kBAAkB;AAC3B,SAAS,aAAa;;;ACFtB,OAAOC,SAAQ;AACf,SAAS,YAAY,iBAAiB;AACtC,OAAO,UAAU;AAEjB,SAAS,eAAe,uBAAuB;AAE/C,SAAS,mBAAmB;AAC5B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;AChBP,OAAO,QAAQ;AAEf,IAAM,EAAE,QAAQ,IAAI;AAEb,IAAM,mBAAmB;AAAA,EAC9B,KAAK,QAAQ,sBAAsB,GAAG,WAAW,UAAU;AAAA,EAC3D,QAAQ,QAAQ,sBAAsB,GAAG,WAAW,aAAa;AAAA,EACjE,SAAS,QAAQ,sBAAsB,GAAG,WAAW,aAAa;AAAA,EAClE,QAAQ,QAAQ,sBAAsB,GAAG,WAAW,aAAa;AAAA,EACjE,QAAQ,QAAQ,sBAAsB,GAAG,WAAW,aAAa;AAAA,EACjE,SAAS,QAAQ,sBAAsB,GAAG,WAAW,cAAc;AAAA,EACnE,WAAW,QAAQ,sBAAsB,GAAG,WAAW,gBAAgB;AAAA,EACvE,MAAM,QAAQ,sBAAsB,QAAQ,YAAY,GAAG,WAAW,WAAW,CAAC;AACpF;;;ADOA,IAAM,EAAE,SAAAC,SAAQ,IAAID;AAcb,IAAM,iBAAN,cAA4B,gBAA4D;AAAA,EAa7F,YAA4B,KAAU,UAAmB,EAAE,YAAY,MAAM,cAAc,CAAC,SAAS,KAAK,GAAG;AAC3G,UAAM,OAAO;AADa;AAG1B,WAAO;AAAA,EACT;AAAA,EAbA,OAAa,CAAC;AAAA,EAEd,aAAwB,CAAC;AAAA,EAEzB,UAAqC,CAAC;AAAA;AAAA,EAGtC,iBAAyC,CAAC;AAAA,EAQ1C,MAAM,QAAgC,MAAc,aAAsB;AACxE,UAAM,QAAmB,CAAC;AAC1B,UAAM,OAAO,KAAK,kBAAkB,QAAQ,IAAI;AAEhD,QAAI,CAAC,MAAM;AACT,aAAO,KAAK;AAAA,IACd;AAEA,UAAM,OAAO,2BAA2B;AAAA,MACtC,WAAW,CAAC,SAAS,MAAM;AAAA,MAC3B;AAAA,MACA;AAAA,IACF,CAAC;AAED,QAAI,aAAa;AACf,YAAM;AAAA,QACJ,kBAAkB;AAAA,UAChB;AAAA,UACA,UAAU,CAAC,gBAAgB,aAAa;AAAA,QAC1C,CAAC;AAAA,MACH;AAAA,IACF,OAAO;AACL,YAAM,KAAK,IAAI;AAAA,IACjB;AAGA,UAAM,eAAe,MAAM;AAAA,MACzB,CAACE,UACC,CAAC,KAAK,WAAW;AAAA,QACf,CAAC,cAAwB,WAAuC,MAAM,gBAAiBA,OAAkC,MAAM;AAAA,MACjI;AAAA,IACJ;AAEA,WAAO,CAAC,GAAG,KAAK,YAAY,GAAG,YAAY;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,kBAAkB,QAAgC,MAAmC;AAC3F,UAAM,OAAO,KAAK,sBAAsB,QAAQ,IAAI;AAEpD,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,IACT;AAEA,QAAI,QAAQ;AACV,aAAO;AAAA,IACT;AAEA,WAAOD,SAAQ,oBAAoB,CAAC,MAAM,iBAAiB,IAAI,CAAC;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA,EAKQ,sBAAsB,YAAqC,UAAmB;AACpF,UAAM,QAAQ,YAAY,cAAc,CAAC;AACzC,UAAM,WAAW,YAAY;AAC7B,UAAM,uBAAuB,YAAY;AAEzC,UAAM,UAAwC,OAAO,KAAK,KAAK,EAAE,IAAI,CAAC,SAAS;AAC7E,YAAM,SAAS,MAAM,IAAI;AAEzB,YAAM,aAAa,YAAY,SAAS,SAAS,IAAI;AACrD,UAAI;AACJ,UAAI,OAAO,MAAM;AACf,eAAO,KAAK,kBAAkB,QAAQ,WAAW,GAAG,YAAY,QAAQ,EAAE,WAAW,GAAG,CAAC,CAAC;AAAA,MAC5F,OAAO;AACL,eAAO,KAAK,kBAAkB,QAAQ,WAAW,GAAG,YAAY,QAAQ,EAAE,WAAW,GAAG,CAAC,CAAC;AAAA,MAC5F;AAEA,UAAI,CAAC,MAAM;AACT,eAAO;AAAA,MACT;AAEA,UAAI,CAAC,YAAY;AACf,eAAOA,SAAQ,oBAAoB,CAAC,MAAM,iBAAiB,SAAS,CAAC;AAAA,MACvE;AACA,YAAM,oBAAoB,wBAAwB;AAAA,QAChD,eAAe,CAAC;AAAA,QAChB;AAAA,QACA;AAAA,MACF,CAAC;AACD,UAAI,KAAK,QAAQ,YAAY;AAC3B,eAAO,kBAAkB;AAAA,UACvB,MAAM;AAAA,UACN,UAAU;AAAA,YACR,OAAO,eAAe,gBAAgB,OAAO;AAAA,YAC7C,OAAO,QAAQ,SAAS,OAAO,OAAO,aAAa,KAAK,kBAAkB,OAAO,UAAU;AAAA,YAC3F,OAAO,WAAW,YAAY,OAAO;AAAA,UACvC;AAAA,QACF,CAAC;AAAA,MACH;AAEA,aAAO;AAAA,IACT,CAAC;AACD,QAAI,sBAAsB;AACxB,YAAM,OAAO,yBAAyB,OAAO,iBAAiB,MAAM,KAAK,kBAAkB,oBAA8C;AAEzI,UAAI,MAAM;AACR,gBAAQ,KAAK,qBAAqB,IAAI,CAAC;AAAA,MACzC;AAAA,IACF;AACA,WAAOA,SAAQ,sBAAsB,QAAQ,OAAO,OAAO,CAAqB;AAAA,EAClF;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,KAAgC;AAClD,UAAM,EAAE,KAAK,IAAI;AACjB,QAAI,MAAM,KAAK,KAAK,IAAI;AAExB,QAAI,CAAC,KAAK;AACR,YAAM,OAAO,WAAW,cAAc,KAAK,QAAQ,QAAQ,EAAE,GAAG,KAAK,cAAc,GAAG,EAAE,WAAW,GAAG,CAAC;AAGvG,YAAM,KAAK,KAAK,IAAI,IAAI;AAAA,QACtB,MAAM,KAAK,QAAQ,eAAe,IAAI,KAAK;AAAA,QAC3C,KAAK;AAAA,MACP;AAAA,IACF;AAEA,WAAOA,SAAQ,wBAAwB,IAAI,MAAM,MAAS;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,sBAAsB,QAAwE,MAAmC;AACvI,QAAI,CAAC,QAAQ;AACX,aAAO,iBAAiB;AAAA,IAC1B;AAEA,QAAI,YAAY,MAAM,GAAG;AACvB,aAAO,KAAK,YAAY,MAAM;AAAA,IAChC;AAEA,QAAI,OAAO,OAAO;AAEhB,YAAM,qBAAqB,EAAE,GAAG,QAAQ,OAAO,OAAU;AAEzD,aAAO,8BAA8B;AAAA,QACnC,OAAO;AAAA,UACL,KAAK,sBAAsB,oBAAoB,IAAI;AAAA,UACnDA,SAAQ;AAAA,YACNA,SAAQ;AAAA,cACN,OAAO,MACJ,IAAI,CAAC,SAAS;AACb,uBAAO,KAAK,sBAAsB,IAAI;AAAA,cACxC,CAAC,EACA,OAAO,OAAO;AAAA,YACnB;AAAA,UACF;AAAA,QACF,EAAE,OAAO,OAAO;AAAA,MAClB,CAAC;AAAA,IACH;AAEA,QAAI,OAAO,OAAO;AAAA,IAElB;AACA,QAAI,OAAO,OAAO;AAEhB,YAAM,qBAAqB,EAAE,GAAG,QAAQ,OAAO,OAAU;AAEzD,aAAO,8BAA8B;AAAA,QACnC,OAAO;AAAA,UACL,KAAK,sBAAsB,oBAAoB,IAAI;AAAA,UACnDA,SAAQ;AAAA,YACNA,SAAQ;AAAA,cACN,OAAO,MACJ,IAAI,CAAC,SAAS;AACb,uBAAO,KAAK,sBAAsB,IAAI;AAAA,cACxC,CAAC,EACA,OAAO,OAAO;AAAA,YACnB;AAAA,UACF;AAAA,QACF,EAAE,OAAO,OAAO;AAAA,MAClB,CAAC;AAAA,IACH;AAEA,QAAI,OAAO,QAAQ,MAAM;AACvB,YAAM,WAAW,cAAc,MAAM,eAAc,aAAa;AAChE,WAAK,WAAW;AAAA,QACd,GAAG,sBAAsB;AAAA,UACvB,MAAM,UAAU,UAAU,EAAE,WAAW,GAAG,CAAC;AAAA,UAC3C,UAAU,WAAW,UAAU,EAAE,WAAW,GAAG,CAAC;AAAA,UAChD,OAAO,KAAK,OAAO,IAAI;AAAA,QACzB,CAAC;AAAA,MACH;AACA,aAAOA,SAAQ,wBAAwB,WAAW,UAAU,EAAE,WAAW,GAAG,CAAC,GAAG,MAAS;AAAA,IAC3F;AAEA,QAAI,WAAW,QAAQ;AAErB,YAAM,OAAO,KAAK,kBAAkB,OAAO,OAAiC,IAAI;AAChF,UAAI,MAAM;AACR,eAAOA,SAAQ,oBAAoB,IAAI;AAAA,MACzC;AAAA,IACF;AAEA,QAAI,OAAO,cAAc,OAAO,sBAAsB;AAEpD,aAAO,KAAK,sBAAsB,QAAQ,IAAI;AAAA,IAChD;AAEA,QAAI,OAAO,MAAM;AACf,UAAI,OAAO,SAAS,UAAU;AAC5B,YAAI,CAAC,OAAO,wBAAwB,CAAC,OAAO,cAAc,OAAO,SAAS,UAAU;AAClF,iBAAO;AAAA,QACT;AAAA,MACF;AACA,UAAI,MAAM,QAAQ,OAAO,IAAI,GAAG;AAE9B,cAAM,CAAC,MAAM,QAAQ,IAAI,OAAO;AAEhC,eAAOA,SAAQ;AAAA,UACb;AAAA,YACE,KAAK;AAAA,cACH;AAAA,gBACE,GAAG;AAAA,gBACH;AAAA,cACF;AAAA,cACA;AAAA,YACF;AAAA,YACA,WAAWA,SAAQ,sBAAsBA,SAAQ,WAAW,CAAC,IAAI;AAAA,UACnE,EAAE,OAAO,OAAO;AAAA,QAClB;AAAA,MACF;AAEA,UAAI,OAAO,QAAQ,kBAAkB;AACnC,eAAO,iBAAiB,OAAO,IAAqC;AAAA,MACtE;AAAA,IACF;AAEA,QAAI,OAAO,WAAW,UAAU;AAC9B,aAAOA,SAAQ,wBAAwB,QAAQ,CAAC,CAAC;AAAA,IACnD;AAEA,WAAO,iBAAiB;AAAA,EAC1B;AACF;AAxQO,IAAM,gBAAN;AAAA;AAEL,cAFW,eAEG,iBAAwC,CAAC;;;AEpCzD,OAAOE,WAAU;AAEjB,SAAS,iBAAiB;AAE1B,SAAS,+BAA+B;AAQjC,IAAM,mBAAN,cAA+B,UAAmB;AAAA,EACvD,MAAM,MAAM,OAAkH;AAC5H,UAAM,OAAO,MAAM,OAAO,CAAC,KAAK,iBAAiB;AAC/C,aAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG,aAAa;AAAA,MAClB;AAAA,IACF,GAAG,CAAC,CAAS;AAEb,QAAI,OAAO,KAAK,IAAI,EAAE,WAAW,GAAG;AAClC,aAAO;AAAA,IACT;AAGA,UAAM,iBAAiBA,MAAK,OAAO,KAAK,IAAI,CAAC,EAC1C,OAAO,CAAC,SAAiB;AAExB,YAAM,EAAE,IAAI,IAAI,KAAK,IAAI;AACzB,aAAO,CAAC,MAAM;AAAA,QAAK,CAAC,SAClB,KAAK,QAAQ,KAAK,CAAC,SAAmB,KAAiC,MAAM,YAAY,SAAS,EAAE,YAAY,MAAM,IAAI,YAAY,CAAC;AAAA,MACzI;AAAA,IACF,CAAC,EACA,IAAI,OAAO,SAAiB;AAC3B,YAAM,EAAE,KAAK,IAAI,KAAK,IAAI;AAE1B,YAAM,OAAQ,MAAM,KAAK,QAAQ,eAAe,IAAI,KAAM,KAAK;AAG/D,UAAI,SAAS,QAAQ,SAAS,KAAK;AACjC,eAAO;AAAA,MACT;AAEA,aAAO,wBAAwB;AAAA,QAC7B,MAAM,CAAC,IAAI;AAAA,QACX,MAAM,KAAK,QAAQ,SAAS,KAAK;AAAA,MACnC,CAAC;AAAA,IACH,CAAC;AAEH,UAAM,QAAQ,MAAM,QAAQ,IAAI,cAAc;AAE9C,WAAO,MAAM,OAAO,OAAO;AAAA,EAC7B;AACF;;;AHnCA,SAAS,WAAW,GAAc,GAAc;AAC9C,MAAI,OAAO,KAAK,EAAE,IAAI,GAAG,SAAS,OAAO,KAAK,EAAE,IAAI,GAAG,QAAQ;AAC7D,WAAO;AAAA,EACT;AACA,MAAI,OAAO,KAAK,EAAE,IAAI,GAAG,SAAS,OAAO,KAAK,EAAE,IAAI,GAAG,QAAQ;AAC7D,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,IAAM,cAAN,cAA0B,WAAmB;AAAA,EAClD,UAAU,QAAgB;AACxB,SAAK,SAAS;AAEd,QAAI,KAAK,OAAO,cAAc;AAC5B,WAAK,OAAO,cAAc;AAAA,IAC5B;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,MAAM,MAAe;AACzB,UAAM,QAAkB,CAAC;AAEzB,UAAM,YAAY,KAAK,MACpB,OAAO,CAAC,QAAS,OAAO,IAAI,SAAS,OAAO,IAAK,EACjD,KAAK,UAAU,EACf,IAAI,CAAC,QAAQ;AACZ,YAAM,YAAY,IAAI,cAAc,KAAK,KAAK,EAAE,YAAY,KAAK,OAAO,YAAY,cAAc,KAAK,OAAO,aAAa,CAAC;AAC5H,YAAM,QAAQ,UAAU,MAAM,IAAI,QAAQ,KAAK,OAAO,eAAe,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,WAAW;AAE3G,aAAO;AAAA,QACL,MAAM,UAAU;AAAA,QAChB,MAAM,IAAI;AAAA,QACV,SAAS;AAAA,MACX;AAAA,IACF,CAAC,EACA,KAAK,UAAU;AAElB,cAAU,QAAQ,CAAC,SAAS;AAC1B,YAAM,KAAK,MAAM,KAAK,OAAO,CAAC;AAAA,IAChC,CAAC;AAED,QAAI,KAAK,OAAO,aAAa;AAC3B,YAAM,mBAAmB,IAAI,iBAAiB,EAAE,cAAc,KAAK,OAAO,aAAa,CAAC;AACxF,YAAM,cAAc,MAAM,iBAAiB,MAAM,SAAS;AAE1D,UAAI,aAAa;AACf,cAAM,QAAQ,MAAM,WAAW,CAAC;AAAA,MAClC;AAAA,IACF;AAEA,WAAO,MAAM,KAAK,IAAI;AAAA,EACxB;AACF;;;AIxEA,SAAS,uBAAuB;AAChC,SAAS,sBAAsBC,kBAAiB;AAgBzC,IAAM,qBAAN,cAAiCA,WAAmB;AAAA,EACzD,MAAM,OAAO,MAAoC;AAC/C,UAAM,EAAE,WAAW,WAAW,MAAM,cAAc,IAAI,IAAI,KAAK;AAE/D,UAAM,YAAY,IAAI,UAAU,MAAM,KAAK;AAE3C,QAAI,CAAC,UAAU,OAAO;AAAa,aAAO;AAE1C,UAAM,UAAU,KAAK,WAAW,SAAS;AACzC,UAAM,WAAW,GAAG,aAAa,UAAU,eAAe,CAAC;AAC3D,UAAM,eAAe,MAAM,UAAU,UAAU,SAAS;AAExD,UAAM,eAA6B,OAAO,SAAS;AAEjD,YAAM,WAAW,MAAM,UAAU,SAAS,SAAS,KAAK,UAAU,SAAS;AAE3E,YAAM,iBAAiB,MAAM,UAAU,GAAG,WAAW,SAAS;AAE9D,aAAO,gBAAgB,UAAU,cAAc;AAAA,IACjD;AAEA,UAAM,aAAa,MAAM,IAAI,YAAY,GAAG,EACzC,IAAI,QAAQ,UAAU,EACtB,IAAI,QAAQ,WAAW,EACvB,IAAI,QAAQ,QAAQ,EACpB,UAAU,EAAE,cAAc,YAAY,KAAK,CAAC,EAC5C,MAAM;AAET,QAAI,cAAc;AAChB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,QAAQ,MAAoC;AAChD,UAAM,EAAE,WAAW,WAAW,MAAM,cAAc,IAAI,IAAI,KAAK;AAE/D,UAAM,YAAY,IAAI,UAAU,MAAM,MAAM;AAE5C,QAAI,CAAC,UAAU,OAAO;AAAa,aAAO;AAE1C,UAAM,UAAU,KAAK,WAAW,SAAS;AACzC,UAAM,WAAW,GAAG,aAAa,UAAU,eAAe,CAAC;AAC3D,UAAM,eAAe,MAAM,UAAU,UAAU,SAAS;AAExD,UAAM,eAA6B,OAAO,SAAS;AAEjD,YAAM,WAAW,MAAM,UAAU,SAAS,SAAS,KAAK,UAAU,SAAS;AAE3E,YAAM,iBAAiB,MAAM,UAAU,GAAG,WAAW,SAAS;AAE9D,aAAO,gBAAgB,UAAU,cAAc;AAAA,IACjD;AAEA,UAAM,aAAa,MAAM,IAAI,YAAY,GAAG,EACzC,IAAI,QAAQ,UAAU,EACtB,IAAI,QAAQ,WAAW,EACvB,IAAI,QAAQ,OAAO,EACnB,IAAI,QAAQ,QAAQ,EACpB,UAAU,EAAE,cAAc,YAAY,KAAK,CAAC,EAC5C,MAAM;AAET,QAAI,cAAc;AAChB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,MAAoC;AAC/C,UAAM,EAAE,WAAW,WAAW,MAAM,cAAc,IAAI,IAAI,KAAK;AAE/D,UAAM,YAAY,IAAI,UAAU,MAAM,KAAK;AAE3C,QAAI,CAAC,UAAU,OAAO;AAAa,aAAO;AAE1C,UAAM,UAAU,KAAK,WAAW,SAAS;AACzC,UAAM,WAAW,GAAG,aAAa,UAAU,eAAe,CAAC;AAC3D,UAAM,eAAe,MAAM,UAAU,UAAU,SAAS;AAExD,UAAM,eAA6B,OAAO,SAAS;AAEjD,YAAM,WAAW,MAAM,UAAU,SAAS,SAAS,KAAK,UAAU,SAAS;AAE3E,YAAM,iBAAiB,MAAM,UAAU,GAAG,WAAW,SAAS;AAE9D,aAAO,gBAAgB,UAAU,cAAc;AAAA,IACjD;AAEA,UAAM,aAAa,MAAM,IAAI,YAAY,GAAG,EACzC,IAAI,QAAQ,UAAU,EACtB,IAAI,QAAQ,WAAW,EACvB,IAAI,QAAQ,OAAO,EACnB,IAAI,QAAQ,QAAQ,EACpB,UAAU,EAAE,cAAc,YAAY,KAAK,CAAC,EAC5C,MAAM;AAET,QAAI,cAAc;AAChB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,UAAU,MAAoC;AAClD,UAAM,EAAE,WAAW,WAAW,MAAM,cAAc,IAAI,IAAI,KAAK;AAE/D,UAAM,YAAY,IAAI,UAAU,MAAM,QAAQ;AAE9C,QAAI,CAAC,UAAU,OAAO;AAAa,aAAO;AAE1C,UAAM,UAAU,KAAK,WAAW,SAAS;AACzC,UAAM,WAAW,GAAG,aAAa,UAAU,eAAe,CAAC;AAC3D,UAAM,eAAe,MAAM,UAAU,UAAU,SAAS;AAExD,UAAM,eAA6B,OAAO,SAAS;AAEjD,YAAM,WAAW,MAAM,UAAU,SAAS,SAAS,KAAK,UAAU,SAAS;AAE3E,YAAM,iBAAiB,MAAM,UAAU,GAAG,WAAW,SAAS;AAE9D,aAAO,gBAAgB,UAAU,cAAc;AAAA,IACjD;AAEA,UAAM,aAAa,MAAM,IAAI,YAAY,GAAG,EACzC,IAAI,QAAQ,UAAU,EACtB,IAAI,QAAQ,OAAO,EACnB,IAAI,QAAQ,QAAQ,EACpB,UAAU,EAAE,cAAc,YAAY,KAAK,CAAC,EAC5C,MAAM;AAET,QAAI,cAAc;AAChB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,QAAQ;AACZ,WAAO,KAAK,gBAAgB;AAAA,MAC1B,aAAa,KAAK,QAAQ;AAAA,MAC1B,KAAK,KAAK,QAAQ;AAAA,IACpB,CAAC;AAAA,EACH;AACF;;;ALjKO,IAAM,aAAa;AAEnB,IAAM,eAAe,aAA4B,CAAC,YAAY;AACnE,QAAM,EAAE,SAAS,SAAS,IAAI;AAC9B,MAAI;AAEJ,QAAM,MAAW;AAAA,IACf,UAAU,UAAU,WAAW;AAC7B,UAAI,CAAC,WAAW;AACd,eAAO;AAAA,MACT;AAEA,YAAM,OAAO,YAAY,WAAW,QAAQ,WAAW,MAAM,CAAC;AAE9D,UAAI,SAAS,QAAQ;AAKnB,eAAO,WAAW,QAAQ,WAAW,MAAM;AAAA,MAC7C;AAEA,aAAO,WAAW,QAAQ,WAAW,QAAQ,QAAQ;AAAA,IACvD;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA,SAAS,SAAS;AAChB,YAAM,QAAQ,gBAAgB,SAAS,CAAC,iBAAiB,CAAC;AAC1D,UAAI,OAAO;AACT,qBAAa,QAAQ,KAAK,CAAC,WAAW,OAAO,SAAS,iBAAiB,GAAG;AAAA,MAC5E;AAEA,aAAO;AAAA,IACT;AAAA,IACA,UAAU,UAAU,WAAW;AAC7B,aAAO,IAAI,UAAU,UAAU,SAAS;AAAA,IAC1C;AAAA,IACA,MAAM,UAAU,QAAQ,MAAM;AAC5B,UAAI,CAAC,KAAK,SAAS,KAAK,KAAK,CAAC,QAAQ;AACpC;AAAA,MACF;AAEA,YAAM,KAAK,YAAY,MAAM,QAAQ,IAAI;AAAA,IAC3C;AAAA,IACA,MAAM,aAAa;AACjB,YAAM,MAAM,MAAM,WAAW,OAAO,KAAK,MAAM;AAE/C,YAAM,UAAU,IAAI,cAAc,EAAE,YAAY,WAAW,CAAC;AAC5D,YAAM,YAAY,WAAW,QAAQ,KAAK,OAAO,MAAM,KAAK,OAAO,OAAO,IAAI;AAC9E,YAAM,OAAO,YAAY,WAAW,QAAQ,WAAW,MAAM,CAAC;AAE9D,YAAM,eAAe,CAAC,SAAiBN,YAAW,MAAM,EAAE,WAAW,GAAG,CAAC;AAEzE,UAAI,SAAS,aAAa;AACxB,cAAM,UAAU,MAAM,IAAI,YAAY,GAAG,EAAE,UAAU;AAAA,UACnD;AAAA,UACA,cAAc,OAAO,SAAS;AAC5B,kBAAM,iBAAiB,MAAM,KAAK,UAAU;AAAA,cAC1C,UAAU,GAAG;AAAA,cACb;AAAA,cACA;AAAA,YACF,CAAC;AAED,kBAAM,OAAO,MAAM,KAAK,UAAU,EAAE,UAAU,IAAI,WAAW,WAAW,CAAC;AAEzE,mBAAOC,iBAAgB,MAAM,cAAc;AAAA,UAC7C;AAAA,UACA,YAAY;AAAA,QACd,CAAC;AACD,eAAO,QAAQ,OAAO,EAAE,QAAQ,CAAC,CAAC,MAAM,MAAM,MAAwC;AAEpF,iBAAO,QAAQ,IAAI;AAAA,YACjB;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAED,cAAM,kBAAkB,OAAO,CAAC,IAAI,MAAwC;AAC1E,gBAAM,OAAO,MAAM,KAAK,UAAU,EAAE,UAAU,GAAG,aAAa,IAAI,QAAQ,WAAW,WAAW,CAAC;AAEjG,cAAI,CAAC,MAAM;AACT,mBAAO;AAAA,UACT;AAEA,iBAAO,KAAK,QAAQ;AAAA,YAClB;AAAA,YACA,UAAU,GAAG,aAAa,IAAI;AAAA,YAC9B,QAAQ,MAAM,QAAQ,MAAM,IAAI;AAAA,UAClC,CAAC;AAAA,QACH;AAEA,cAAM,WAAW,OAAO,QAAQ,OAAO,EAAE,IAAI,eAAe;AAE5D,cAAM,QAAQ,IAAI,QAAQ;AAAA,MAC5B;AAEA,UAAI,SAAS,QAAQ;AAEnB,cAAM,UAAU,IAAI,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,YAAY;AAAA,QACd,CAAC;AACD,eAAO,QAAQ,OAAO,EAAE,QAAQ,CAAC,CAAC,MAAM,MAAM,MAAwC;AAEpF,iBAAO,QAAQ,IAAI;AAAA,YACjB;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAED,cAAM,OAAO,MAAM,KAAK,UAAU,EAAE,UAAU,IAAI,WAAW,WAAW,CAAC;AACzE,YAAI,CAAC,MAAM;AACT;AAAA,QACF;AAEA,cAAM,KAAK,QAAQ;AAAA,UACjB;AAAA,UACA,UAAU,GAAG,aAAa,MAAM;AAAA,UAChC,QAAQ,MAAM,QAAQ,MAAM;AAAA,QAC9B,CAAC;AAAA,MACH;AAEA,YAAM,qBAAqB,IAAI,mBAAmB;AAAA,QAChD;AAAA,QACA;AAAA,QACA;AAAA,QACA,aAAa,KAAK;AAAA,QAClB;AAAA,QACA,WAAW,IAAI;AAAA,MACjB,CAAC;AAED,YAAM,mBAAmB,MAAM;AAAA,IACjC;AAAA,IACA,MAAM,WAAW;AACf,YAAM,aAAa,KAAK,OAAO,MAAM,KAAK,OAAO,OAAO,MAAM,EAAE,YAAY,QAAQ,SAAS,CAAC,WAAW,MAAM,EAAE,CAAC;AAAA,IACpH;AAAA,EACF;AACF,CAAC;;;AMzJD,IAAO,cAAQ","sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-console */\n\nimport pathParser from 'path'\n\nimport { pascalCase } from 'change-case'\n\nimport { getRelativePath, createPlugin, getPathMode, validatePlugins } from '@kubb/core'\nimport { pluginName as swaggerPluginName } from '@kubb/swagger'\nimport type { Api as SwaggerApi, OpenAPIV3 } from '@kubb/swagger'\nimport { writeIndexes } from '@kubb/ts-codegen'\n\nimport { TypeBuilder } from './builders'\nimport { OperationGenerator } from './generators/OperationGenerator'\n\nimport type { Api, PluginOptions } from './types'\n\nexport const pluginName = 'swagger-ts' as const\n\nexport const definePlugin = createPlugin<PluginOptions>((options) => {\n const { output = 'models' } = options\n let swaggerApi: SwaggerApi\n\n const api: Api = {\n resolveId(fileName, directory) {\n if (!directory) {\n return null\n }\n\n const mode = getPathMode(pathParser.resolve(directory, output))\n\n if (mode === 'file') {\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 pathParser.resolve(directory, output)\n }\n\n return pathParser.resolve(directory, output, fileName)\n },\n }\n\n return {\n name: pluginName,\n options,\n kind: 'schema',\n api,\n validate(plugins) {\n const valid = validatePlugins(plugins, [swaggerPluginName])\n if (valid) {\n swaggerApi = plugins.find((plugin) => plugin.name === swaggerPluginName)?.api\n }\n\n return valid\n },\n resolveId(fileName, directory) {\n return api.resolveId(fileName, directory)\n },\n async writeFile(source, path) {\n if (!path.endsWith('.ts') || !source) {\n return\n }\n\n await this.fileManager.write(source, path)\n },\n async buildStart() {\n const oas = await swaggerApi.getOas(this.config)\n\n const schemas = oas.getDefinition().components?.schemas || {}\n const directory = pathParser.resolve(this.config.root, this.config.output.path)\n const mode = getPathMode(pathParser.resolve(directory, output))\n\n const nameResolver = (name: string) => pascalCase(name, { delimiter: '' })\n\n if (mode === 'directory') {\n const builder = await new TypeBuilder(oas).configure({\n nameResolver,\n fileResolver: async (name) => {\n const resolvedTypeId = await this.resolveId({\n fileName: `${name}.ts`,\n directory,\n pluginName,\n })\n\n const root = await this.resolveId({ fileName: ``, directory, pluginName })\n\n return getRelativePath(root, resolvedTypeId)\n },\n withJSDocs: true,\n })\n Object.entries(schemas).forEach(([name, schema]: [string, OpenAPIV3.SchemaObject]) => {\n // generate and pass through new code back to the core so it can be write to that file\n return builder.add({\n schema,\n name,\n })\n })\n\n const mapFolderSchema = async ([name]: [string, OpenAPIV3.SchemaObject]) => {\n const path = await this.resolveId({ fileName: `${nameResolver(name)}.ts`, directory, pluginName })\n\n if (!path) {\n return null\n }\n\n return this.addFile({\n path,\n fileName: `${nameResolver(name)}.ts`,\n source: await builder.print(name),\n })\n }\n\n const promises = Object.entries(schemas).map(mapFolderSchema)\n\n await Promise.all(promises)\n }\n\n if (mode === 'file') {\n // outside the loop because we need to add files to just one instance to have the correct sorting, see refsSorter\n const builder = new TypeBuilder(oas).configure({\n nameResolver,\n withJSDocs: true,\n })\n Object.entries(schemas).forEach(([name, schema]: [string, OpenAPIV3.SchemaObject]) => {\n // generate and pass through new code back to the core so it can be write to that file\n return builder.add({\n schema,\n name,\n })\n })\n\n const path = await this.resolveId({ fileName: '', directory, pluginName })\n if (!path) {\n return\n }\n\n await this.addFile({\n path,\n fileName: `${nameResolver(output)}.ts`,\n source: await builder.print(),\n })\n }\n\n const operationGenerator = new OperationGenerator({\n oas,\n mode,\n directory,\n fileManager: this.fileManager,\n nameResolver,\n resolveId: api.resolveId,\n })\n\n await operationGenerator.build()\n },\n async buildEnd() {\n await writeIndexes(this.config.root, this.config.output.path, { extensions: /\\.ts/, exclude: [/schemas/, /json/] })\n },\n }\n})\n","import { OasBuilder } from '@kubb/swagger'\nimport type { FileResolver } from '@kubb/swagger'\nimport { nameSorter } from '@kubb/core'\nimport { print } from '@kubb/ts-codegen'\n\nimport { ImportsGenerator, TypeGenerator } from '../generators'\n\nimport type ts from 'typescript'\nimport type { Refs } from '../generators'\n\ntype Generated = { refs: Refs; name: string; sources: ts.Node[] }\ntype Config = {\n fileResolver?: FileResolver\n nameResolver?: (name: string) => string\n withJSDocs?: boolean\n withImports?: boolean\n}\n\n// TODO create another function that sort based on the refs(first the ones without refs)\nfunction refsSorter(a: Generated, b: Generated) {\n if (Object.keys(a.refs)?.length < Object.keys(b.refs)?.length) {\n return -1\n }\n if (Object.keys(a.refs)?.length > Object.keys(b.refs)?.length) {\n return 1\n }\n return 0\n}\n\nexport class TypeBuilder extends OasBuilder<Config> {\n configure(config: Config) {\n this.config = config\n\n if (this.config.fileResolver) {\n this.config.withImports = true\n }\n\n return this\n }\n\n async print(name?: string) {\n const codes: string[] = []\n\n const generated = this.items\n .filter((gen) => (name ? gen.name === name : true))\n .sort(nameSorter)\n .map((gen) => {\n const generator = new TypeGenerator(this.oas, { withJSDocs: this.config.withJSDocs, nameResolver: this.config.nameResolver })\n const nodes = generator.build(gen.schema, this.config.nameResolver?.(gen.name) || gen.name, gen.description)\n\n return {\n refs: generator.refs,\n name: gen.name,\n sources: nodes,\n }\n })\n .sort(refsSorter)\n\n generated.forEach((item) => {\n codes.push(print(item.sources))\n })\n\n if (this.config.withImports) {\n const importsGenerator = new ImportsGenerator({ fileResolver: this.config.fileResolver })\n const codeImports = await importsGenerator.build(generated)\n\n if (codeImports) {\n codes.unshift(print(codeImports))\n }\n }\n\n return codes.join('\\n')\n }\n}\n","/* eslint-disable no-param-reassign */\nimport ts from 'typescript'\nimport { pascalCase, camelCase } from 'change-case'\nimport uniq from 'lodash.uniq'\n\nimport { getUniqueName, SchemaGenerator } from '@kubb/core'\nimport type { Oas, OpenAPIV3 } from '@kubb/swagger'\nimport { isReference } from '@kubb/swagger'\nimport {\n appendJSDocToNode,\n createEnumDeclaration,\n createIndexSignature,\n createIntersectionDeclaration,\n createPropertySignature,\n createTypeAliasDeclaration,\n modifier,\n} from '@kubb/ts-codegen'\n\nimport { keywordTypeNodes } from '../utils'\n\nconst { factory } = ts\n\n// based on https://github.com/cellular/oazapfts/blob/7ba226ebb15374e8483cc53e7532f1663179a22c/src/codegen/generate.ts#L398\n\n/**\n * Name is the ref name + resolved with the nameResolver\n * Key is the original name used\n */\nexport type Refs = Record<string, { name: string; key: string }>\n\ntype Options = {\n withJSDocs?: boolean\n nameResolver?: (name: string) => string\n}\nexport class TypeGenerator extends SchemaGenerator<Options, OpenAPIV3.SchemaObject, ts.Node[]> {\n // Collect the types of all referenced schemas so we can export them later\n public static usedEnumNames: Record<string, number> = {}\n\n refs: Refs = {}\n\n extraNodes: ts.Node[] = []\n\n aliases: ts.TypeAliasDeclaration[] = []\n\n // Keep track of already used type aliases\n usedAliasNames: Record<string, number> = {}\n\n constructor(public readonly oas: Oas, options: Options = { withJSDocs: true, nameResolver: (name) => name }) {\n super(options)\n\n return this\n }\n\n build(schema: OpenAPIV3.SchemaObject, name: string, description?: string) {\n const nodes: ts.Node[] = []\n const type = this.getTypeFromSchema(schema, name)\n\n if (!type) {\n return this.extraNodes\n }\n\n const node = createTypeAliasDeclaration({\n modifiers: [modifier.export],\n name,\n type,\n })\n\n if (description) {\n nodes.push(\n appendJSDocToNode({\n node,\n comments: [`@description ${description}`],\n })\n )\n } else {\n nodes.push(node)\n }\n\n // filter out if the export name is the same as one that we already defined in extraNodes(see enum)\n const filterdNodes = nodes.filter(\n (node: ts.Node) =>\n !this.extraNodes.some(\n (extraNode: ts.Node) => (extraNode as ts.TypeAliasDeclaration)?.name?.escapedText === (node as ts.TypeAliasDeclaration)?.name?.escapedText\n )\n )\n\n return [...this.extraNodes, ...filterdNodes]\n }\n\n /**\n * Creates a type node from a given schema.\n * Delegates to getBaseTypeFromSchema internally and\n * optionally adds a union with null.\n */\n private getTypeFromSchema(schema: OpenAPIV3.SchemaObject, name?: string): ts.TypeNode | null {\n const type = this.getBaseTypeFromSchema(schema, name)\n\n if (!type) {\n return null\n }\n\n if (schema) {\n return type\n }\n\n return factory.createUnionTypeNode([type, keywordTypeNodes.null])\n }\n\n /**\n * Recursively creates a type literal with the given props.\n */\n private getTypeFromProperties(baseSchema?: OpenAPIV3.SchemaObject, baseName?: string) {\n const props = baseSchema?.properties || {}\n const required = baseSchema?.required\n const additionalProperties = baseSchema?.additionalProperties\n\n const members: Array<ts.TypeElement | null> = Object.keys(props).map((name) => {\n const schema = props[name] as OpenAPIV3.SchemaObject\n\n const isRequired = required && required.includes(name)\n let type: ts.TypeNode | null\n if (schema.enum) {\n type = this.getTypeFromSchema(schema, pascalCase(`${baseName} ${name}`, { delimiter: '' }))\n } else {\n type = this.getTypeFromSchema(schema, pascalCase(`${baseName} ${name}`, { delimiter: '' }))\n }\n\n if (!type) {\n return null\n }\n\n if (!isRequired) {\n type = factory.createUnionTypeNode([type, keywordTypeNodes.undefined])\n }\n const propertySignature = createPropertySignature({\n questionToken: !isRequired,\n name,\n type,\n })\n if (this.options.withJSDocs) {\n return appendJSDocToNode({\n node: propertySignature,\n comments: [\n schema.description && `@description ${schema.description}`,\n schema.type && `@type ${schema.type}${isRequired ? '' : ' | undefined'} ${schema.format || ''}`,\n schema.example && `@example ${schema.example}`,\n ],\n })\n }\n\n return propertySignature\n })\n if (additionalProperties) {\n const type = additionalProperties === true ? keywordTypeNodes.any : this.getTypeFromSchema(additionalProperties as OpenAPIV3.SchemaObject)\n\n if (type) {\n members.push(createIndexSignature(type))\n }\n }\n return factory.createTypeLiteralNode(members.filter(Boolean) as ts.TypeElement[])\n }\n\n /**\n * Create a type alias for the schema referenced by the given ReferenceObject\n */\n private getRefAlias(obj: OpenAPIV3.ReferenceObject) {\n const { $ref } = obj\n let ref = this.refs[$ref]\n\n if (!ref) {\n const name = pascalCase(getUniqueName($ref.replace(/.+\\//, ''), this.usedAliasNames), { delimiter: '' })\n\n // eslint-disable-next-line no-multi-assign\n ref = this.refs[$ref] = {\n name: this.options.nameResolver?.(name) || name,\n key: name,\n }\n }\n\n return factory.createTypeReferenceNode(ref.name, undefined)\n }\n\n /**\n * This is the very core of the OpenAPI to TS conversion - it takes a\n * schema and returns the appropriate type.\n */\n private getBaseTypeFromSchema(schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject | undefined, name?: string): ts.TypeNode | null {\n if (!schema) {\n return keywordTypeNodes.any\n }\n\n if (isReference(schema)) {\n return this.getRefAlias(schema)\n }\n\n if (schema.oneOf) {\n // union\n const schemaWithoutOneOf = { ...schema, oneOf: undefined }\n\n return createIntersectionDeclaration({\n nodes: [\n this.getBaseTypeFromSchema(schemaWithoutOneOf, name),\n factory.createParenthesizedType(\n factory.createUnionTypeNode(\n schema.oneOf\n .map((item) => {\n return this.getBaseTypeFromSchema(item)\n })\n .filter(Boolean) as ts.TypeNode[]\n )\n ),\n ].filter(Boolean) as ts.TypeNode[],\n })\n }\n\n if (schema.anyOf) {\n // TODO anyOf -> union\n }\n if (schema.allOf) {\n // intersection/add\n const schemaWithoutAllOf = { ...schema, allOf: undefined }\n\n return createIntersectionDeclaration({\n nodes: [\n this.getBaseTypeFromSchema(schemaWithoutAllOf, name),\n factory.createParenthesizedType(\n factory.createIntersectionTypeNode(\n schema.allOf\n .map((item) => {\n return this.getBaseTypeFromSchema(item)\n })\n .filter(Boolean) as ts.TypeNode[]\n )\n ),\n ].filter(Boolean) as ts.TypeNode[],\n })\n }\n\n if (schema.enum && name) {\n const enumName = getUniqueName(name, TypeGenerator.usedEnumNames)\n this.extraNodes.push(\n ...createEnumDeclaration({\n name: camelCase(enumName, { delimiter: '' }),\n typeName: pascalCase(enumName, { delimiter: '' }),\n enums: uniq(schema.enum),\n })\n )\n return factory.createTypeReferenceNode(pascalCase(enumName, { delimiter: '' }), undefined)\n }\n\n if ('items' in schema) {\n // items -> array\n const node = this.getTypeFromSchema(schema.items as OpenAPIV3.SchemaObject, name)\n if (node) {\n return factory.createArrayTypeNode(node)\n }\n }\n\n if (schema.properties || schema.additionalProperties) {\n // properties -> literal type\n return this.getTypeFromProperties(schema, name)\n }\n\n if (schema.type) {\n if (schema.type === 'object') {\n if (!schema.additionalProperties && !schema.properties && schema.type === 'object') {\n return null\n }\n }\n if (Array.isArray(schema.type)) {\n // OPENAPI v3.1.0: https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0\n const [type, nullable] = schema.type\n\n return factory.createUnionTypeNode(\n [\n this.getBaseTypeFromSchema(\n {\n ...schema,\n type,\n },\n name\n )!,\n nullable ? factory.createLiteralTypeNode(factory.createNull()) : undefined,\n ].filter(Boolean) as ts.TypeNode[]\n )\n }\n // string, boolean, null, number\n if (schema.type in keywordTypeNodes) {\n return keywordTypeNodes[schema.type as keyof typeof keywordTypeNodes]\n }\n }\n\n if (schema.format === 'binary') {\n return factory.createTypeReferenceNode('Blob', [])\n }\n\n return keywordTypeNodes.any\n }\n}\n","import ts from 'typescript'\n\nconst { factory } = ts\n\nexport const keywordTypeNodes = {\n any: factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),\n number: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n integer: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n object: factory.createKeywordTypeNode(ts.SyntaxKind.ObjectKeyword),\n string: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n boolean: factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword),\n undefined: factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword),\n null: factory.createLiteralTypeNode(factory.createToken(ts.SyntaxKind.NullKeyword)),\n} as const\n","import uniq from 'lodash.uniq'\n\nimport { Generator } from '@kubb/core'\nimport type { FileResolver } from '@kubb/swagger'\nimport { createImportDeclaration } from '@kubb/ts-codegen'\n\nimport type { Refs } from './TypeGenerator'\nimport type ts from 'typescript'\n\ntype Options = {\n fileResolver?: FileResolver\n}\nexport class ImportsGenerator extends Generator<Options> {\n async build(items: Array<{ refs: Refs; sources: ts.Node[]; name: string }>): Promise<Array<ts.ImportDeclaration> | undefined> {\n const refs = items.reduce((acc, currentValue) => {\n return {\n ...acc,\n ...currentValue.refs,\n }\n }, {} as Refs)\n\n if (Object.keys(refs).length === 0) {\n return undefined\n }\n\n // add imports based on $ref\n const importPromises = uniq(Object.keys(refs))\n .filter(($ref: string) => {\n // when using a $ref inside a type we should not repeat that import\n const { key } = refs[$ref]\n return !items.find((item) =>\n item.sources.find((node: ts.Node) => (node as ts.TypeAliasDeclaration).name?.escapedText.toString().toLowerCase() === key.toLowerCase())\n )\n })\n .map(async ($ref: string) => {\n const { name } = refs[$ref]\n\n const path = (await this.options.fileResolver?.(name)) || `./${name}`\n\n // TODO weird hacky fix\n if (path === './' || path === '.') {\n return undefined\n }\n\n return createImportDeclaration({\n name: [name],\n path: path.replace('./../', '../'),\n })\n })\n\n const nodes = await Promise.all(importPromises)\n\n return nodes.filter(Boolean) as ts.ImportDeclaration[]\n }\n}\n","import type { File, FileManager, PathMode } from '@kubb/core'\nimport { getRelativePath } from '@kubb/core'\nimport { OperationGenerator as Generator } from '@kubb/swagger'\nimport type { FileResolver, Oas } from '@kubb/swagger'\n\nimport { TypeBuilder } from '../builders'\n\nimport type { Api } from '../types'\n\ntype Options = {\n oas: Oas\n resolveId: Api['resolveId']\n mode: PathMode\n fileManager: FileManager\n nameResolver: (name: string) => string\n directory: string\n}\n\nexport class OperationGenerator extends Generator<Options> {\n async getGet(path: string): Promise<File | null> {\n const { resolveId, directory, mode, nameResolver, oas } = this.options\n\n const operation = oas.operation(path, 'get')\n\n if (!operation.schema.operationId) return null\n\n const schemas = this.getSchemas(operation)\n const typeName = `${nameResolver(operation.getOperationId())}.ts`\n const typeFilePath = await resolveId(typeName, directory)\n\n const fileResolver: FileResolver = async (name) => {\n // Used when a react-query type(request, response, params) has an import of a global type\n const filePath = await resolveId(mode === 'file' ? '' : typeName, directory)\n // refs import, will always been created with the SwaggerTS plugin, our global type\n const resolvedTypeId = await resolveId(`${name}.ts`, directory)\n\n return getRelativePath(filePath, resolvedTypeId)\n }\n\n const typeSource = await new TypeBuilder(oas)\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.response)\n .configure({ fileResolver, withJSDocs: true })\n .print()\n\n if (typeFilePath) {\n return {\n path: typeFilePath,\n fileName: typeName,\n source: typeSource,\n }\n }\n\n return null\n }\n\n async getPost(path: string): Promise<File | null> {\n const { resolveId, directory, mode, nameResolver, oas } = this.options\n\n const operation = oas.operation(path, 'post')\n\n if (!operation.schema.operationId) return null\n\n const schemas = this.getSchemas(operation)\n const typeName = `${nameResolver(operation.getOperationId())}.ts`\n const typeFilePath = await resolveId(typeName, directory)\n\n const fileResolver: FileResolver = async (name) => {\n // Used when a react-query type(request, response, params) has an import of a global type\n const filePath = await resolveId(mode === 'file' ? '' : typeName, directory)\n // refs import, will always been created with the SwaggerTS plugin, our global type\n const resolvedTypeId = await resolveId(`${name}.ts`, directory)\n\n return getRelativePath(filePath, resolvedTypeId)\n }\n\n const typeSource = await new TypeBuilder(oas)\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.request)\n .add(schemas.response)\n .configure({ fileResolver, withJSDocs: true })\n .print()\n\n if (typeFilePath) {\n return {\n path: typeFilePath,\n fileName: typeName,\n source: typeSource,\n }\n }\n\n return null\n }\n\n async getPut(path: string): Promise<File | null> {\n const { resolveId, directory, mode, nameResolver, oas } = this.options\n\n const operation = oas.operation(path, 'put')\n\n if (!operation.schema.operationId) return null\n\n const schemas = this.getSchemas(operation)\n const typeName = `${nameResolver(operation.getOperationId())}.ts`\n const typeFilePath = await resolveId(typeName, directory)\n\n const fileResolver: FileResolver = async (name) => {\n // Used when a react-query type(request, response, params) has an import of a global type\n const filePath = await resolveId(mode === 'file' ? '' : typeName, directory)\n // refs import, will always been created with the SwaggerTS plugin, our global type\n const resolvedTypeId = await resolveId(`${name}.ts`, directory)\n\n return getRelativePath(filePath, resolvedTypeId)\n }\n\n const typeSource = await new TypeBuilder(oas)\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.request)\n .add(schemas.response)\n .configure({ fileResolver, withJSDocs: true })\n .print()\n\n if (typeFilePath) {\n return {\n path: typeFilePath,\n fileName: typeName,\n source: typeSource,\n }\n }\n\n return null\n }\n\n async getDelete(path: string): Promise<File | null> {\n const { resolveId, directory, mode, nameResolver, oas } = this.options\n\n const operation = oas.operation(path, 'delete')\n\n if (!operation.schema.operationId) return null\n\n const schemas = this.getSchemas(operation)\n const typeName = `${nameResolver(operation.getOperationId())}.ts`\n const typeFilePath = await resolveId(typeName, directory)\n\n const fileResolver: FileResolver = async (name) => {\n // Used when a react-query type(request, response, params) has an import of a global type\n const filePath = await resolveId(mode === 'file' ? '' : typeName, directory)\n // refs import, will always been created with the SwaggerTS plugin, our global type\n const resolvedTypeId = await resolveId(`${name}.ts`, directory)\n\n return getRelativePath(filePath, resolvedTypeId)\n }\n\n const typeSource = await new TypeBuilder(oas)\n .add(schemas.pathParams)\n .add(schemas.request)\n .add(schemas.response)\n .configure({ fileResolver, withJSDocs: true })\n .print()\n\n if (typeFilePath) {\n return {\n path: typeFilePath,\n fileName: typeName,\n source: typeSource,\n }\n }\n\n return null\n }\n\n async build() {\n return this.buildOperations({\n fileManager: this.options.fileManager,\n oas: this.options.oas,\n })\n }\n}\n","import { definePlugin } from './plugin'\n\nexport * from './plugin'\nexport * from './generators'\nexport * from './builders'\nexport * from './types'\nexport * from './utils'\nexport default definePlugin\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/plugin.ts","../src/builders/TypeBuilder.ts","../src/generators/TypeGenerator.ts","../src/utils/keywordTypeNodes.ts","../src/generators/ImportsGenerator.ts","../src/generators/OperationGenerator.ts","../src/index.ts"],"names":["pascalCase","getRelativePath","ts","factory","node","uniq","Generator"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-console */\n\nimport pathParser from 'path'\n\nimport { pascalCase } from 'change-case'\n\nimport { getRelativePath, createPlugin, getPathMode, validatePlugins } from '@kubb/core'\nimport { pluginName as swaggerPluginName } from '@kubb/swagger'\nimport type { Api as SwaggerApi, OpenAPIV3 } from '@kubb/swagger'\nimport { writeIndexes } from '@kubb/ts-codegen'\n\nimport { TypeBuilder } from './builders'\nimport { OperationGenerator } from './generators/OperationGenerator'\n\nimport type { Api, PluginOptions } from './types'\n\nexport const pluginName = 'swagger-ts' as const\n\nexport const definePlugin = createPlugin<PluginOptions>((options) => {\n const { output = 'models' } = options\n let swaggerApi: SwaggerApi\n\n const api: Api = {\n resolveId(fileName, directory) {\n if (!directory) {\n return null\n }\n\n const mode = getPathMode(pathParser.resolve(directory, output))\n\n if (mode === 'file') {\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 pathParser.resolve(directory, output)\n }\n\n return pathParser.resolve(directory, output, fileName)\n },\n }\n\n return {\n name: pluginName,\n options,\n kind: 'schema',\n api,\n validate(plugins) {\n const valid = validatePlugins(plugins, [swaggerPluginName])\n if (valid) {\n swaggerApi = plugins.find((plugin) => plugin.name === swaggerPluginName)?.api\n }\n\n return valid\n },\n resolveId(fileName, directory) {\n return api.resolveId(fileName, directory)\n },\n async writeFile(source, path) {\n if (!path.endsWith('.ts') || !source) {\n return\n }\n\n await this.fileManager.write(source, path)\n },\n async buildStart() {\n const oas = await swaggerApi.getOas(this.config)\n\n const schemas = oas.getDefinition().components?.schemas || {}\n const directory = pathParser.resolve(this.config.root, this.config.output.path)\n const mode = getPathMode(pathParser.resolve(directory, output))\n\n const nameResolver = (name: string) => pascalCase(name, { delimiter: '' })\n\n if (mode === 'directory') {\n const builder = await new TypeBuilder(oas).configure({\n nameResolver,\n fileResolver: async (name) => {\n const resolvedTypeId = await this.resolveId({\n fileName: `${name}.ts`,\n directory,\n pluginName,\n })\n\n const root = await this.resolveId({ fileName: ``, directory, pluginName })\n\n return getRelativePath(root, resolvedTypeId)\n },\n withJSDocs: true,\n })\n Object.entries(schemas).forEach(([name, schema]: [string, OpenAPIV3.SchemaObject]) => {\n // generate and pass through new code back to the core so it can be write to that file\n return builder.add({\n schema,\n name,\n })\n })\n\n const mapFolderSchema = async ([name]: [string, OpenAPIV3.SchemaObject]) => {\n const path = await this.resolveId({ fileName: `${nameResolver(name)}.ts`, directory, pluginName })\n\n if (!path) {\n return null\n }\n\n return this.addFile({\n path,\n fileName: `${nameResolver(name)}.ts`,\n source: await builder.print(name),\n })\n }\n\n const promises = Object.entries(schemas).map(mapFolderSchema)\n\n await Promise.all(promises)\n }\n\n if (mode === 'file') {\n // outside the loop because we need to add files to just one instance to have the correct sorting, see refsSorter\n const builder = new TypeBuilder(oas).configure({\n nameResolver,\n withJSDocs: true,\n })\n Object.entries(schemas).forEach(([name, schema]: [string, OpenAPIV3.SchemaObject]) => {\n // generate and pass through new code back to the core so it can be write to that file\n return builder.add({\n schema,\n name,\n })\n })\n\n const path = await this.resolveId({ fileName: '', directory, pluginName })\n if (!path) {\n return\n }\n\n await this.addFile({\n path,\n fileName: `${nameResolver(output)}.ts`,\n source: await builder.print(),\n })\n }\n\n const operationGenerator = new OperationGenerator({\n oas,\n mode,\n directory,\n fileManager: this.fileManager,\n nameResolver,\n resolveId: api.resolveId,\n })\n\n await operationGenerator.build()\n },\n async buildEnd() {\n await writeIndexes(this.config.root, this.config.output.path, { extensions: /\\.ts/, exclude: [/schemas/, /json/] })\n },\n }\n})\n","import { OasBuilder } from '@kubb/swagger'\nimport type { FileResolver } from '@kubb/swagger'\nimport { nameSorter } from '@kubb/core'\nimport { print } from '@kubb/ts-codegen'\n\nimport { ImportsGenerator, TypeGenerator } from '../generators'\n\nimport type ts from 'typescript'\nimport type { Refs } from '../generators'\n\ntype Generated = { refs: Refs; name: string; sources: ts.Node[] }\ntype Config = {\n fileResolver?: FileResolver\n nameResolver?: (name: string) => string\n withJSDocs?: boolean\n withImports?: boolean\n}\n\n// TODO create another function that sort based on the refs(first the ones without refs)\nfunction refsSorter(a: Generated, b: Generated) {\n if (Object.keys(a.refs)?.length < Object.keys(b.refs)?.length) {\n return -1\n }\n if (Object.keys(a.refs)?.length > Object.keys(b.refs)?.length) {\n return 1\n }\n return 0\n}\n\nexport class TypeBuilder extends OasBuilder<Config> {\n configure(config: Config) {\n this.config = config\n\n if (this.config.fileResolver) {\n this.config.withImports = true\n }\n\n return this\n }\n\n async print(name?: string) {\n const codes: string[] = []\n\n const generated = this.items\n .filter((gen) => (name ? gen.name === name : true))\n .sort(nameSorter)\n .map((gen) => {\n const generator = new TypeGenerator(this.oas, { withJSDocs: this.config.withJSDocs, nameResolver: this.config.nameResolver })\n const nodes = generator.build(gen.schema, this.config.nameResolver?.(gen.name) || gen.name, gen.description)\n\n return {\n refs: generator.refs,\n name: gen.name,\n sources: nodes,\n }\n })\n .sort(refsSorter)\n\n generated.forEach((item) => {\n codes.push(print(item.sources))\n })\n\n if (this.config.withImports) {\n const importsGenerator = new ImportsGenerator({ fileResolver: this.config.fileResolver })\n const codeImports = await importsGenerator.build(generated)\n\n if (codeImports) {\n codes.unshift(print(codeImports))\n }\n }\n\n return codes.join('\\n')\n }\n}\n","/* eslint-disable no-param-reassign */\nimport ts from 'typescript'\nimport { pascalCase, camelCase } from 'change-case'\nimport uniq from 'lodash.uniq'\n\nimport { getUniqueName, SchemaGenerator } from '@kubb/core'\nimport type { Oas, OpenAPIV3 } from '@kubb/swagger'\nimport { isReference } from '@kubb/swagger'\nimport {\n appendJSDocToNode,\n createEnumDeclaration,\n createIndexSignature,\n createIntersectionDeclaration,\n createPropertySignature,\n createTypeAliasDeclaration,\n modifier,\n} from '@kubb/ts-codegen'\n\nimport { keywordTypeNodes } from '../utils'\n\nconst { factory } = ts\n\n// based on https://github.com/cellular/oazapfts/blob/7ba226ebb15374e8483cc53e7532f1663179a22c/src/codegen/generate.ts#L398\n\n/**\n * Name is the ref name + resolved with the nameResolver\n * Key is the original name used\n */\nexport type Refs = Record<string, { name: string; key: string }>\n\ntype Options = {\n withJSDocs?: boolean\n nameResolver?: (name: string) => string\n}\nexport class TypeGenerator extends SchemaGenerator<Options, OpenAPIV3.SchemaObject, ts.Node[]> {\n // Collect the types of all referenced schemas so we can export them later\n public static usedEnumNames: Record<string, number> = {}\n\n refs: Refs = {}\n\n extraNodes: ts.Node[] = []\n\n aliases: ts.TypeAliasDeclaration[] = []\n\n // Keep track of already used type aliases\n usedAliasNames: Record<string, number> = {}\n\n constructor(public readonly oas: Oas, options: Options = { withJSDocs: true, nameResolver: (name) => name }) {\n super(options)\n\n return this\n }\n\n build(schema: OpenAPIV3.SchemaObject, name: string, description?: string) {\n const nodes: ts.Node[] = []\n const type = this.getTypeFromSchema(schema, name)\n\n if (!type) {\n return this.extraNodes\n }\n\n const node = createTypeAliasDeclaration({\n modifiers: [modifier.export],\n name,\n type,\n })\n\n if (description) {\n nodes.push(\n appendJSDocToNode({\n node,\n comments: [`@description ${description}`],\n })\n )\n } else {\n nodes.push(node)\n }\n\n // filter out if the export name is the same as one that we already defined in extraNodes(see enum)\n const filterdNodes = nodes.filter(\n (node: ts.Node) =>\n !this.extraNodes.some(\n (extraNode: ts.Node) => (extraNode as ts.TypeAliasDeclaration)?.name?.escapedText === (node as ts.TypeAliasDeclaration)?.name?.escapedText\n )\n )\n\n return [...this.extraNodes, ...filterdNodes]\n }\n\n /**\n * Creates a type node from a given schema.\n * Delegates to getBaseTypeFromSchema internally and\n * optionally adds a union with null.\n */\n private getTypeFromSchema(schema: OpenAPIV3.SchemaObject, name?: string): ts.TypeNode | null {\n const type = this.getBaseTypeFromSchema(schema, name)\n\n if (!type) {\n return null\n }\n\n if (schema) {\n return type\n }\n\n return factory.createUnionTypeNode([type, keywordTypeNodes.null])\n }\n\n /**\n * Recursively creates a type literal with the given props.\n */\n private getTypeFromProperties(baseSchema?: OpenAPIV3.SchemaObject, baseName?: string) {\n const props = baseSchema?.properties || {}\n const required = baseSchema?.required\n const additionalProperties = baseSchema?.additionalProperties\n\n const members: Array<ts.TypeElement | null> = Object.keys(props).map((name) => {\n const schema = props[name] as OpenAPIV3.SchemaObject\n\n const isRequired = required && required.includes(name)\n let type: ts.TypeNode | null\n if (schema.enum) {\n type = this.getTypeFromSchema(schema, pascalCase(`${baseName} ${name}`, { delimiter: '' }))\n } else {\n type = this.getTypeFromSchema(schema, pascalCase(`${baseName} ${name}`, { delimiter: '' }))\n }\n\n if (!type) {\n return null\n }\n\n if (!isRequired) {\n type = factory.createUnionTypeNode([type, keywordTypeNodes.undefined])\n }\n const propertySignature = createPropertySignature({\n questionToken: !isRequired,\n name,\n type,\n })\n if (this.options.withJSDocs) {\n return appendJSDocToNode({\n node: propertySignature,\n comments: [\n schema.description && `@description ${schema.description}`,\n schema.type && `@type ${schema.type}${isRequired ? '' : ' | undefined'} ${schema.format || ''}`,\n schema.example && `@example ${schema.example}`,\n ],\n })\n }\n\n return propertySignature\n })\n if (additionalProperties) {\n const type = additionalProperties === true ? keywordTypeNodes.any : this.getTypeFromSchema(additionalProperties as OpenAPIV3.SchemaObject)\n\n if (type) {\n members.push(createIndexSignature(type))\n }\n }\n return factory.createTypeLiteralNode(members.filter(Boolean) as ts.TypeElement[])\n }\n\n /**\n * Create a type alias for the schema referenced by the given ReferenceObject\n */\n private getRefAlias(obj: OpenAPIV3.ReferenceObject) {\n const { $ref } = obj\n let ref = this.refs[$ref]\n\n if (!ref) {\n const name = pascalCase(getUniqueName($ref.replace(/.+\\//, ''), this.usedAliasNames), { delimiter: '' })\n\n // eslint-disable-next-line no-multi-assign\n ref = this.refs[$ref] = {\n name: this.options.nameResolver?.(name) || name,\n key: name,\n }\n }\n\n return factory.createTypeReferenceNode(ref.name, undefined)\n }\n\n /**\n * This is the very core of the OpenAPI to TS conversion - it takes a\n * schema and returns the appropriate type.\n */\n private getBaseTypeFromSchema(schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject | undefined, name?: string): ts.TypeNode | null {\n if (!schema) {\n return keywordTypeNodes.any\n }\n\n if (isReference(schema)) {\n return this.getRefAlias(schema)\n }\n\n if (schema.oneOf) {\n // union\n const schemaWithoutOneOf = { ...schema, oneOf: undefined }\n\n return createIntersectionDeclaration({\n nodes: [\n this.getBaseTypeFromSchema(schemaWithoutOneOf, name),\n factory.createParenthesizedType(\n factory.createUnionTypeNode(\n schema.oneOf\n .map((item) => {\n return this.getBaseTypeFromSchema(item)\n })\n .filter(Boolean) as ts.TypeNode[]\n )\n ),\n ].filter(Boolean) as ts.TypeNode[],\n })\n }\n\n if (schema.anyOf) {\n // TODO anyOf -> union\n }\n if (schema.allOf) {\n // intersection/add\n const schemaWithoutAllOf = { ...schema, allOf: undefined }\n\n return createIntersectionDeclaration({\n nodes: [\n this.getBaseTypeFromSchema(schemaWithoutAllOf, name),\n factory.createParenthesizedType(\n factory.createIntersectionTypeNode(\n schema.allOf\n .map((item) => {\n return this.getBaseTypeFromSchema(item)\n })\n .filter(Boolean) as ts.TypeNode[]\n )\n ),\n ].filter(Boolean) as ts.TypeNode[],\n })\n }\n\n if (schema.enum && name) {\n const enumName = getUniqueName(name, TypeGenerator.usedEnumNames)\n this.extraNodes.push(\n ...createEnumDeclaration({\n name: camelCase(enumName, { delimiter: '' }),\n typeName: pascalCase(enumName, { delimiter: '' }),\n enums: uniq(schema.enum),\n })\n )\n return factory.createTypeReferenceNode(pascalCase(enumName, { delimiter: '' }), undefined)\n }\n\n if ('items' in schema) {\n // items -> array\n const node = this.getTypeFromSchema(schema.items as OpenAPIV3.SchemaObject, name)\n if (node) {\n return factory.createArrayTypeNode(node)\n }\n }\n\n if (schema.properties || schema.additionalProperties) {\n // properties -> literal type\n return this.getTypeFromProperties(schema, name)\n }\n\n if (schema.type) {\n if (schema.type === 'object') {\n if (!schema.additionalProperties && !schema.properties && schema.type === 'object') {\n return null\n }\n }\n if (Array.isArray(schema.type)) {\n // OPENAPI v3.1.0: https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0\n const [type, nullable] = schema.type\n\n return factory.createUnionTypeNode(\n [\n this.getBaseTypeFromSchema(\n {\n ...schema,\n type,\n },\n name\n )!,\n nullable ? factory.createLiteralTypeNode(factory.createNull()) : undefined,\n ].filter(Boolean) as ts.TypeNode[]\n )\n }\n // string, boolean, null, number\n if (schema.type in keywordTypeNodes) {\n return keywordTypeNodes[schema.type as keyof typeof keywordTypeNodes]\n }\n }\n\n if (schema.format === 'binary') {\n return factory.createTypeReferenceNode('Blob', [])\n }\n\n return keywordTypeNodes.any\n }\n}\n","import ts from 'typescript'\n\nconst { factory } = ts\n\nexport const keywordTypeNodes = {\n any: factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),\n number: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n integer: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n object: factory.createKeywordTypeNode(ts.SyntaxKind.ObjectKeyword),\n string: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n boolean: factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword),\n undefined: factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword),\n null: factory.createLiteralTypeNode(factory.createToken(ts.SyntaxKind.NullKeyword)),\n} as const\n","import uniq from 'lodash.uniq'\n\nimport { Generator } from '@kubb/core'\nimport type { FileResolver } from '@kubb/swagger'\nimport { createImportDeclaration } from '@kubb/ts-codegen'\n\nimport type { Refs } from './TypeGenerator'\nimport type ts from 'typescript'\n\ntype Options = {\n fileResolver?: FileResolver\n}\nexport class ImportsGenerator extends Generator<Options> {\n async build(items: Array<{ refs: Refs; sources: ts.Node[]; name: string }>): Promise<Array<ts.ImportDeclaration> | undefined> {\n const refs = items.reduce((acc, currentValue) => {\n return {\n ...acc,\n ...currentValue.refs,\n }\n }, {} as Refs)\n\n if (Object.keys(refs).length === 0) {\n return undefined\n }\n\n // add imports based on $ref\n const importPromises = uniq(Object.keys(refs))\n .filter(($ref: string) => {\n // when using a $ref inside a type we should not repeat that import\n const { key } = refs[$ref]\n return !items.find((item) =>\n item.sources.find((node: ts.Node) => (node as ts.TypeAliasDeclaration).name?.escapedText.toString().toLowerCase() === key.toLowerCase())\n )\n })\n .map(async ($ref: string) => {\n const { name } = refs[$ref]\n\n const path = (await this.options.fileResolver?.(name)) || `./${name}`\n\n // TODO weird hacky fix\n if (path === './' || path === '.') {\n return undefined\n }\n\n return createImportDeclaration({\n name: [name],\n path: path.replace('./../', '../'),\n })\n })\n\n const nodes = await Promise.all(importPromises)\n\n return nodes.filter(Boolean) as ts.ImportDeclaration[]\n }\n}\n","import type { File, FileManager, PathMode } from '@kubb/core'\nimport { getRelativePath } from '@kubb/core'\nimport { OperationGenerator as Generator } from '@kubb/swagger'\nimport type { FileResolver, Oas, Operation, OperationSchemas } from '@kubb/swagger'\n\nimport { TypeBuilder } from '../builders'\n\nimport type { Api } from '../types'\n\ntype Options = {\n oas: Oas\n resolveId: Api['resolveId']\n mode: PathMode\n fileManager: FileManager\n nameResolver: (name: string) => string\n directory: string\n}\n\nexport class OperationGenerator extends Generator<Options> {\n async all(): Promise<File | null> {\n return null\n }\n\n async get(operation: Operation, schemas: OperationSchemas): Promise<File | null> {\n const { resolveId, directory, mode, nameResolver, oas } = this.options\n\n const typeName = `${nameResolver(operation.getOperationId())}.ts`\n const typeFilePath = await resolveId(typeName, directory)\n\n const fileResolver: FileResolver = async (name) => {\n // Used when a react-query type(request, response, params) has an import of a global type\n const filePath = await resolveId(mode === 'file' ? '' : typeName, directory)\n // refs import, will always been created with the SwaggerTS plugin, our global type\n const resolvedTypeId = await resolveId(`${name}.ts`, directory)\n\n return getRelativePath(filePath, resolvedTypeId)\n }\n\n const typeSource = await new TypeBuilder(oas)\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.response)\n .configure({ fileResolver, withJSDocs: true })\n .print()\n\n if (typeFilePath) {\n return {\n path: typeFilePath,\n fileName: typeName,\n source: typeSource,\n }\n }\n\n return null\n }\n\n async post(operation: Operation, schemas: OperationSchemas): Promise<File | null> {\n const { resolveId, directory, mode, nameResolver, oas } = this.options\n\n const typeName = `${nameResolver(operation.getOperationId())}.ts`\n const typeFilePath = await resolveId(typeName, directory)\n\n const fileResolver: FileResolver = async (name) => {\n // Used when a react-query type(request, response, params) has an import of a global type\n const filePath = await resolveId(mode === 'file' ? '' : typeName, directory)\n // refs import, will always been created with the SwaggerTS plugin, our global type\n const resolvedTypeId = await resolveId(`${name}.ts`, directory)\n\n return getRelativePath(filePath, resolvedTypeId)\n }\n\n const typeSource = await new TypeBuilder(oas)\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.request)\n .add(schemas.response)\n .configure({ fileResolver, withJSDocs: true })\n .print()\n\n if (typeFilePath) {\n return {\n path: typeFilePath,\n fileName: typeName,\n source: typeSource,\n }\n }\n\n return null\n }\n\n async put(operation: Operation, schemas: OperationSchemas): Promise<File | null> {\n const { resolveId, directory, mode, nameResolver, oas } = this.options\n\n const typeName = `${nameResolver(operation.getOperationId())}.ts`\n const typeFilePath = await resolveId(typeName, directory)\n\n const fileResolver: FileResolver = async (name) => {\n // Used when a react-query type(request, response, params) has an import of a global type\n const filePath = await resolveId(mode === 'file' ? '' : typeName, directory)\n // refs import, will always been created with the SwaggerTS plugin, our global type\n const resolvedTypeId = await resolveId(`${name}.ts`, directory)\n\n return getRelativePath(filePath, resolvedTypeId)\n }\n\n const typeSource = await new TypeBuilder(oas)\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.request)\n .add(schemas.response)\n .configure({ fileResolver, withJSDocs: true })\n .print()\n\n if (typeFilePath) {\n return {\n path: typeFilePath,\n fileName: typeName,\n source: typeSource,\n }\n }\n\n return null\n }\n\n async delete(operation: Operation, schemas: OperationSchemas): Promise<File | null> {\n const { resolveId, directory, mode, nameResolver, oas } = this.options\n\n const typeName = `${nameResolver(operation.getOperationId())}.ts`\n const typeFilePath = await resolveId(typeName, directory)\n\n const fileResolver: FileResolver = async (name) => {\n // Used when a react-query type(request, response, params) has an import of a global type\n const filePath = await resolveId(mode === 'file' ? '' : typeName, directory)\n // refs import, will always been created with the SwaggerTS plugin, our global type\n const resolvedTypeId = await resolveId(`${name}.ts`, directory)\n\n return getRelativePath(filePath, resolvedTypeId)\n }\n\n const typeSource = await new TypeBuilder(oas)\n .add(schemas.pathParams)\n .add(schemas.request)\n .add(schemas.response)\n .configure({ fileResolver, withJSDocs: true })\n .print()\n\n if (typeFilePath) {\n return {\n path: typeFilePath,\n fileName: typeName,\n source: typeSource,\n }\n }\n\n return null\n }\n}\n","import { definePlugin } from './plugin'\n\nexport * from './plugin'\nexport * from './generators'\nexport * from './builders'\nexport * from './types'\nexport * from './utils'\nexport default definePlugin\n"]}
|
package/dist/index.js
CHANGED
|
@@ -315,12 +315,11 @@ var TypeBuilder = class extends OasBuilder {
|
|
|
315
315
|
}
|
|
316
316
|
};
|
|
317
317
|
var OperationGenerator = class extends OperationGenerator$1 {
|
|
318
|
-
async
|
|
318
|
+
async all() {
|
|
319
|
+
return null;
|
|
320
|
+
}
|
|
321
|
+
async get(operation, schemas) {
|
|
319
322
|
const { resolveId, directory, mode, nameResolver, oas } = this.options;
|
|
320
|
-
const operation = oas.operation(path, "get");
|
|
321
|
-
if (!operation.schema.operationId)
|
|
322
|
-
return null;
|
|
323
|
-
const schemas = this.getSchemas(operation);
|
|
324
323
|
const typeName = `${nameResolver(operation.getOperationId())}.ts`;
|
|
325
324
|
const typeFilePath = await resolveId(typeName, directory);
|
|
326
325
|
const fileResolver = async (name) => {
|
|
@@ -338,12 +337,8 @@ var OperationGenerator = class extends OperationGenerator$1 {
|
|
|
338
337
|
}
|
|
339
338
|
return null;
|
|
340
339
|
}
|
|
341
|
-
async
|
|
340
|
+
async post(operation, schemas) {
|
|
342
341
|
const { resolveId, directory, mode, nameResolver, oas } = this.options;
|
|
343
|
-
const operation = oas.operation(path, "post");
|
|
344
|
-
if (!operation.schema.operationId)
|
|
345
|
-
return null;
|
|
346
|
-
const schemas = this.getSchemas(operation);
|
|
347
342
|
const typeName = `${nameResolver(operation.getOperationId())}.ts`;
|
|
348
343
|
const typeFilePath = await resolveId(typeName, directory);
|
|
349
344
|
const fileResolver = async (name) => {
|
|
@@ -361,12 +356,8 @@ var OperationGenerator = class extends OperationGenerator$1 {
|
|
|
361
356
|
}
|
|
362
357
|
return null;
|
|
363
358
|
}
|
|
364
|
-
async
|
|
359
|
+
async put(operation, schemas) {
|
|
365
360
|
const { resolveId, directory, mode, nameResolver, oas } = this.options;
|
|
366
|
-
const operation = oas.operation(path, "put");
|
|
367
|
-
if (!operation.schema.operationId)
|
|
368
|
-
return null;
|
|
369
|
-
const schemas = this.getSchemas(operation);
|
|
370
361
|
const typeName = `${nameResolver(operation.getOperationId())}.ts`;
|
|
371
362
|
const typeFilePath = await resolveId(typeName, directory);
|
|
372
363
|
const fileResolver = async (name) => {
|
|
@@ -384,12 +375,8 @@ var OperationGenerator = class extends OperationGenerator$1 {
|
|
|
384
375
|
}
|
|
385
376
|
return null;
|
|
386
377
|
}
|
|
387
|
-
async
|
|
378
|
+
async delete(operation, schemas) {
|
|
388
379
|
const { resolveId, directory, mode, nameResolver, oas } = this.options;
|
|
389
|
-
const operation = oas.operation(path, "delete");
|
|
390
|
-
if (!operation.schema.operationId)
|
|
391
|
-
return null;
|
|
392
|
-
const schemas = this.getSchemas(operation);
|
|
393
380
|
const typeName = `${nameResolver(operation.getOperationId())}.ts`;
|
|
394
381
|
const typeFilePath = await resolveId(typeName, directory);
|
|
395
382
|
const fileResolver = async (name) => {
|
|
@@ -407,12 +394,6 @@ var OperationGenerator = class extends OperationGenerator$1 {
|
|
|
407
394
|
}
|
|
408
395
|
return null;
|
|
409
396
|
}
|
|
410
|
-
async build() {
|
|
411
|
-
return this.buildOperations({
|
|
412
|
-
fileManager: this.options.fileManager,
|
|
413
|
-
oas: this.options.oas
|
|
414
|
-
});
|
|
415
|
-
}
|
|
416
397
|
};
|
|
417
398
|
|
|
418
399
|
// src/plugin.ts
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugin.ts","../src/builders/TypeBuilder.ts","../src/generators/TypeGenerator.ts","../src/utils/keywordTypeNodes.ts","../src/generators/ImportsGenerator.ts","../src/generators/OperationGenerator.ts","../src/index.ts"],"names":["pascalCase","getRelativePath","ts","factory","node","uniq","Generator"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-console */\n\nimport pathParser from 'path'\n\nimport { pascalCase } from 'change-case'\n\nimport { getRelativePath, createPlugin, getPathMode, validatePlugins } from '@kubb/core'\nimport { pluginName as swaggerPluginName } from '@kubb/swagger'\nimport type { Api as SwaggerApi, OpenAPIV3 } from '@kubb/swagger'\nimport { writeIndexes } from '@kubb/ts-codegen'\n\nimport { TypeBuilder } from './builders'\nimport { OperationGenerator } from './generators/OperationGenerator'\n\nimport type { Api, PluginOptions } from './types'\n\nexport const pluginName = 'swagger-ts' as const\n\nexport const definePlugin = createPlugin<PluginOptions>((options) => {\n const { output = 'models' } = options\n let swaggerApi: SwaggerApi\n\n const api: Api = {\n resolveId(fileName, directory) {\n if (!directory) {\n return null\n }\n\n const mode = getPathMode(pathParser.resolve(directory, output))\n\n if (mode === 'file') {\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 pathParser.resolve(directory, output)\n }\n\n return pathParser.resolve(directory, output, fileName)\n },\n }\n\n return {\n name: pluginName,\n options,\n kind: 'schema',\n api,\n validate(plugins) {\n const valid = validatePlugins(plugins, [swaggerPluginName])\n if (valid) {\n swaggerApi = plugins.find((plugin) => plugin.name === swaggerPluginName)?.api\n }\n\n return valid\n },\n resolveId(fileName, directory) {\n return api.resolveId(fileName, directory)\n },\n async writeFile(source, path) {\n if (!path.endsWith('.ts') || !source) {\n return\n }\n\n await this.fileManager.write(source, path)\n },\n async buildStart() {\n const oas = await swaggerApi.getOas(this.config)\n\n const schemas = oas.getDefinition().components?.schemas || {}\n const directory = pathParser.resolve(this.config.root, this.config.output.path)\n const mode = getPathMode(pathParser.resolve(directory, output))\n\n const nameResolver = (name: string) => pascalCase(name, { delimiter: '' })\n\n if (mode === 'directory') {\n const builder = await new TypeBuilder(oas).configure({\n nameResolver,\n fileResolver: async (name) => {\n const resolvedTypeId = await this.resolveId({\n fileName: `${name}.ts`,\n directory,\n pluginName,\n })\n\n const root = await this.resolveId({ fileName: ``, directory, pluginName })\n\n return getRelativePath(root, resolvedTypeId)\n },\n withJSDocs: true,\n })\n Object.entries(schemas).forEach(([name, schema]: [string, OpenAPIV3.SchemaObject]) => {\n // generate and pass through new code back to the core so it can be write to that file\n return builder.add({\n schema,\n name,\n })\n })\n\n const mapFolderSchema = async ([name]: [string, OpenAPIV3.SchemaObject]) => {\n const path = await this.resolveId({ fileName: `${nameResolver(name)}.ts`, directory, pluginName })\n\n if (!path) {\n return null\n }\n\n return this.addFile({\n path,\n fileName: `${nameResolver(name)}.ts`,\n source: await builder.print(name),\n })\n }\n\n const promises = Object.entries(schemas).map(mapFolderSchema)\n\n await Promise.all(promises)\n }\n\n if (mode === 'file') {\n // outside the loop because we need to add files to just one instance to have the correct sorting, see refsSorter\n const builder = new TypeBuilder(oas).configure({\n nameResolver,\n withJSDocs: true,\n })\n Object.entries(schemas).forEach(([name, schema]: [string, OpenAPIV3.SchemaObject]) => {\n // generate and pass through new code back to the core so it can be write to that file\n return builder.add({\n schema,\n name,\n })\n })\n\n const path = await this.resolveId({ fileName: '', directory, pluginName })\n if (!path) {\n return\n }\n\n await this.addFile({\n path,\n fileName: `${nameResolver(output)}.ts`,\n source: await builder.print(),\n })\n }\n\n const operationGenerator = new OperationGenerator({\n oas,\n mode,\n directory,\n fileManager: this.fileManager,\n nameResolver,\n resolveId: api.resolveId,\n })\n\n await operationGenerator.build()\n },\n async buildEnd() {\n await writeIndexes(this.config.root, this.config.output.path, { extensions: /\\.ts/, exclude: [/schemas/, /json/] })\n },\n }\n})\n","import { OasBuilder } from '@kubb/swagger'\nimport type { FileResolver } from '@kubb/swagger'\nimport { nameSorter } from '@kubb/core'\nimport { print } from '@kubb/ts-codegen'\n\nimport { ImportsGenerator, TypeGenerator } from '../generators'\n\nimport type ts from 'typescript'\nimport type { Refs } from '../generators'\n\ntype Generated = { refs: Refs; name: string; sources: ts.Node[] }\ntype Config = {\n fileResolver?: FileResolver\n nameResolver?: (name: string) => string\n withJSDocs?: boolean\n withImports?: boolean\n}\n\n// TODO create another function that sort based on the refs(first the ones without refs)\nfunction refsSorter(a: Generated, b: Generated) {\n if (Object.keys(a.refs)?.length < Object.keys(b.refs)?.length) {\n return -1\n }\n if (Object.keys(a.refs)?.length > Object.keys(b.refs)?.length) {\n return 1\n }\n return 0\n}\n\nexport class TypeBuilder extends OasBuilder<Config> {\n configure(config: Config) {\n this.config = config\n\n if (this.config.fileResolver) {\n this.config.withImports = true\n }\n\n return this\n }\n\n async print(name?: string) {\n const codes: string[] = []\n\n const generated = this.items\n .filter((gen) => (name ? gen.name === name : true))\n .sort(nameSorter)\n .map((gen) => {\n const generator = new TypeGenerator(this.oas, { withJSDocs: this.config.withJSDocs, nameResolver: this.config.nameResolver })\n const nodes = generator.build(gen.schema, this.config.nameResolver?.(gen.name) || gen.name, gen.description)\n\n return {\n refs: generator.refs,\n name: gen.name,\n sources: nodes,\n }\n })\n .sort(refsSorter)\n\n generated.forEach((item) => {\n codes.push(print(item.sources))\n })\n\n if (this.config.withImports) {\n const importsGenerator = new ImportsGenerator({ fileResolver: this.config.fileResolver })\n const codeImports = await importsGenerator.build(generated)\n\n if (codeImports) {\n codes.unshift(print(codeImports))\n }\n }\n\n return codes.join('\\n')\n }\n}\n","/* eslint-disable no-param-reassign */\nimport ts from 'typescript'\nimport { pascalCase, camelCase } from 'change-case'\nimport uniq from 'lodash.uniq'\n\nimport { getUniqueName, SchemaGenerator } from '@kubb/core'\nimport type { Oas, OpenAPIV3 } from '@kubb/swagger'\nimport { isReference } from '@kubb/swagger'\nimport {\n appendJSDocToNode,\n createEnumDeclaration,\n createIndexSignature,\n createIntersectionDeclaration,\n createPropertySignature,\n createTypeAliasDeclaration,\n modifier,\n} from '@kubb/ts-codegen'\n\nimport { keywordTypeNodes } from '../utils'\n\nconst { factory } = ts\n\n// based on https://github.com/cellular/oazapfts/blob/7ba226ebb15374e8483cc53e7532f1663179a22c/src/codegen/generate.ts#L398\n\n/**\n * Name is the ref name + resolved with the nameResolver\n * Key is the original name used\n */\nexport type Refs = Record<string, { name: string; key: string }>\n\ntype Options = {\n withJSDocs?: boolean\n nameResolver?: (name: string) => string\n}\nexport class TypeGenerator extends SchemaGenerator<Options, OpenAPIV3.SchemaObject, ts.Node[]> {\n // Collect the types of all referenced schemas so we can export them later\n public static usedEnumNames: Record<string, number> = {}\n\n refs: Refs = {}\n\n extraNodes: ts.Node[] = []\n\n aliases: ts.TypeAliasDeclaration[] = []\n\n // Keep track of already used type aliases\n usedAliasNames: Record<string, number> = {}\n\n constructor(public readonly oas: Oas, options: Options = { withJSDocs: true, nameResolver: (name) => name }) {\n super(options)\n\n return this\n }\n\n build(schema: OpenAPIV3.SchemaObject, name: string, description?: string) {\n const nodes: ts.Node[] = []\n const type = this.getTypeFromSchema(schema, name)\n\n if (!type) {\n return this.extraNodes\n }\n\n const node = createTypeAliasDeclaration({\n modifiers: [modifier.export],\n name,\n type,\n })\n\n if (description) {\n nodes.push(\n appendJSDocToNode({\n node,\n comments: [`@description ${description}`],\n })\n )\n } else {\n nodes.push(node)\n }\n\n // filter out if the export name is the same as one that we already defined in extraNodes(see enum)\n const filterdNodes = nodes.filter(\n (node: ts.Node) =>\n !this.extraNodes.some(\n (extraNode: ts.Node) => (extraNode as ts.TypeAliasDeclaration)?.name?.escapedText === (node as ts.TypeAliasDeclaration)?.name?.escapedText\n )\n )\n\n return [...this.extraNodes, ...filterdNodes]\n }\n\n /**\n * Creates a type node from a given schema.\n * Delegates to getBaseTypeFromSchema internally and\n * optionally adds a union with null.\n */\n private getTypeFromSchema(schema: OpenAPIV3.SchemaObject, name?: string): ts.TypeNode | null {\n const type = this.getBaseTypeFromSchema(schema, name)\n\n if (!type) {\n return null\n }\n\n if (schema) {\n return type\n }\n\n return factory.createUnionTypeNode([type, keywordTypeNodes.null])\n }\n\n /**\n * Recursively creates a type literal with the given props.\n */\n private getTypeFromProperties(baseSchema?: OpenAPIV3.SchemaObject, baseName?: string) {\n const props = baseSchema?.properties || {}\n const required = baseSchema?.required\n const additionalProperties = baseSchema?.additionalProperties\n\n const members: Array<ts.TypeElement | null> = Object.keys(props).map((name) => {\n const schema = props[name] as OpenAPIV3.SchemaObject\n\n const isRequired = required && required.includes(name)\n let type: ts.TypeNode | null\n if (schema.enum) {\n type = this.getTypeFromSchema(schema, pascalCase(`${baseName} ${name}`, { delimiter: '' }))\n } else {\n type = this.getTypeFromSchema(schema, pascalCase(`${baseName} ${name}`, { delimiter: '' }))\n }\n\n if (!type) {\n return null\n }\n\n if (!isRequired) {\n type = factory.createUnionTypeNode([type, keywordTypeNodes.undefined])\n }\n const propertySignature = createPropertySignature({\n questionToken: !isRequired,\n name,\n type,\n })\n if (this.options.withJSDocs) {\n return appendJSDocToNode({\n node: propertySignature,\n comments: [\n schema.description && `@description ${schema.description}`,\n schema.type && `@type ${schema.type}${isRequired ? '' : ' | undefined'} ${schema.format || ''}`,\n schema.example && `@example ${schema.example}`,\n ],\n })\n }\n\n return propertySignature\n })\n if (additionalProperties) {\n const type = additionalProperties === true ? keywordTypeNodes.any : this.getTypeFromSchema(additionalProperties as OpenAPIV3.SchemaObject)\n\n if (type) {\n members.push(createIndexSignature(type))\n }\n }\n return factory.createTypeLiteralNode(members.filter(Boolean) as ts.TypeElement[])\n }\n\n /**\n * Create a type alias for the schema referenced by the given ReferenceObject\n */\n private getRefAlias(obj: OpenAPIV3.ReferenceObject) {\n const { $ref } = obj\n let ref = this.refs[$ref]\n\n if (!ref) {\n const name = pascalCase(getUniqueName($ref.replace(/.+\\//, ''), this.usedAliasNames), { delimiter: '' })\n\n // eslint-disable-next-line no-multi-assign\n ref = this.refs[$ref] = {\n name: this.options.nameResolver?.(name) || name,\n key: name,\n }\n }\n\n return factory.createTypeReferenceNode(ref.name, undefined)\n }\n\n /**\n * This is the very core of the OpenAPI to TS conversion - it takes a\n * schema and returns the appropriate type.\n */\n private getBaseTypeFromSchema(schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject | undefined, name?: string): ts.TypeNode | null {\n if (!schema) {\n return keywordTypeNodes.any\n }\n\n if (isReference(schema)) {\n return this.getRefAlias(schema)\n }\n\n if (schema.oneOf) {\n // union\n const schemaWithoutOneOf = { ...schema, oneOf: undefined }\n\n return createIntersectionDeclaration({\n nodes: [\n this.getBaseTypeFromSchema(schemaWithoutOneOf, name),\n factory.createParenthesizedType(\n factory.createUnionTypeNode(\n schema.oneOf\n .map((item) => {\n return this.getBaseTypeFromSchema(item)\n })\n .filter(Boolean) as ts.TypeNode[]\n )\n ),\n ].filter(Boolean) as ts.TypeNode[],\n })\n }\n\n if (schema.anyOf) {\n // TODO anyOf -> union\n }\n if (schema.allOf) {\n // intersection/add\n const schemaWithoutAllOf = { ...schema, allOf: undefined }\n\n return createIntersectionDeclaration({\n nodes: [\n this.getBaseTypeFromSchema(schemaWithoutAllOf, name),\n factory.createParenthesizedType(\n factory.createIntersectionTypeNode(\n schema.allOf\n .map((item) => {\n return this.getBaseTypeFromSchema(item)\n })\n .filter(Boolean) as ts.TypeNode[]\n )\n ),\n ].filter(Boolean) as ts.TypeNode[],\n })\n }\n\n if (schema.enum && name) {\n const enumName = getUniqueName(name, TypeGenerator.usedEnumNames)\n this.extraNodes.push(\n ...createEnumDeclaration({\n name: camelCase(enumName, { delimiter: '' }),\n typeName: pascalCase(enumName, { delimiter: '' }),\n enums: uniq(schema.enum),\n })\n )\n return factory.createTypeReferenceNode(pascalCase(enumName, { delimiter: '' }), undefined)\n }\n\n if ('items' in schema) {\n // items -> array\n const node = this.getTypeFromSchema(schema.items as OpenAPIV3.SchemaObject, name)\n if (node) {\n return factory.createArrayTypeNode(node)\n }\n }\n\n if (schema.properties || schema.additionalProperties) {\n // properties -> literal type\n return this.getTypeFromProperties(schema, name)\n }\n\n if (schema.type) {\n if (schema.type === 'object') {\n if (!schema.additionalProperties && !schema.properties && schema.type === 'object') {\n return null\n }\n }\n if (Array.isArray(schema.type)) {\n // OPENAPI v3.1.0: https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0\n const [type, nullable] = schema.type\n\n return factory.createUnionTypeNode(\n [\n this.getBaseTypeFromSchema(\n {\n ...schema,\n type,\n },\n name\n )!,\n nullable ? factory.createLiteralTypeNode(factory.createNull()) : undefined,\n ].filter(Boolean) as ts.TypeNode[]\n )\n }\n // string, boolean, null, number\n if (schema.type in keywordTypeNodes) {\n return keywordTypeNodes[schema.type as keyof typeof keywordTypeNodes]\n }\n }\n\n if (schema.format === 'binary') {\n return factory.createTypeReferenceNode('Blob', [])\n }\n\n return keywordTypeNodes.any\n }\n}\n","import ts from 'typescript'\n\nconst { factory } = ts\n\nexport const keywordTypeNodes = {\n any: factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),\n number: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n integer: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n object: factory.createKeywordTypeNode(ts.SyntaxKind.ObjectKeyword),\n string: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n boolean: factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword),\n undefined: factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword),\n null: factory.createLiteralTypeNode(factory.createToken(ts.SyntaxKind.NullKeyword)),\n} as const\n","import uniq from 'lodash.uniq'\n\nimport { Generator } from '@kubb/core'\nimport type { FileResolver } from '@kubb/swagger'\nimport { createImportDeclaration } from '@kubb/ts-codegen'\n\nimport type { Refs } from './TypeGenerator'\nimport type ts from 'typescript'\n\ntype Options = {\n fileResolver?: FileResolver\n}\nexport class ImportsGenerator extends Generator<Options> {\n async build(items: Array<{ refs: Refs; sources: ts.Node[]; name: string }>): Promise<Array<ts.ImportDeclaration> | undefined> {\n const refs = items.reduce((acc, currentValue) => {\n return {\n ...acc,\n ...currentValue.refs,\n }\n }, {} as Refs)\n\n if (Object.keys(refs).length === 0) {\n return undefined\n }\n\n // add imports based on $ref\n const importPromises = uniq(Object.keys(refs))\n .filter(($ref: string) => {\n // when using a $ref inside a type we should not repeat that import\n const { key } = refs[$ref]\n return !items.find((item) =>\n item.sources.find((node: ts.Node) => (node as ts.TypeAliasDeclaration).name?.escapedText.toString().toLowerCase() === key.toLowerCase())\n )\n })\n .map(async ($ref: string) => {\n const { name } = refs[$ref]\n\n const path = (await this.options.fileResolver?.(name)) || `./${name}`\n\n // TODO weird hacky fix\n if (path === './' || path === '.') {\n return undefined\n }\n\n return createImportDeclaration({\n name: [name],\n path: path.replace('./../', '../'),\n })\n })\n\n const nodes = await Promise.all(importPromises)\n\n return nodes.filter(Boolean) as ts.ImportDeclaration[]\n }\n}\n","import type { File, FileManager, PathMode } from '@kubb/core'\nimport { getRelativePath } from '@kubb/core'\nimport { OperationGenerator as Generator } from '@kubb/swagger'\nimport type { FileResolver, Oas } from '@kubb/swagger'\n\nimport { TypeBuilder } from '../builders'\n\nimport type { Api } from '../types'\n\ntype Options = {\n oas: Oas\n resolveId: Api['resolveId']\n mode: PathMode\n fileManager: FileManager\n nameResolver: (name: string) => string\n directory: string\n}\n\nexport class OperationGenerator extends Generator<Options> {\n async getGet(path: string): Promise<File | null> {\n const { resolveId, directory, mode, nameResolver, oas } = this.options\n\n const operation = oas.operation(path, 'get')\n\n if (!operation.schema.operationId) return null\n\n const schemas = this.getSchemas(operation)\n const typeName = `${nameResolver(operation.getOperationId())}.ts`\n const typeFilePath = await resolveId(typeName, directory)\n\n const fileResolver: FileResolver = async (name) => {\n // Used when a react-query type(request, response, params) has an import of a global type\n const filePath = await resolveId(mode === 'file' ? '' : typeName, directory)\n // refs import, will always been created with the SwaggerTS plugin, our global type\n const resolvedTypeId = await resolveId(`${name}.ts`, directory)\n\n return getRelativePath(filePath, resolvedTypeId)\n }\n\n const typeSource = await new TypeBuilder(oas)\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.response)\n .configure({ fileResolver, withJSDocs: true })\n .print()\n\n if (typeFilePath) {\n return {\n path: typeFilePath,\n fileName: typeName,\n source: typeSource,\n }\n }\n\n return null\n }\n\n async getPost(path: string): Promise<File | null> {\n const { resolveId, directory, mode, nameResolver, oas } = this.options\n\n const operation = oas.operation(path, 'post')\n\n if (!operation.schema.operationId) return null\n\n const schemas = this.getSchemas(operation)\n const typeName = `${nameResolver(operation.getOperationId())}.ts`\n const typeFilePath = await resolveId(typeName, directory)\n\n const fileResolver: FileResolver = async (name) => {\n // Used when a react-query type(request, response, params) has an import of a global type\n const filePath = await resolveId(mode === 'file' ? '' : typeName, directory)\n // refs import, will always been created with the SwaggerTS plugin, our global type\n const resolvedTypeId = await resolveId(`${name}.ts`, directory)\n\n return getRelativePath(filePath, resolvedTypeId)\n }\n\n const typeSource = await new TypeBuilder(oas)\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.request)\n .add(schemas.response)\n .configure({ fileResolver, withJSDocs: true })\n .print()\n\n if (typeFilePath) {\n return {\n path: typeFilePath,\n fileName: typeName,\n source: typeSource,\n }\n }\n\n return null\n }\n\n async getPut(path: string): Promise<File | null> {\n const { resolveId, directory, mode, nameResolver, oas } = this.options\n\n const operation = oas.operation(path, 'put')\n\n if (!operation.schema.operationId) return null\n\n const schemas = this.getSchemas(operation)\n const typeName = `${nameResolver(operation.getOperationId())}.ts`\n const typeFilePath = await resolveId(typeName, directory)\n\n const fileResolver: FileResolver = async (name) => {\n // Used when a react-query type(request, response, params) has an import of a global type\n const filePath = await resolveId(mode === 'file' ? '' : typeName, directory)\n // refs import, will always been created with the SwaggerTS plugin, our global type\n const resolvedTypeId = await resolveId(`${name}.ts`, directory)\n\n return getRelativePath(filePath, resolvedTypeId)\n }\n\n const typeSource = await new TypeBuilder(oas)\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.request)\n .add(schemas.response)\n .configure({ fileResolver, withJSDocs: true })\n .print()\n\n if (typeFilePath) {\n return {\n path: typeFilePath,\n fileName: typeName,\n source: typeSource,\n }\n }\n\n return null\n }\n\n async getDelete(path: string): Promise<File | null> {\n const { resolveId, directory, mode, nameResolver, oas } = this.options\n\n const operation = oas.operation(path, 'delete')\n\n if (!operation.schema.operationId) return null\n\n const schemas = this.getSchemas(operation)\n const typeName = `${nameResolver(operation.getOperationId())}.ts`\n const typeFilePath = await resolveId(typeName, directory)\n\n const fileResolver: FileResolver = async (name) => {\n // Used when a react-query type(request, response, params) has an import of a global type\n const filePath = await resolveId(mode === 'file' ? '' : typeName, directory)\n // refs import, will always been created with the SwaggerTS plugin, our global type\n const resolvedTypeId = await resolveId(`${name}.ts`, directory)\n\n return getRelativePath(filePath, resolvedTypeId)\n }\n\n const typeSource = await new TypeBuilder(oas)\n .add(schemas.pathParams)\n .add(schemas.request)\n .add(schemas.response)\n .configure({ fileResolver, withJSDocs: true })\n .print()\n\n if (typeFilePath) {\n return {\n path: typeFilePath,\n fileName: typeName,\n source: typeSource,\n }\n }\n\n return null\n }\n\n async build() {\n return this.buildOperations({\n fileManager: this.options.fileManager,\n oas: this.options.oas,\n })\n }\n}\n","import { definePlugin } from './plugin'\n\nexport * from './plugin'\nexport * from './generators'\nexport * from './builders'\nexport * from './types'\nexport * from './utils'\nexport default definePlugin\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/plugin.ts","../src/builders/TypeBuilder.ts","../src/generators/TypeGenerator.ts","../src/utils/keywordTypeNodes.ts","../src/generators/ImportsGenerator.ts","../src/generators/OperationGenerator.ts","../src/index.ts"],"names":["pascalCase","getRelativePath","ts","factory","node","uniq","Generator"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-console */\n\nimport pathParser from 'path'\n\nimport { pascalCase } from 'change-case'\n\nimport { getRelativePath, createPlugin, getPathMode, validatePlugins } from '@kubb/core'\nimport { pluginName as swaggerPluginName } from '@kubb/swagger'\nimport type { Api as SwaggerApi, OpenAPIV3 } from '@kubb/swagger'\nimport { writeIndexes } from '@kubb/ts-codegen'\n\nimport { TypeBuilder } from './builders'\nimport { OperationGenerator } from './generators/OperationGenerator'\n\nimport type { Api, PluginOptions } from './types'\n\nexport const pluginName = 'swagger-ts' as const\n\nexport const definePlugin = createPlugin<PluginOptions>((options) => {\n const { output = 'models' } = options\n let swaggerApi: SwaggerApi\n\n const api: Api = {\n resolveId(fileName, directory) {\n if (!directory) {\n return null\n }\n\n const mode = getPathMode(pathParser.resolve(directory, output))\n\n if (mode === 'file') {\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 pathParser.resolve(directory, output)\n }\n\n return pathParser.resolve(directory, output, fileName)\n },\n }\n\n return {\n name: pluginName,\n options,\n kind: 'schema',\n api,\n validate(plugins) {\n const valid = validatePlugins(plugins, [swaggerPluginName])\n if (valid) {\n swaggerApi = plugins.find((plugin) => plugin.name === swaggerPluginName)?.api\n }\n\n return valid\n },\n resolveId(fileName, directory) {\n return api.resolveId(fileName, directory)\n },\n async writeFile(source, path) {\n if (!path.endsWith('.ts') || !source) {\n return\n }\n\n await this.fileManager.write(source, path)\n },\n async buildStart() {\n const oas = await swaggerApi.getOas(this.config)\n\n const schemas = oas.getDefinition().components?.schemas || {}\n const directory = pathParser.resolve(this.config.root, this.config.output.path)\n const mode = getPathMode(pathParser.resolve(directory, output))\n\n const nameResolver = (name: string) => pascalCase(name, { delimiter: '' })\n\n if (mode === 'directory') {\n const builder = await new TypeBuilder(oas).configure({\n nameResolver,\n fileResolver: async (name) => {\n const resolvedTypeId = await this.resolveId({\n fileName: `${name}.ts`,\n directory,\n pluginName,\n })\n\n const root = await this.resolveId({ fileName: ``, directory, pluginName })\n\n return getRelativePath(root, resolvedTypeId)\n },\n withJSDocs: true,\n })\n Object.entries(schemas).forEach(([name, schema]: [string, OpenAPIV3.SchemaObject]) => {\n // generate and pass through new code back to the core so it can be write to that file\n return builder.add({\n schema,\n name,\n })\n })\n\n const mapFolderSchema = async ([name]: [string, OpenAPIV3.SchemaObject]) => {\n const path = await this.resolveId({ fileName: `${nameResolver(name)}.ts`, directory, pluginName })\n\n if (!path) {\n return null\n }\n\n return this.addFile({\n path,\n fileName: `${nameResolver(name)}.ts`,\n source: await builder.print(name),\n })\n }\n\n const promises = Object.entries(schemas).map(mapFolderSchema)\n\n await Promise.all(promises)\n }\n\n if (mode === 'file') {\n // outside the loop because we need to add files to just one instance to have the correct sorting, see refsSorter\n const builder = new TypeBuilder(oas).configure({\n nameResolver,\n withJSDocs: true,\n })\n Object.entries(schemas).forEach(([name, schema]: [string, OpenAPIV3.SchemaObject]) => {\n // generate and pass through new code back to the core so it can be write to that file\n return builder.add({\n schema,\n name,\n })\n })\n\n const path = await this.resolveId({ fileName: '', directory, pluginName })\n if (!path) {\n return\n }\n\n await this.addFile({\n path,\n fileName: `${nameResolver(output)}.ts`,\n source: await builder.print(),\n })\n }\n\n const operationGenerator = new OperationGenerator({\n oas,\n mode,\n directory,\n fileManager: this.fileManager,\n nameResolver,\n resolveId: api.resolveId,\n })\n\n await operationGenerator.build()\n },\n async buildEnd() {\n await writeIndexes(this.config.root, this.config.output.path, { extensions: /\\.ts/, exclude: [/schemas/, /json/] })\n },\n }\n})\n","import { OasBuilder } from '@kubb/swagger'\nimport type { FileResolver } from '@kubb/swagger'\nimport { nameSorter } from '@kubb/core'\nimport { print } from '@kubb/ts-codegen'\n\nimport { ImportsGenerator, TypeGenerator } from '../generators'\n\nimport type ts from 'typescript'\nimport type { Refs } from '../generators'\n\ntype Generated = { refs: Refs; name: string; sources: ts.Node[] }\ntype Config = {\n fileResolver?: FileResolver\n nameResolver?: (name: string) => string\n withJSDocs?: boolean\n withImports?: boolean\n}\n\n// TODO create another function that sort based on the refs(first the ones without refs)\nfunction refsSorter(a: Generated, b: Generated) {\n if (Object.keys(a.refs)?.length < Object.keys(b.refs)?.length) {\n return -1\n }\n if (Object.keys(a.refs)?.length > Object.keys(b.refs)?.length) {\n return 1\n }\n return 0\n}\n\nexport class TypeBuilder extends OasBuilder<Config> {\n configure(config: Config) {\n this.config = config\n\n if (this.config.fileResolver) {\n this.config.withImports = true\n }\n\n return this\n }\n\n async print(name?: string) {\n const codes: string[] = []\n\n const generated = this.items\n .filter((gen) => (name ? gen.name === name : true))\n .sort(nameSorter)\n .map((gen) => {\n const generator = new TypeGenerator(this.oas, { withJSDocs: this.config.withJSDocs, nameResolver: this.config.nameResolver })\n const nodes = generator.build(gen.schema, this.config.nameResolver?.(gen.name) || gen.name, gen.description)\n\n return {\n refs: generator.refs,\n name: gen.name,\n sources: nodes,\n }\n })\n .sort(refsSorter)\n\n generated.forEach((item) => {\n codes.push(print(item.sources))\n })\n\n if (this.config.withImports) {\n const importsGenerator = new ImportsGenerator({ fileResolver: this.config.fileResolver })\n const codeImports = await importsGenerator.build(generated)\n\n if (codeImports) {\n codes.unshift(print(codeImports))\n }\n }\n\n return codes.join('\\n')\n }\n}\n","/* eslint-disable no-param-reassign */\nimport ts from 'typescript'\nimport { pascalCase, camelCase } from 'change-case'\nimport uniq from 'lodash.uniq'\n\nimport { getUniqueName, SchemaGenerator } from '@kubb/core'\nimport type { Oas, OpenAPIV3 } from '@kubb/swagger'\nimport { isReference } from '@kubb/swagger'\nimport {\n appendJSDocToNode,\n createEnumDeclaration,\n createIndexSignature,\n createIntersectionDeclaration,\n createPropertySignature,\n createTypeAliasDeclaration,\n modifier,\n} from '@kubb/ts-codegen'\n\nimport { keywordTypeNodes } from '../utils'\n\nconst { factory } = ts\n\n// based on https://github.com/cellular/oazapfts/blob/7ba226ebb15374e8483cc53e7532f1663179a22c/src/codegen/generate.ts#L398\n\n/**\n * Name is the ref name + resolved with the nameResolver\n * Key is the original name used\n */\nexport type Refs = Record<string, { name: string; key: string }>\n\ntype Options = {\n withJSDocs?: boolean\n nameResolver?: (name: string) => string\n}\nexport class TypeGenerator extends SchemaGenerator<Options, OpenAPIV3.SchemaObject, ts.Node[]> {\n // Collect the types of all referenced schemas so we can export them later\n public static usedEnumNames: Record<string, number> = {}\n\n refs: Refs = {}\n\n extraNodes: ts.Node[] = []\n\n aliases: ts.TypeAliasDeclaration[] = []\n\n // Keep track of already used type aliases\n usedAliasNames: Record<string, number> = {}\n\n constructor(public readonly oas: Oas, options: Options = { withJSDocs: true, nameResolver: (name) => name }) {\n super(options)\n\n return this\n }\n\n build(schema: OpenAPIV3.SchemaObject, name: string, description?: string) {\n const nodes: ts.Node[] = []\n const type = this.getTypeFromSchema(schema, name)\n\n if (!type) {\n return this.extraNodes\n }\n\n const node = createTypeAliasDeclaration({\n modifiers: [modifier.export],\n name,\n type,\n })\n\n if (description) {\n nodes.push(\n appendJSDocToNode({\n node,\n comments: [`@description ${description}`],\n })\n )\n } else {\n nodes.push(node)\n }\n\n // filter out if the export name is the same as one that we already defined in extraNodes(see enum)\n const filterdNodes = nodes.filter(\n (node: ts.Node) =>\n !this.extraNodes.some(\n (extraNode: ts.Node) => (extraNode as ts.TypeAliasDeclaration)?.name?.escapedText === (node as ts.TypeAliasDeclaration)?.name?.escapedText\n )\n )\n\n return [...this.extraNodes, ...filterdNodes]\n }\n\n /**\n * Creates a type node from a given schema.\n * Delegates to getBaseTypeFromSchema internally and\n * optionally adds a union with null.\n */\n private getTypeFromSchema(schema: OpenAPIV3.SchemaObject, name?: string): ts.TypeNode | null {\n const type = this.getBaseTypeFromSchema(schema, name)\n\n if (!type) {\n return null\n }\n\n if (schema) {\n return type\n }\n\n return factory.createUnionTypeNode([type, keywordTypeNodes.null])\n }\n\n /**\n * Recursively creates a type literal with the given props.\n */\n private getTypeFromProperties(baseSchema?: OpenAPIV3.SchemaObject, baseName?: string) {\n const props = baseSchema?.properties || {}\n const required = baseSchema?.required\n const additionalProperties = baseSchema?.additionalProperties\n\n const members: Array<ts.TypeElement | null> = Object.keys(props).map((name) => {\n const schema = props[name] as OpenAPIV3.SchemaObject\n\n const isRequired = required && required.includes(name)\n let type: ts.TypeNode | null\n if (schema.enum) {\n type = this.getTypeFromSchema(schema, pascalCase(`${baseName} ${name}`, { delimiter: '' }))\n } else {\n type = this.getTypeFromSchema(schema, pascalCase(`${baseName} ${name}`, { delimiter: '' }))\n }\n\n if (!type) {\n return null\n }\n\n if (!isRequired) {\n type = factory.createUnionTypeNode([type, keywordTypeNodes.undefined])\n }\n const propertySignature = createPropertySignature({\n questionToken: !isRequired,\n name,\n type,\n })\n if (this.options.withJSDocs) {\n return appendJSDocToNode({\n node: propertySignature,\n comments: [\n schema.description && `@description ${schema.description}`,\n schema.type && `@type ${schema.type}${isRequired ? '' : ' | undefined'} ${schema.format || ''}`,\n schema.example && `@example ${schema.example}`,\n ],\n })\n }\n\n return propertySignature\n })\n if (additionalProperties) {\n const type = additionalProperties === true ? keywordTypeNodes.any : this.getTypeFromSchema(additionalProperties as OpenAPIV3.SchemaObject)\n\n if (type) {\n members.push(createIndexSignature(type))\n }\n }\n return factory.createTypeLiteralNode(members.filter(Boolean) as ts.TypeElement[])\n }\n\n /**\n * Create a type alias for the schema referenced by the given ReferenceObject\n */\n private getRefAlias(obj: OpenAPIV3.ReferenceObject) {\n const { $ref } = obj\n let ref = this.refs[$ref]\n\n if (!ref) {\n const name = pascalCase(getUniqueName($ref.replace(/.+\\//, ''), this.usedAliasNames), { delimiter: '' })\n\n // eslint-disable-next-line no-multi-assign\n ref = this.refs[$ref] = {\n name: this.options.nameResolver?.(name) || name,\n key: name,\n }\n }\n\n return factory.createTypeReferenceNode(ref.name, undefined)\n }\n\n /**\n * This is the very core of the OpenAPI to TS conversion - it takes a\n * schema and returns the appropriate type.\n */\n private getBaseTypeFromSchema(schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject | undefined, name?: string): ts.TypeNode | null {\n if (!schema) {\n return keywordTypeNodes.any\n }\n\n if (isReference(schema)) {\n return this.getRefAlias(schema)\n }\n\n if (schema.oneOf) {\n // union\n const schemaWithoutOneOf = { ...schema, oneOf: undefined }\n\n return createIntersectionDeclaration({\n nodes: [\n this.getBaseTypeFromSchema(schemaWithoutOneOf, name),\n factory.createParenthesizedType(\n factory.createUnionTypeNode(\n schema.oneOf\n .map((item) => {\n return this.getBaseTypeFromSchema(item)\n })\n .filter(Boolean) as ts.TypeNode[]\n )\n ),\n ].filter(Boolean) as ts.TypeNode[],\n })\n }\n\n if (schema.anyOf) {\n // TODO anyOf -> union\n }\n if (schema.allOf) {\n // intersection/add\n const schemaWithoutAllOf = { ...schema, allOf: undefined }\n\n return createIntersectionDeclaration({\n nodes: [\n this.getBaseTypeFromSchema(schemaWithoutAllOf, name),\n factory.createParenthesizedType(\n factory.createIntersectionTypeNode(\n schema.allOf\n .map((item) => {\n return this.getBaseTypeFromSchema(item)\n })\n .filter(Boolean) as ts.TypeNode[]\n )\n ),\n ].filter(Boolean) as ts.TypeNode[],\n })\n }\n\n if (schema.enum && name) {\n const enumName = getUniqueName(name, TypeGenerator.usedEnumNames)\n this.extraNodes.push(\n ...createEnumDeclaration({\n name: camelCase(enumName, { delimiter: '' }),\n typeName: pascalCase(enumName, { delimiter: '' }),\n enums: uniq(schema.enum),\n })\n )\n return factory.createTypeReferenceNode(pascalCase(enumName, { delimiter: '' }), undefined)\n }\n\n if ('items' in schema) {\n // items -> array\n const node = this.getTypeFromSchema(schema.items as OpenAPIV3.SchemaObject, name)\n if (node) {\n return factory.createArrayTypeNode(node)\n }\n }\n\n if (schema.properties || schema.additionalProperties) {\n // properties -> literal type\n return this.getTypeFromProperties(schema, name)\n }\n\n if (schema.type) {\n if (schema.type === 'object') {\n if (!schema.additionalProperties && !schema.properties && schema.type === 'object') {\n return null\n }\n }\n if (Array.isArray(schema.type)) {\n // OPENAPI v3.1.0: https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0\n const [type, nullable] = schema.type\n\n return factory.createUnionTypeNode(\n [\n this.getBaseTypeFromSchema(\n {\n ...schema,\n type,\n },\n name\n )!,\n nullable ? factory.createLiteralTypeNode(factory.createNull()) : undefined,\n ].filter(Boolean) as ts.TypeNode[]\n )\n }\n // string, boolean, null, number\n if (schema.type in keywordTypeNodes) {\n return keywordTypeNodes[schema.type as keyof typeof keywordTypeNodes]\n }\n }\n\n if (schema.format === 'binary') {\n return factory.createTypeReferenceNode('Blob', [])\n }\n\n return keywordTypeNodes.any\n }\n}\n","import ts from 'typescript'\n\nconst { factory } = ts\n\nexport const keywordTypeNodes = {\n any: factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),\n number: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n integer: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n object: factory.createKeywordTypeNode(ts.SyntaxKind.ObjectKeyword),\n string: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n boolean: factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword),\n undefined: factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword),\n null: factory.createLiteralTypeNode(factory.createToken(ts.SyntaxKind.NullKeyword)),\n} as const\n","import uniq from 'lodash.uniq'\n\nimport { Generator } from '@kubb/core'\nimport type { FileResolver } from '@kubb/swagger'\nimport { createImportDeclaration } from '@kubb/ts-codegen'\n\nimport type { Refs } from './TypeGenerator'\nimport type ts from 'typescript'\n\ntype Options = {\n fileResolver?: FileResolver\n}\nexport class ImportsGenerator extends Generator<Options> {\n async build(items: Array<{ refs: Refs; sources: ts.Node[]; name: string }>): Promise<Array<ts.ImportDeclaration> | undefined> {\n const refs = items.reduce((acc, currentValue) => {\n return {\n ...acc,\n ...currentValue.refs,\n }\n }, {} as Refs)\n\n if (Object.keys(refs).length === 0) {\n return undefined\n }\n\n // add imports based on $ref\n const importPromises = uniq(Object.keys(refs))\n .filter(($ref: string) => {\n // when using a $ref inside a type we should not repeat that import\n const { key } = refs[$ref]\n return !items.find((item) =>\n item.sources.find((node: ts.Node) => (node as ts.TypeAliasDeclaration).name?.escapedText.toString().toLowerCase() === key.toLowerCase())\n )\n })\n .map(async ($ref: string) => {\n const { name } = refs[$ref]\n\n const path = (await this.options.fileResolver?.(name)) || `./${name}`\n\n // TODO weird hacky fix\n if (path === './' || path === '.') {\n return undefined\n }\n\n return createImportDeclaration({\n name: [name],\n path: path.replace('./../', '../'),\n })\n })\n\n const nodes = await Promise.all(importPromises)\n\n return nodes.filter(Boolean) as ts.ImportDeclaration[]\n }\n}\n","import type { File, FileManager, PathMode } from '@kubb/core'\nimport { getRelativePath } from '@kubb/core'\nimport { OperationGenerator as Generator } from '@kubb/swagger'\nimport type { FileResolver, Oas, Operation, OperationSchemas } from '@kubb/swagger'\n\nimport { TypeBuilder } from '../builders'\n\nimport type { Api } from '../types'\n\ntype Options = {\n oas: Oas\n resolveId: Api['resolveId']\n mode: PathMode\n fileManager: FileManager\n nameResolver: (name: string) => string\n directory: string\n}\n\nexport class OperationGenerator extends Generator<Options> {\n async all(): Promise<File | null> {\n return null\n }\n\n async get(operation: Operation, schemas: OperationSchemas): Promise<File | null> {\n const { resolveId, directory, mode, nameResolver, oas } = this.options\n\n const typeName = `${nameResolver(operation.getOperationId())}.ts`\n const typeFilePath = await resolveId(typeName, directory)\n\n const fileResolver: FileResolver = async (name) => {\n // Used when a react-query type(request, response, params) has an import of a global type\n const filePath = await resolveId(mode === 'file' ? '' : typeName, directory)\n // refs import, will always been created with the SwaggerTS plugin, our global type\n const resolvedTypeId = await resolveId(`${name}.ts`, directory)\n\n return getRelativePath(filePath, resolvedTypeId)\n }\n\n const typeSource = await new TypeBuilder(oas)\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.response)\n .configure({ fileResolver, withJSDocs: true })\n .print()\n\n if (typeFilePath) {\n return {\n path: typeFilePath,\n fileName: typeName,\n source: typeSource,\n }\n }\n\n return null\n }\n\n async post(operation: Operation, schemas: OperationSchemas): Promise<File | null> {\n const { resolveId, directory, mode, nameResolver, oas } = this.options\n\n const typeName = `${nameResolver(operation.getOperationId())}.ts`\n const typeFilePath = await resolveId(typeName, directory)\n\n const fileResolver: FileResolver = async (name) => {\n // Used when a react-query type(request, response, params) has an import of a global type\n const filePath = await resolveId(mode === 'file' ? '' : typeName, directory)\n // refs import, will always been created with the SwaggerTS plugin, our global type\n const resolvedTypeId = await resolveId(`${name}.ts`, directory)\n\n return getRelativePath(filePath, resolvedTypeId)\n }\n\n const typeSource = await new TypeBuilder(oas)\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.request)\n .add(schemas.response)\n .configure({ fileResolver, withJSDocs: true })\n .print()\n\n if (typeFilePath) {\n return {\n path: typeFilePath,\n fileName: typeName,\n source: typeSource,\n }\n }\n\n return null\n }\n\n async put(operation: Operation, schemas: OperationSchemas): Promise<File | null> {\n const { resolveId, directory, mode, nameResolver, oas } = this.options\n\n const typeName = `${nameResolver(operation.getOperationId())}.ts`\n const typeFilePath = await resolveId(typeName, directory)\n\n const fileResolver: FileResolver = async (name) => {\n // Used when a react-query type(request, response, params) has an import of a global type\n const filePath = await resolveId(mode === 'file' ? '' : typeName, directory)\n // refs import, will always been created with the SwaggerTS plugin, our global type\n const resolvedTypeId = await resolveId(`${name}.ts`, directory)\n\n return getRelativePath(filePath, resolvedTypeId)\n }\n\n const typeSource = await new TypeBuilder(oas)\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.request)\n .add(schemas.response)\n .configure({ fileResolver, withJSDocs: true })\n .print()\n\n if (typeFilePath) {\n return {\n path: typeFilePath,\n fileName: typeName,\n source: typeSource,\n }\n }\n\n return null\n }\n\n async delete(operation: Operation, schemas: OperationSchemas): Promise<File | null> {\n const { resolveId, directory, mode, nameResolver, oas } = this.options\n\n const typeName = `${nameResolver(operation.getOperationId())}.ts`\n const typeFilePath = await resolveId(typeName, directory)\n\n const fileResolver: FileResolver = async (name) => {\n // Used when a react-query type(request, response, params) has an import of a global type\n const filePath = await resolveId(mode === 'file' ? '' : typeName, directory)\n // refs import, will always been created with the SwaggerTS plugin, our global type\n const resolvedTypeId = await resolveId(`${name}.ts`, directory)\n\n return getRelativePath(filePath, resolvedTypeId)\n }\n\n const typeSource = await new TypeBuilder(oas)\n .add(schemas.pathParams)\n .add(schemas.request)\n .add(schemas.response)\n .configure({ fileResolver, withJSDocs: true })\n .print()\n\n if (typeFilePath) {\n return {\n path: typeFilePath,\n fileName: typeName,\n source: typeSource,\n }\n }\n\n return null\n }\n}\n","import { definePlugin } from './plugin'\n\nexport * from './plugin'\nexport * from './generators'\nexport * from './builders'\nexport * from './types'\nexport * from './utils'\nexport default definePlugin\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kubb/swagger-ts",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.4",
|
|
4
4
|
"description": "Generator swagger-ts",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -38,12 +38,12 @@
|
|
|
38
38
|
"!/**/__tests__/**"
|
|
39
39
|
],
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@kubb/core": "1.0.0-beta.
|
|
42
|
-
"@kubb/swagger": "1.0.0-beta.
|
|
43
|
-
"@kubb/ts-codegen": "1.0.0-beta.
|
|
41
|
+
"@kubb/core": "1.0.0-beta.4",
|
|
42
|
+
"@kubb/swagger": "1.0.0-beta.4",
|
|
43
|
+
"@kubb/ts-codegen": "1.0.0-beta.4",
|
|
44
44
|
"change-case": "^4.1.2",
|
|
45
45
|
"lodash.uniq": "^4.5.0",
|
|
46
|
-
"typescript": "^5.0.
|
|
46
|
+
"typescript": "^5.0.3"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@types/lodash.uniq": "^4.5.7",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { File, FileManager, PathMode } from '@kubb/core'
|
|
2
2
|
import { getRelativePath } from '@kubb/core'
|
|
3
3
|
import { OperationGenerator as Generator } from '@kubb/swagger'
|
|
4
|
-
import type { FileResolver, Oas } from '@kubb/swagger'
|
|
4
|
+
import type { FileResolver, Oas, Operation, OperationSchemas } from '@kubb/swagger'
|
|
5
5
|
|
|
6
6
|
import { TypeBuilder } from '../builders'
|
|
7
7
|
|
|
@@ -17,14 +17,13 @@ type Options = {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export class OperationGenerator extends Generator<Options> {
|
|
20
|
-
async
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const operation = oas.operation(path, 'get')
|
|
20
|
+
async all(): Promise<File | null> {
|
|
21
|
+
return null
|
|
22
|
+
}
|
|
24
23
|
|
|
25
|
-
|
|
24
|
+
async get(operation: Operation, schemas: OperationSchemas): Promise<File | null> {
|
|
25
|
+
const { resolveId, directory, mode, nameResolver, oas } = this.options
|
|
26
26
|
|
|
27
|
-
const schemas = this.getSchemas(operation)
|
|
28
27
|
const typeName = `${nameResolver(operation.getOperationId())}.ts`
|
|
29
28
|
const typeFilePath = await resolveId(typeName, directory)
|
|
30
29
|
|
|
@@ -55,14 +54,9 @@ export class OperationGenerator extends Generator<Options> {
|
|
|
55
54
|
return null
|
|
56
55
|
}
|
|
57
56
|
|
|
58
|
-
async
|
|
57
|
+
async post(operation: Operation, schemas: OperationSchemas): Promise<File | null> {
|
|
59
58
|
const { resolveId, directory, mode, nameResolver, oas } = this.options
|
|
60
59
|
|
|
61
|
-
const operation = oas.operation(path, 'post')
|
|
62
|
-
|
|
63
|
-
if (!operation.schema.operationId) return null
|
|
64
|
-
|
|
65
|
-
const schemas = this.getSchemas(operation)
|
|
66
60
|
const typeName = `${nameResolver(operation.getOperationId())}.ts`
|
|
67
61
|
const typeFilePath = await resolveId(typeName, directory)
|
|
68
62
|
|
|
@@ -94,14 +88,9 @@ export class OperationGenerator extends Generator<Options> {
|
|
|
94
88
|
return null
|
|
95
89
|
}
|
|
96
90
|
|
|
97
|
-
async
|
|
91
|
+
async put(operation: Operation, schemas: OperationSchemas): Promise<File | null> {
|
|
98
92
|
const { resolveId, directory, mode, nameResolver, oas } = this.options
|
|
99
93
|
|
|
100
|
-
const operation = oas.operation(path, 'put')
|
|
101
|
-
|
|
102
|
-
if (!operation.schema.operationId) return null
|
|
103
|
-
|
|
104
|
-
const schemas = this.getSchemas(operation)
|
|
105
94
|
const typeName = `${nameResolver(operation.getOperationId())}.ts`
|
|
106
95
|
const typeFilePath = await resolveId(typeName, directory)
|
|
107
96
|
|
|
@@ -133,14 +122,9 @@ export class OperationGenerator extends Generator<Options> {
|
|
|
133
122
|
return null
|
|
134
123
|
}
|
|
135
124
|
|
|
136
|
-
async
|
|
125
|
+
async delete(operation: Operation, schemas: OperationSchemas): Promise<File | null> {
|
|
137
126
|
const { resolveId, directory, mode, nameResolver, oas } = this.options
|
|
138
127
|
|
|
139
|
-
const operation = oas.operation(path, 'delete')
|
|
140
|
-
|
|
141
|
-
if (!operation.schema.operationId) return null
|
|
142
|
-
|
|
143
|
-
const schemas = this.getSchemas(operation)
|
|
144
128
|
const typeName = `${nameResolver(operation.getOperationId())}.ts`
|
|
145
129
|
const typeFilePath = await resolveId(typeName, directory)
|
|
146
130
|
|
|
@@ -170,11 +154,4 @@ export class OperationGenerator extends Generator<Options> {
|
|
|
170
154
|
|
|
171
155
|
return null
|
|
172
156
|
}
|
|
173
|
-
|
|
174
|
-
async build() {
|
|
175
|
-
return this.buildOperations({
|
|
176
|
-
fileManager: this.options.fileManager,
|
|
177
|
-
oas: this.options.oas,
|
|
178
|
-
})
|
|
179
|
-
}
|
|
180
157
|
}
|