@automatons/typescript-client-axios 1.0.7 → 1.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/extractors/api.d.ts.map +1 -1
  2. package/extractors/api.js.map +1 -1
  3. package/generator/generate.d.ts.map +1 -1
  4. package/generator/generate.js.map +1 -1
  5. package/generator/index.d.ts.map +1 -1
  6. package/generator/index.js.map +1 -1
  7. package/generator/register.d.ts.map +1 -1
  8. package/generator/register.js.map +1 -1
  9. package/generator/setup.d.ts.map +1 -1
  10. package/generator/setup.js.map +1 -1
  11. package/generator/writer.d.ts.map +1 -1
  12. package/generator/writer.js.map +1 -1
  13. package/index.d.ts.map +1 -1
  14. package/index.js.map +1 -1
  15. package/package.json +11 -8
  16. package/paths.d.ts.map +1 -1
  17. package/paths.js.map +1 -1
  18. package/src/src/extractors/api.ts +13 -0
  19. package/src/src/generator/generate.ts +42 -0
  20. package/src/src/generator/index.ts +1 -0
  21. package/src/src/generator/register.ts +23 -0
  22. package/src/src/generator/setup.ts +20 -0
  23. package/src/src/generator/writer.ts +12 -0
  24. package/src/src/index.ts +7 -0
  25. package/src/src/paths.ts +8 -0
  26. package/src/src/templates/apis/abstractApi.hbs +63 -0
  27. package/src/src/templates/apis/api.hbs +17 -0
  28. package/src/src/templates/apis/index.hbs +3 -0
  29. package/src/src/templates/apis/partials/arguments/server.hbs +3 -0
  30. package/src/src/templates/apis/partials/arguments/server_interface.hbs +3 -0
  31. package/src/src/templates/apis/partials/class/arguments.hbs +21 -0
  32. package/src/src/templates/apis/partials/class/arguments_interface.hbs +21 -0
  33. package/src/src/templates/apis/partials/class/path.hbs +4 -0
  34. package/src/src/templates/apis/partials/class/request.hbs +14 -0
  35. package/src/src/templates/apis/partials/class/variables.hbs +4 -0
  36. package/src/src/templates/apis/partials/class.hbs +17 -0
  37. package/src/src/templates/apis/partials/config/arguments.hbs +19 -0
  38. package/src/src/templates/apis/partials/config/request/baseURL.hbs +1 -0
  39. package/src/src/templates/apis/partials/config/request/cookies.hbs +13 -0
  40. package/src/src/templates/apis/partials/config/request/headers.hbs +14 -0
  41. package/src/src/templates/apis/partials/config/request/queries.hbs +11 -0
  42. package/src/src/templates/apis/partials/config/request.hbs +19 -0
  43. package/src/src/templates/apis/partials/config/server.hbs +11 -0
  44. package/src/src/templates/apis/partials/config.hbs +14 -0
  45. package/src/src/templates/config.hbs +19 -0
  46. package/src/src/templates/index.hbs +3 -0
  47. package/src/src/templates/models/index.hbs +3 -0
  48. package/src/src/templates/models/model.hbs +6 -0
  49. package/src/src/templates/models/partials/allOf.hbs +7 -0
  50. package/src/src/templates/models/partials/array.hbs +6 -0
  51. package/src/src/templates/models/partials/boolean.hbs +1 -0
  52. package/src/src/templates/models/partials/nullable.hbs +1 -0
  53. package/src/src/templates/models/partials/number.hbs +6 -0
  54. package/src/src/templates/models/partials/object.hbs +13 -0
  55. package/src/src/templates/models/partials/oneOf.hbs +7 -0
  56. package/src/src/templates/models/partials/string.hbs +10 -0
  57. package/src/src/templates/models/partials/type.hbs +19 -0
  58. package/src/src/templates/partials/comment.hbs +24 -0
  59. package/src/src/templates/utils/formData.hbs +10 -0
  60. package/src/src/templates/utils/index.hbs +3 -0
  61. package/src/src/templates/utils/query.hbs +79 -0
  62. package/src/src/templates/utils/template.hbs +55 -0
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/extractors/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,GAAG,EAAO,MAAM,oBAAoB,CAAC;AAIzD,eAAO,MAAM,cAAc,QAAS,GAAG;;;;CAQtC,CAAC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"src/","sources":["extractors/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,GAAG,EAAO,MAAM,oBAAoB,CAAC;AAIzD,eAAO,MAAM,cAAc,QAAS,GAAG;;;;CAQtC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/extractors/api.ts"],"names":[],"mappings":";;;AAEA,MAAM,YAAY,GAAG,CAAC,IAAU,EAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEjG,MAAM,cAAc,GAAG,CAAC,GAAQ,EAAE,EAAE;IACzC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAC,OAAA,MAAA,MAAM,CAAC,MAAM,0CAAE,MAAM,CAAA,EAAA,CAAC;WAChE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,MAAM,CAAA,EAAA,CAAC;WAC/C,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,CAAA,EAAA,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,CAAA,EAAA,CAAC;WACxD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,CAAA,EAAA,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,WAAC,OAAA,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAA,EAAA,CAAC,CAAC;IAC5F,OAAO,EAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAC,CAAC;AAC9C,CAAC,CAAC;AARW,QAAA,cAAc,kBAQzB"}
1
+ {"version":3,"file":"api.js","sourceRoot":"src/","sources":["extractors/api.ts"],"names":[],"mappings":";;;AAEA,MAAM,YAAY,GAAG,CAAC,IAAU,EAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEjG,MAAM,cAAc,GAAG,CAAC,GAAQ,EAAE,EAAE;IACzC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAC,OAAA,MAAA,MAAM,CAAC,MAAM,0CAAE,MAAM,CAAA,EAAA,CAAC;WAChE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,MAAM,CAAA,EAAA,CAAC;WAC/C,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,CAAA,EAAA,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,CAAA,EAAA,CAAC;WACxD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,CAAA,EAAA,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,WAAC,OAAA,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAA,EAAA,CAAC,CAAC;IAC5F,OAAO,EAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAC,CAAC;AAC9C,CAAC,CAAC;AARW,QAAA,cAAc,kBAQzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/generator/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAE,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAO7D,eAAO,MAAM,QAAQ,YAAmB,OAAO,YAAY,iBAAiB,oBAkC3E,CAAC"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"src/","sources":["generator/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAE,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAO7D,eAAO,MAAM,QAAQ,YAAmB,OAAO,YAAY,iBAAiB,oBAkC3E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/generator/generate.ts"],"names":[],"mappings":";;;AACA,+CAA0C;AAC1C,qCAA+B;AAC/B,mCAA8B;AAC9B,2CAAiD;AAG1C,MAAM,QAAQ,GAAG,KAAK,EAAE,OAAgB,EAAE,QAA2B,EAAE,EAAE;IAC9E,MAAM,EAAC,MAAM,EAAC,GAAG,QAAQ,CAAC;IAC1B,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,IAAA,aAAK,GAAE,CAAC;IAEd,MAAM,EAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAC,GAAG,MAAM,IAAA,eAAM,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnE,IAAI,MAAM,CAAC,MAAM,EAAE;QACjB,QAAQ,CAAC,IAAI,CAAC,IAAA,cAAK,EAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;QAChF,MAAM,aAAa,GAAG,MAAM;aACzB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAA,cAAK,EAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9F,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAA;KAChC;IAED,IAAI,IAAI,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,IAAI,CACX,IAAA,cAAK,EAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,EAC3D,IAAA,cAAK,EAAC,sBAAsB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,EAAC,UAAU,EAAC,CAAC,CAChF,CAAC;QACF,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAA,cAAK,EAAC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE;YAC7F,GAAG;YACH,IAAI,EAAE,IAAA,oBAAc,EAAC,GAAG,CAAC;YACzB,UAAU;SACX,CAAC,CAAC,CAAC,CAAC;KACN;IAED,QAAQ,CAAC,IAAI,CACX,IAAA,cAAK,EAAC,WAAW,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,EAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAC,CAAC,EAClF,IAAA,cAAK,EAAC,YAAY,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,EAAC,UAAU,EAAC,CAAC,EACxD,IAAA,cAAK,EAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,EACvD,IAAA,cAAK,EAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,EAC7D,IAAA,cAAK,EAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,EACvD,IAAA,cAAK,EAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAC9D,CAAC;IACF,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;AAC9B,CAAC,CAAC;AAlCW,QAAA,QAAQ,YAkCnB"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"src/","sources":["generator/generate.ts"],"names":[],"mappings":";;;AACA,+CAA0C;AAC1C,qCAA+B;AAC/B,mCAA8B;AAC9B,2CAAiD;AAG1C,MAAM,QAAQ,GAAG,KAAK,EAAE,OAAgB,EAAE,QAA2B,EAAE,EAAE;IAC9E,MAAM,EAAC,MAAM,EAAC,GAAG,QAAQ,CAAC;IAC1B,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,IAAA,aAAK,GAAE,CAAC;IAEd,MAAM,EAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAC,GAAG,MAAM,IAAA,eAAM,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnE,IAAI,MAAM,CAAC,MAAM,EAAE;QACjB,QAAQ,CAAC,IAAI,CAAC,IAAA,cAAK,EAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;QAChF,MAAM,aAAa,GAAG,MAAM;aACzB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAA,cAAK,EAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9F,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAA;KAChC;IAED,IAAI,IAAI,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,IAAI,CACX,IAAA,cAAK,EAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,EAC3D,IAAA,cAAK,EAAC,sBAAsB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,EAAC,UAAU,EAAC,CAAC,CAChF,CAAC;QACF,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAA,cAAK,EAAC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE;YAC7F,GAAG;YACH,IAAI,EAAE,IAAA,oBAAc,EAAC,GAAG,CAAC;YACzB,UAAU;SACX,CAAC,CAAC,CAAC,CAAC;KACN;IAED,QAAQ,CAAC,IAAI,CACX,IAAA,cAAK,EAAC,WAAW,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,EAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAC,CAAC,EAClF,IAAA,cAAK,EAAC,YAAY,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,EAAC,UAAU,EAAC,CAAC,EACxD,IAAA,cAAK,EAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,EACvD,IAAA,cAAK,EAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,EAC7D,IAAA,cAAK,EAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,EACvD,IAAA,cAAK,EAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAC9D,CAAC;IACF,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;AAC9B,CAAC,CAAC;AAlCW,QAAA,QAAQ,YAkCnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"src/","sources":["generator/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"src/","sources":["generator/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA2B"}
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/generator/register.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,QAAQ,uBAUhB,CAAC"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"src/","sources":["generator/register.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,QAAQ,uBAUhB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/generator/register.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAkC;AAClC,+BAA0B;AAC1B,yDAAuD;AACvD,qDAA6B;AAE7B,MAAM,OAAO,GAAG,4BAAe,CAAC,IAAI,CAAC,oBAAU,CAAC,CAAC;AAEjD,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,EAAE,CACpC,KAAK,CAAC,OAAO,CAAC,GAAG,eAAK,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC;KACrC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;KACxB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAElB,MAAM,QAAQ,GAAG,GAAG,EAAE,CAC3B,IAAI,OAAO,CAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CACxC,IAAA,WAAI,EAAC,uBAAuB,EAC1B,EAAC,IAAI,EAAE,eAAK,CAAC,SAAS,EAAC,EACvB,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;KACzD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAiC,KAAK,CAAC,EAAE,CACnE,CAAC,EAAC,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC,CAAC;KAC5C,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CACxB,KAAK,CAAC,GAAG,CAAC,CAAC,EAAC,IAAI,EAAE,IAAI,EAAC,EAAE,EAAE,CAAC,IAAA,mBAAQ,EAAC,IAAI,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAC,CAAC;KAC5D,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CACvC,CAAC;AAVO,QAAA,QAAQ,YAUf"}
1
+ {"version":3,"file":"register.js","sourceRoot":"src/","sources":["generator/register.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAkC;AAClC,+BAA0B;AAC1B,yDAAuD;AACvD,qDAA6B;AAE7B,MAAM,OAAO,GAAG,4BAAe,CAAC,IAAI,CAAC,oBAAU,CAAC,CAAC;AAEjD,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,EAAE,CACpC,KAAK,CAAC,OAAO,CAAC,GAAG,eAAK,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC;KACrC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;KACxB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAElB,MAAM,QAAQ,GAAG,GAAG,EAAE,CAC3B,IAAI,OAAO,CAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CACxC,IAAA,WAAI,EAAC,uBAAuB,EAC1B,EAAC,IAAI,EAAE,eAAK,CAAC,SAAS,EAAC,EACvB,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;KACzD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAiC,KAAK,CAAC,EAAE,CACnE,CAAC,EAAC,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC,CAAC;KAC5C,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CACxB,KAAK,CAAC,GAAG,CAAC,CAAC,EAAC,IAAI,EAAE,IAAI,EAAC,EAAE,EAAE,CAAC,IAAA,mBAAQ,EAAC,IAAI,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAC,CAAC;KAC5D,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CACvC,CAAC;AAVO,QAAA,QAAQ,YAUf"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/generator/setup.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,KAAK,uBAAmB,CAAC"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"src/","sources":["generator/setup.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,KAAK,uBAAmB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/generator/setup.ts"],"names":[],"mappings":";;;;;;AAAA,4EAAyC;AACzC,4DAA4B;AAC5B,yCAAoC;AAEpC,oBAAE,CAAC,cAAc,CAAC,OAAO,EAAE,UAA4B,KAAU,EAAE,GAAY,EAAE,IAAiB;IAChG,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;KACzE;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAA;AACnF,CAAC,CAAC,CAAC;AAEH,oBAAE,CAAC,cAAc,CAAC,KAAK,EAAE,UAA4B,KAAU,EAAE,GAAY,EAAE,IAAiB;IAC9F,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;KACxE;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAA;AAClF,CAAC,CAAC,CAAC;AAEH,IAAA,4BAAO,EAAC,EAAC,UAAU,EAAE,oBAAE,EAAC,CAAC,CAAC;AACnB,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,IAAA,mBAAQ,GAAE,CAAC;AAAzB,QAAA,KAAK,SAAoB"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"src/","sources":["generator/setup.ts"],"names":[],"mappings":";;;;;;AAAA,4EAAyC;AACzC,4DAA4B;AAC5B,yCAAoC;AAEpC,oBAAE,CAAC,cAAc,CAAC,OAAO,EAAE,UAA4B,KAAU,EAAE,GAAY,EAAE,IAAiB;IAChG,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;KACzE;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAA;AACnF,CAAC,CAAC,CAAC;AAEH,oBAAE,CAAC,cAAc,CAAC,KAAK,EAAE,UAA4B,KAAU,EAAE,GAAY,EAAE,IAAiB;IAC9F,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;KACxE;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAA;AAClF,CAAC,CAAC,CAAC;AAEH,IAAA,4BAAO,EAAC,EAAC,UAAU,EAAE,oBAAE,EAAC,CAAC,CAAC;AACnB,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,IAAA,mBAAQ,GAAE,CAAC;AAAzB,QAAA,KAAK,SAAoB"}
@@ -1 +1 @@
1
- {"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/generator/writer.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,KAAK,aAAoB,MAAM,UAAU,MAAM,GAAG,MAAM,EAAE,YAAY,GAAG,kBAKrF,CAAC"}
1
+ {"version":3,"file":"writer.d.ts","sourceRoot":"src/","sources":["generator/writer.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,KAAK,aAAoB,MAAM,UAAU,MAAM,GAAG,MAAM,EAAE,YAAY,GAAG,kBAKrF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/generator/writer.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,uCAAwD;AACxD,uCAAgC;AAChC,qDAA6B;AAC7B,2CAAmC;AAE5B,MAAM,KAAK,GAAG,KAAK,EAAE,QAAgB,EAAE,MAAyB,EAAE,OAAa,EAAE,EAAE;IACxF,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5E,MAAM,IAAA,oBAAS,EAAC,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,IAAA,mBAAQ,EAAC,cAAI,CAAC,OAAO,CAAC,eAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAC,CAAC,CAAC;IAC1F,OAAO,IAAA,oBAAS,EAAC,UAAU,EAAE,IAAA,iBAAM,EAAC,IAAA,oBAAO,EAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,EAAC,MAAM,EAAE,YAAY,EAAC,CAAC,CAAC,CAAC;AACvF,CAAC,CAAC;AALW,QAAA,KAAK,SAKhB"}
1
+ {"version":3,"file":"writer.js","sourceRoot":"src/","sources":["generator/writer.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,uCAAwD;AACxD,uCAAgC;AAChC,qDAA6B;AAC7B,2CAAmC;AAE5B,MAAM,KAAK,GAAG,KAAK,EAAE,QAAgB,EAAE,MAAyB,EAAE,OAAa,EAAE,EAAE;IACxF,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5E,MAAM,IAAA,oBAAS,EAAC,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,IAAA,mBAAQ,EAAC,cAAI,CAAC,OAAO,CAAC,eAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAC,CAAC,CAAC;IAC1F,OAAO,IAAA,oBAAS,EAAC,UAAU,EAAE,IAAA,iBAAM,EAAC,IAAA,oBAAO,EAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,EAAC,MAAM,EAAE,YAAY,EAAC,CAAC,CAAC,CAAC;AACvF,CAAC,CAAC;AALW,QAAA,KAAK,SAKhB"}
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAG5C,QAAA,MAAM,8BAA8B,EAAE,SACT,CAAC;AAE9B,eAAe,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"src/","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAG5C,QAAA,MAAM,8BAA8B,EAAE,SACT,CAAC;AAE9B,eAAe,8BAA8B,CAAC"}
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA,2CAAqC;AAErC,MAAM,8BAA8B,GAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CACtE,IAAA,oBAAQ,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAE9B,kBAAe,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"src/","sources":["index.ts"],"names":[],"mappings":";;AACA,2CAAqC;AAErC,MAAM,8BAA8B,GAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CACtE,IAAA,oBAAQ,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAE9B,kBAAe,8BAA8B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@automatons/typescript-client-axios",
3
- "version": "1.0.7",
3
+ "version": "1.0.11",
4
4
  "repository": "git@github.com:openapi-automatons/typescript-client-axios.git",
5
5
  "author": "tanmen <yt.prog@gmail.com>",
6
6
  "license": "MIT",
@@ -13,15 +13,16 @@
13
13
  "main": "index.js",
14
14
  "scripts": {
15
15
  "prebuild": "depcheck && node scripts/prebuild.js",
16
- "build": "tsc && cp -R package.json README.md LICENSE src/templates dist",
16
+ "build": "tsc && cp -R package.json README.md LICENSE src/templates dist && rsync -a src dist/src --exclude '__tests__' --exclude '*.test.*' --exclude '*.spec.*'",
17
17
  "lint": "eslint src --ext .ts,.tsx",
18
18
  "test": "jest",
19
+ "test:integration": "ts-node scripts/pretest.ts && jest -c test/jest.config.js",
19
20
  "postinstall": "husky install && typesync && yarn check --integrity || yarn install --ignore-scripts && yarn-deduplicate",
20
21
  "postversion": "cp package.json ../package.json"
21
22
  },
22
23
  "dependencies": {
23
- "@automatons/parser": "^0.0.63",
24
- "@automatons/tools": "^1.0.8",
24
+ "@automatons/parser": "^0.0.67",
25
+ "@automatons/tools": "^1.0.66",
25
26
  "eslint": "^8.7.0",
26
27
  "fs-extra": "^9.0.0",
27
28
  "glob": "^7.2.0",
@@ -47,21 +48,23 @@
47
48
  "@types/handlebars-helpers": "^0.5.2",
48
49
  "@types/jest": "^27.4.0",
49
50
  "@types/js-yaml": "^4.0.5",
50
- "@types/node": "^17.0.13",
51
+ "@types/node": "^17.0.14",
51
52
  "@types/prettier": "^2.0.0",
52
53
  "@types/semantic-release": "^17.2.3",
53
- "@typescript-eslint/eslint-plugin": "^5.10.1",
54
- "@typescript-eslint/parser": "^5.10.1",
54
+ "@typescript-eslint/eslint-plugin": "^5.10.2",
55
+ "@typescript-eslint/parser": "^5.10.2",
56
+ "axios-mock-adapter": "^1.20.0",
55
57
  "depcheck": "^1.4.3",
56
58
  "eslint": "^8.7.0",
57
59
  "eslint-config-google": "^0.14.0",
58
60
  "eslint-config-prettier": "^8.3.0",
59
61
  "husky": "^7.0.4",
60
62
  "jest": "^26.0.1",
61
- "lint-staged": "^12.3.2",
63
+ "lint-staged": "^12.3.3",
62
64
  "object-to-formdata": "^4.4.1",
63
65
  "semantic-release": "^19.0.2",
64
66
  "ts-jest": "^26.0.0",
67
+ "ts-node": "^10.4.0",
65
68
  "typescript": "^4.5.5",
66
69
  "typesync": "^0.8.0",
67
70
  "yarn-deduplicate": "^3.1.0"
package/paths.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,KAAK;;;;CAIV,CAAC;AACF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"src/","sources":["paths.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,KAAK;;;;CAIV,CAAC;AACF,eAAe,KAAK,CAAC"}
package/paths.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AAExB,MAAM,KAAK,GAAG;IACZ,GAAG,EAAE,cAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IAC5B,SAAS,EAAE,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC;IAC/C,GAAG,EAAE,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC;CACvC,CAAC;AACF,kBAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"src/","sources":["paths.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AAExB,MAAM,KAAK,GAAG;IACZ,GAAG,EAAE,cAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IAC5B,SAAS,EAAE,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC;IAC/C,GAAG,EAAE,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC;CACvC,CAAC;AACF,kBAAe,KAAK,CAAC"}
@@ -0,0 +1,13 @@
1
+ import {AffectPath, Api, Path} from "@automatons/parser";
2
+
3
+ const isAffectPath = (path: Path): path is AffectPath => ['post', 'patch', 'put'].includes(path.method);
4
+
5
+ export const extractApiMeta = (api: Api) => {
6
+ const hasTemplate = api.servers.some(server => server.values?.length)
7
+ || api.paths.some(path => path.parameters?.length)
8
+ || api.paths.some(path => path.headers?.length);
9
+ const hasQuery = api.paths.some(path => path.queries?.length)
10
+ || api.paths.some(path => path.cookies?.length);
11
+ const hasFormData = api.paths.some(path => isAffectPath(path) ? path.forms?.length : false);
12
+ return {hasQuery, hasTemplate, hasFormData};
13
+ };
@@ -0,0 +1,42 @@
1
+ import {AutomatonSettings, Openapi} from "@automatons/tools";
2
+ import {parser} from "@automatons/parser";
3
+ import {write} from "./writer";
4
+ import {setup} from "./setup";
5
+ import {extractApiMeta} from "../extractors/api";
6
+
7
+
8
+ export const generate = async (openapi: Openapi, settings: AutomatonSettings) => {
9
+ const {outDir} = settings;
10
+ const promises: Promise<void>[] = [];
11
+ await setup();
12
+
13
+ const {models, apis, securities} = await parser(openapi, settings);
14
+ if (models.length) {
15
+ promises.push(write('models/index.hbs', [outDir, 'models', 'index.ts'], models))
16
+ const modelPromises = models
17
+ .map(model => write('models/model.hbs', [outDir, 'models', `${model.filename}.ts`], model));
18
+ promises.push(...modelPromises)
19
+ }
20
+
21
+ if (apis.length) {
22
+ promises.push(
23
+ write('apis/index.hbs', [outDir, 'apis', 'index.ts'], apis),
24
+ write('apis/abstractApi.hbs', [outDir, 'apis', 'abstractApi.ts'], {securities}),
25
+ );
26
+ promises.push(...apis.map(api => write('apis/api.hbs', [outDir, 'apis', `${api.filename}.ts`], {
27
+ api,
28
+ meta: extractApiMeta(api),
29
+ securities
30
+ })));
31
+ }
32
+
33
+ promises.push(
34
+ write('index.hbs', [outDir, 'index.ts'], {api: apis.length, model: models.length}),
35
+ write('config.hbs', [outDir, 'config.ts'], {securities}),
36
+ write('utils/index.hbs', [outDir, 'utils', 'index.ts']),
37
+ write('utils/template.hbs', [outDir, 'utils', 'template.ts']),
38
+ write('utils/query.hbs', [outDir, 'utils', 'query.ts']),
39
+ write('utils/formData.hbs', [outDir, 'utils', 'formData.ts'])
40
+ );
41
+ return Promise.all(promises)
42
+ };
@@ -0,0 +1 @@
1
+ export * from './generate';
@@ -0,0 +1,23 @@
1
+ import {readFile} from "fs-extra";
2
+ import {glob} from 'glob';
3
+ import Handlebars, {registerPartial} from "handlebars";
4
+ import paths from "../paths";
5
+
6
+ const partial = registerPartial.bind(Handlebars);
7
+
8
+ const convertName = (match: string) =>
9
+ match.replace(`${paths.templates}/`, '')
10
+ .replace('partials/', '')
11
+ .replace('.hbs', '');
12
+
13
+ export const register = () =>
14
+ new Promise<string[]>((resolve, reject) =>
15
+ glob('/**/partials/**/*.hbs',
16
+ {root: paths.templates},
17
+ (err, matches) => err ? reject(err) : resolve(matches)))
18
+ .then(matches => matches.map<{ name: string, path: string }>(match =>
19
+ ({name: convertName(match), path: match})))
20
+ .then(files => Promise.all(
21
+ files.map(({name, path}) => readFile(path, {encoding: 'utf-8'})
22
+ .then(data => partial(name, data))))
23
+ );
@@ -0,0 +1,20 @@
1
+ import helpers from "handlebars-helpers";
2
+ import HB from "handlebars";
3
+ import {register} from "./register";
4
+
5
+ HB.registerHelper('every', function <T extends Object>(value: T[], key: keyof T, text?: T[keyof T]) {
6
+ if (!text) {
7
+ return value.every(item => (item[key] == undefined ? false : item[key]))
8
+ }
9
+ return value.every(item => (item[key] == undefined ? false : item[key]) === text)
10
+ });
11
+
12
+ HB.registerHelper('any', function <T extends Object>(value: T[], key: keyof T, text?: T[keyof T]) {
13
+ if (!text) {
14
+ return value.some(item => (item[key] == undefined ? false : item[key]))
15
+ }
16
+ return value.some(item => (item[key] == undefined ? false : item[key]) === text)
17
+ });
18
+
19
+ helpers({handlebars: HB});
20
+ export const setup = () => register();
@@ -0,0 +1,12 @@
1
+ import path from "path";
2
+ import {ensureDir, readFile, writeFile} from "fs-extra";
3
+ import {format} from "prettier";
4
+ import paths from "../paths";
5
+ import {compile} from "handlebars";
6
+
7
+ export const write = async (template: string, outDir: string | string[], context?: any) => {
8
+ const outputPath = Array.isArray(outDir) ? path.resolve(...outDir) : outDir;
9
+ await ensureDir(path.dirname(outputPath));
10
+ const data = await readFile(path.resolve(paths.templates, template), {encoding: 'utf-8'});
11
+ return writeFile(outputPath, format(compile(data)(context), {parser: 'typescript'}));
12
+ };
@@ -0,0 +1,7 @@
1
+ import {Automaton} from "@automatons/tools";
2
+ import {generate} from "./generator";
3
+
4
+ const generatorTypescriptAxiosClient: Automaton = (openapi, settings) =>
5
+ generate(openapi, settings);
6
+
7
+ export default generatorTypescriptAxiosClient;
@@ -0,0 +1,8 @@
1
+ import path from 'path';
2
+
3
+ const paths = {
4
+ src: path.resolve(__dirname),
5
+ templates: path.resolve(__dirname, 'templates'),
6
+ tmp: path.resolve(__dirname, '../tmp')
7
+ };
8
+ export default paths;
@@ -0,0 +1,63 @@
1
+ import Axios, { AxiosInstance } from "axios";
2
+ import type { Config{{#if securities}}, Security{{/if}} } from "../config";
3
+
4
+ const DateFormat = /^\d{4}-\d{2}-\d{2}([tT]\d{2}:\d{2}:\d{2}(Z|[+-]\d{2}:\d{2})|Z)?$/;
5
+ const reviver = (_key: string, value: any) =>
6
+ typeof value === 'string' && DateFormat.test(value) ? new Date(value) : value;
7
+
8
+ const BASE_AXIOS = Axios.create({
9
+ transformResponse: (data) => JSON.parse(data, reviver)
10
+ });
11
+
12
+ /**
13
+ * AbstractConfig
14
+ */
15
+ export class AbstractConfig {
16
+ {{#if securities}}
17
+ readonly #security: Security;
18
+
19
+ /**
20
+ * constructor
21
+ */
22
+ constructor(security: Security = {}) {
23
+ this.#security = security;
24
+ }
25
+
26
+ {{#each securities}}
27
+ {{#and (eq type 'http') (eq scheme 'basic')}}
28
+ protected async security(key: "{{name}}"): Promise<{username: string; password: string;}>;
29
+ {{else or (eq type 'oauth2') (eq type 'openIdConnect')}}
30
+ protected async security(key: "{{name}}", scopes: string[]): Promise<string>;
31
+ {{else}}
32
+ protected async security(key: "{{name}}"): Promise<string>;
33
+ {{/and}}
34
+ {{/each}}
35
+ protected async security(key: keyof Security{{#or (any securities 'type' 'oauth2') (any securities 'type' 'openIdConnect')}}, scopes?: string[]{{/or}}): Promise<string | {username: string; password: string;}> {
36
+ const security = this.#security[key];
37
+ if (!security) {
38
+ throw new Error("Unauthorized user request.");
39
+ } else if (security instanceof Function) {
40
+ {{#or (any securities 'type' 'oauth2') (any securities 'type' 'openIdConnect')}}
41
+ return scopes ? security(scopes) : security();
42
+ {{else}}
43
+ return security();
44
+ {{/or}}
45
+ }
46
+ return security;
47
+ }
48
+ {{/if}}
49
+ }
50
+
51
+ /**
52
+ * AbstractApi
53
+ */
54
+ export class AbstractApi {
55
+ protected axios: AxiosInstance = BASE_AXIOS;
56
+
57
+ /**
58
+ * constructor
59
+ */
60
+ constructor({axios}: Config) {
61
+ if (axios) this.axios = axios;
62
+ }
63
+ }
@@ -0,0 +1,17 @@
1
+ import { AxiosResponse, AxiosRequestConfig } from "axios";
2
+ import { AbstractApi, AbstractConfig } from "./abstractApi";
3
+ import { Config{{#if securities}}, Security{{/if}} } from "../config";
4
+ {{#with meta}}
5
+ {{#or hasTemplate hasQuery hasFormData ~}}
6
+ import { {{#if hasTemplate}}template{{#or hasQuery hasFormData}},{{/or}}{{/if}} {{#if hasQuery}}query{{#if hasFormData}},{{/if}}{{/if}} {{#if hasFormData}}formData{{/if}} } from "../utils";
7
+ {{/or}}
8
+ {{/with}}
9
+ import { {{#each api/imports~}} {{title}}{{#unless @last}}, {{/unless}}{{/each}} } from "../models";
10
+
11
+ {{#each api/servers}}
12
+ type {{name}}Server = { name: "{{name}}"{{#if values}}; values: { {{#each values}}{{name}}: {{#if enums}}{{#each enums}}'{{this}}'{{#unless @last}} | {{/unless}}{{/each}}{{else}}string{{/if}} {{/each}} }; {{/if}} }
13
+ {{/each}}
14
+
15
+ {{> apis/class api=api securities=securities }}
16
+
17
+ {{> apis/config api=api securities=securities }}
@@ -0,0 +1,3 @@
1
+ {{#each this ~}}
2
+ export * from "./{{filename}}";
3
+ {{/each}}
@@ -0,0 +1,3 @@
1
+ {{#if this~}}
2
+ server: {{#each this}}{{name}}Server{{#unless @last}} | {{/unless}}{{/each}}{{#lengthEqual this 1}} = { name: '{{this/0/name}}'{{#if this/0/values}}, values: { {{#each this/0/values}}{{name}}: '{{defaultValue}}',{{/each}} } {{/if}} }{{/lengthEqual}},
3
+ {{~/if}}
@@ -0,0 +1,3 @@
1
+ {{#if this~}}
2
+ server?: {{#each this}}{{name}}Server{{#unless @last}} | {{/unless}}{{/each}},
3
+ {{~/if}}
@@ -0,0 +1,21 @@
1
+ {{~#each parameters}}{{name}}: {{> models/type schema}},{{/each}}
2
+ {{~#if forms}}form: {{#each forms}}{{#unless @first}} | {{/unless}}{{> models/type schema}}{{/each}},{{/if}}
3
+ {{~#if queries}}queries: {
4
+ {{~#each queries}}
5
+ {{name}}{{#unless required}}?{{/unless}}: {{> models/type schema}},
6
+ {{/each}}
7
+ }{{#if (every queries 'required' false)}} = {}{{/if}},
8
+ {{/if}}
9
+ {{~#if cookies}}cookies: {
10
+ {{~#each cookies}}
11
+ {{name}}{{#unless required}}?{{/unless}}: {{> models/type schema}},
12
+ {{/each}}
13
+ }{{#if (every cookies 'required' false)}} = {}{{/if}},
14
+ {{/if}}
15
+ headers: {
16
+ 'Content-Type': {{#if forms}}{{#each forms}}{{#unless @first}} | {{/unless}}{{#each types}}{{#unless @first}} | {{/unless}}'{{this}}'{{/each}}{{/each}}{{else}}'application/json'{{/if}},
17
+ {{#each headers}}
18
+ {{name}}{{#unless required}}?{{/unless}}: {{> models/type schema}},
19
+ {{/each}}
20
+ }{{#if (every headers 'required' false)}} = { 'Content-Type': 'application/json' }{{/if}},
21
+ {{~> apis/arguments/server servers}} config?: AxiosRequestConfig
@@ -0,0 +1,21 @@
1
+ {{~#each parameters}}{{name}}: {{> models/type schema}},{{/each}}
2
+ form: {{> models/type form/schema}},
3
+ {{~#if queries}}queries: {
4
+ {{~#each queries}}
5
+ {{name}}{{#unless required}}?{{/unless}}: {{> models/type schema}},
6
+ {{/each}}
7
+ },
8
+ {{/if}}
9
+ headers{{#filter form/types 'application/json'}}?{{/filter}}: {
10
+ 'Content-Type': {{#each form/types}}{{#unless @first}} | {{/unless}}'{{this}}'{{/each}},
11
+ {{#each headers}}
12
+ {{name}}{{#unless required}}?{{/unless}}: {{> models/type schema}},
13
+ {{/each}}
14
+ },
15
+ {{~#if cookies}}cookies: {
16
+ {{~#each cookies}}
17
+ {{name}}{{#unless required}}?{{/unless}}: {{> models/type schema}},
18
+ {{/each}}
19
+ },
20
+ {{/if}}
21
+ {{~> apis/arguments/server_interface servers}} config?: AxiosRequestConfig
@@ -0,0 +1,4 @@
1
+ "{{path}}"
2
+ {{#each parameters}}
3
+ .replace("{ {{~name~}} }", template('{{name}}', {{name}}, '{{#unless style}}simple{{else}}{{style}}{{/unless}}', {{#unless explode}}false{{else}}{{explode}}{{/unless}}))
4
+ {{~/each}}
@@ -0,0 +1,14 @@
1
+ {{> comment title=name async=true}}
2
+ {{#gt (length forms) 1 }}
3
+ {{#each forms}}
4
+ public async {{../name}}({{> apis/class/arguments_interface .. form=this}}): Promise<AxiosResponse{{#if ../schema}}<{{> models/type ../schema}}>{{/if}}>;
5
+ {{/each}}
6
+ {{/gt}}
7
+ public async {{name}}({{> apis/class/arguments}}): Promise<AxiosResponse{{#if schema}}<{{> models/type schema}}>{{/if}}> {
8
+ const path = {{> apis/class/path}};
9
+ const requestConfig = await this.#config.{{name}}({{> apis/class/variables }});
10
+ {{#if forms}}
11
+ const _form = formData(headers['Content-Type'], form);
12
+ {{/if}}
13
+ return this.axios.{{method}}(path, {{#if forms}}_form, {{/if}}requestConfig)
14
+ }
@@ -0,0 +1,4 @@
1
+ {{~#if queries}}queries,{{/if}}
2
+ {{~#if cookies}}cookies,{{/if}}
3
+ headers,
4
+ {{~#if servers}}server,{{/if}} config
@@ -0,0 +1,17 @@
1
+ {{> comment api}}
2
+ export class {{api.title}} extends AbstractApi {
3
+ readonly #config: {{api.title}}Config;
4
+
5
+ /**
6
+ * constructor
7
+ * @param {Config} config
8
+ */
9
+ constructor(config: Config = {}) {
10
+ super(config);
11
+ this.#config = new {{api.title}}Config({{#if securities}}config.security{{/if}});
12
+ }
13
+ {{#each api.paths}}
14
+
15
+ {{> apis/class/request }}
16
+ {{/each}}
17
+ }
@@ -0,0 +1,19 @@
1
+ {{~#if queries}}queries: {
2
+ {{~#each queries}}
3
+ {{name}}{{#unless required}}?{{/unless}}: {{> models/type schema}},
4
+ {{/each}}
5
+ }{{#if (every queries 'required' false)}} = {}{{/if}},
6
+ {{/if}}
7
+ {{~#if cookies}}cookies: {
8
+ {{~#each cookies}}
9
+ {{name}}{{#unless required}}?{{/unless}}: {{> models/type schema}},
10
+ {{/each}}
11
+ }{{#if (every cookies 'required' false)}} = {}{{/if}},
12
+ {{/if}}
13
+ headers: {
14
+ 'Content-Type': {{#if forms}}{{#each forms}}{{#unless @first}} | {{/unless}}{{#each types}}{{#unless @first}} | {{/unless}}'{{this}}'{{/each}}{{/each}}{{else}}'application/json'{{/if}},
15
+ {{#each headers}}
16
+ {{name}}{{#unless required}}?{{/unless}}: {{> models/type schema}},
17
+ {{/each}}
18
+ }{{#if (every headers 'required' false)}} = { 'Content-Type': 'application/json' }{{/if}},
19
+ {{~> apis/arguments/server servers}} config?: AxiosRequestConfig
@@ -0,0 +1 @@
1
+ config?.baseURL ? config.baseURL : {{title}}Config.server(server)
@@ -0,0 +1,13 @@
1
+ {{~#each cookies}}
2
+ if (cookies.{{name}}) {
3
+ _cookies += Object.entries(query('{{name}}', cookies.{{name}}, 'form', {{#if explode}}true{{else}}false{{/if}})).reduce((pre, [key, value]) => `${pre}${key}=${value};`, '');
4
+ }
5
+ {{/each}}
6
+ {{~#each securities}}
7
+ {{#and (eq type 'apiKey') (eq in 'cookie')~}}
8
+ const _cookie{{name}} = await this.security("{{name}}");
9
+ if (_cookie{{name}}) {
10
+ _cookies += `{{key}}=${_cookie{{name~}} };`;
11
+ }
12
+ {{/and}}
13
+ {{/each}}
@@ -0,0 +1,14 @@
1
+ {{~#each headers}}
2
+ if (headers.{{name}}) {
3
+ _headers['{{name}}'] = template('{{name}}', headers.{{name}}, 'simple', {{#if explode}}true{{else}}false{{/if}});
4
+ }
5
+ {{/each}}
6
+ {{~#each securities}}
7
+ {{#and (eq type 'apiKey') (eq in 'header')~}}
8
+ _headers['{{key}}'] = await this.security("{{name}}");
9
+ {{else and (eq type 'http') (eq schema 'bearer')}}
10
+ _headers['Authorization'] = `Bearer ${await this.security("{{name}}")}`;
11
+ {{else or (eq type 'oauth2') (eq type 'openIdConnect')}}
12
+ _headers['Authorization'] = `Bearer ${await this.security("{{name}}", [{{#each scopes}}"{{this}}"{{#unless @last}}, {{/unless}}{{/each}}])}`;
13
+ {{/and}}
14
+ {{/each}}
@@ -0,0 +1,11 @@
1
+ {
2
+ ...config?.params,
3
+ {{#each queries}}
4
+ ...query("{{name}}", queries.{{name}}, '{{#unless style}}form{{else}}{{style}}{{/unless}}', {{#unless explode}}false{{else}}{{explode}}{{/unless}}),
5
+ {{/each}}
6
+ {{#each securities}}
7
+ {{#and (eq type 'apiKey') (eq in 'query')}}
8
+ {{key}}: await this.security("{{name}}"),
9
+ {{/and}}
10
+ {{/each}}
11
+ }
@@ -0,0 +1,19 @@
1
+ public async {{name}}({{> apis/config/arguments}}): Promise<AxiosRequestConfig> {
2
+ const params = {{> apis/config/request/queries }};
3
+
4
+ let _cookies = config?.headers?.Cookie ?? '';
5
+ {{> apis/config/request/cookies }}
6
+
7
+ const _headers = Object.assign({ ...config?.headers, 'Content-Type': headers['Content-Type']}, _cookies ? {Cookie: _cookies} : undefined);
8
+ {{> apis/config/request/headers }}
9
+
10
+ return {
11
+ ...config,
12
+ {{#each securities}}
13
+ {{#and (eq type 'http') (eq scheme 'basic') }}auth: await this.security("{{name}}"),{{/and}}
14
+ {{~/each}}
15
+ baseURL: {{> apis/config/request/baseURL title=title }},
16
+ params,
17
+ headers: _headers
18
+ };
19
+ }
@@ -0,0 +1,11 @@
1
+ private static server(server: {{#each servers}}{{name}}Server{{#unless @last}} | {{/unless}}{{/each}}) {
2
+ {{#each servers}}
3
+ if ('{{name}}' === server.name) {
4
+ return '{{url}}'
5
+ {{#each values}}
6
+ .replace('{ {{~name~}} }', template('{{name}}', server.values.{{name}}, 'simple', false))
7
+ {{~/each}};
8
+ }
9
+ {{/each}}
10
+ throw new Error('Undefined server. please define server.');
11
+ }
@@ -0,0 +1,14 @@
1
+ class {{api.title}}Config extends AbstractConfig {
2
+ {{#if securities}}
3
+ constructor(security: Security = {}) {
4
+ super(security);
5
+ }
6
+ {{/if}}
7
+
8
+ {{> apis/config/server api }}
9
+
10
+ {{#each api.paths}}
11
+
12
+ {{> apis/config/request title=../api.title }}
13
+ {{/each}}
14
+ }
@@ -0,0 +1,19 @@
1
+ import { AxiosInstance } from "axios";
2
+
3
+ export type Security = {
4
+ {{#each securities}}
5
+ {{#and (eq type 'http') (eq scheme 'basic')}}
6
+ {{name}}?: {username: string; password: string;} | Promise<{username: string; password: string;}> | (() => {username: string; password: string;} | Promise<{username: string; password: string;}>);
7
+ {{else or (eq type 'oauth2') (eq type 'openIdConnect')}}
8
+ {{name}}?: string | Promise<string> | ((scopes?: string[]) => string | Promise<string>);
9
+ {{else}}
10
+ {{name}}?: string | Promise<string> | (() => string | Promise<string>);
11
+ {{/and}}
12
+ {{/each}}
13
+ };
14
+
15
+ export type Config = {
16
+ axios?: AxiosInstance;
17
+ token?: string | Promise<string> | (() => string | Promise<string>);
18
+ security?: Security;
19
+ }
@@ -0,0 +1,3 @@
1
+ {{#if model}}export * from './models';{{/if}}
2
+ {{#if api}}export * from './apis';{{/if}}
3
+ export * from './config';
@@ -0,0 +1,3 @@
1
+ {{#each this ~}}
2
+ export * from "./{{filename}}";
3
+ {{/each}}
@@ -0,0 +1,6 @@
1
+ {{#each imports~}}
2
+ import { {{title}} } from "./{{filename}}";
3
+ {{/each}}
4
+
5
+ {{> comment}}
6
+ export type {{title}} = {{> models/type schema}};
@@ -0,0 +1,7 @@
1
+ {{#noop~}}
2
+ (
3
+ {{~#each schemas}}
4
+ {{~#if @first}}{{> models/type}}{{else}} & {{> models/type}}{{/if~}}
5
+ {{/each~}}
6
+ )
7
+ {{~/noop}}
@@ -0,0 +1,6 @@
1
+ {{#if items ~}}
2
+ Array<{{#with items}}{{> models/type}}{{/with}}>
3
+ {{~ else ~}}
4
+ any[]
5
+ {{~/if}}
6
+ {{~> models/nullable}}
@@ -0,0 +1 @@
1
+ boolean{{> models/nullable}}
@@ -0,0 +1 @@
1
+ {{#if nullable}} | null{{/if}}
@@ -0,0 +1,6 @@
1
+ {{#if enum}}
2
+ {{~#each enum}}{{#if @first}}{{this}}{{else}} | {{this}}{{/if}}{{/each ~}}
3
+ {{~ else ~}}
4
+ number
5
+ {{~/if}}
6
+ {{> models/nullable}}
@@ -0,0 +1,13 @@
1
+ {{#noop}}
2
+ {{#if properties ~}}
3
+ {
4
+ {{#each properties}}
5
+ {{> comment title=name}}
6
+ {{#inArray name "-"}}"{{name}}"{{else}}{{name}}{{/inArray}}{{#unless required}}?{{/unless}}: {{> models/type schema}};
7
+ {{/each}}
8
+ }
9
+ {{~ else ~}}
10
+ object
11
+ {{~/if}}
12
+ {{> models/nullable}}
13
+ {{~/noop}}
@@ -0,0 +1,7 @@
1
+ {{#noop~}}
2
+ (
3
+ {{~#each schemas}}
4
+ {{~#if @first}}{{> models/type}}{{else}} | {{> models/type}}{{/if~}}
5
+ {{/each~}}
6
+ )
7
+ {{~/noop}}
@@ -0,0 +1,10 @@
1
+ {{~#if enum}}
2
+ {{~#each enum}}{{~#if @first}}"{{this}}"{{~else}} | "{{this}}"{{~/if}}{{~/each}}
3
+ {{~else or (eq format 'date') (eq format 'date-time')~}}
4
+ Date
5
+ {{~else eq format 'url'~}}
6
+ URL
7
+ {{~else~}}
8
+ string
9
+ {{~/if}}
10
+ {{> models/nullable}}
@@ -0,0 +1,19 @@
1
+ {{#eq type 'model'}}
2
+ {{~ name ~}}
3
+ {{else eq type 'object'}}
4
+ {{~> models/object}}
5
+ {{else eq type 'allOf'}}
6
+ {{~> models/allOf}}
7
+ {{else eq type 'oneOf'}}
8
+ {{~> models/oneOf}}
9
+ {{else eq type 'array'}}
10
+ {{~> models/array}}
11
+ {{else eq type 'boolean'}}
12
+ {{~> models/boolean}}
13
+ {{else eq type 'string'}}
14
+ {{~> models/string}}
15
+ {{else eq type 'number'}}
16
+ {{~> models/number}}
17
+ {{else}}
18
+ {{~ type}}
19
+ {{/eq}}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * {{title}}
3
+ {{#if async}}
4
+ * @async
5
+ {{/if}}
6
+ {{#if description}}
7
+ * @description {{description}}
8
+ {{/if}}
9
+ {{#if deprecated}}
10
+ * @deprecated
11
+ {{/if}}
12
+ {{#if readOnly}}
13
+ * @readonly
14
+ {{/if}}
15
+ {{#if defaultValue}}
16
+ * @default {{defaultValue}}
17
+ {{/if}}
18
+ {{#each params}}
19
+ * @params { {{type}} } {{name}}
20
+ {{/each}}
21
+ {{#if example}}
22
+ * @example
23
+ {{/if}}
24
+ */
@@ -0,0 +1,10 @@
1
+ import { serialize } from 'object-to-formdata';
2
+
3
+ export const formData = <T = unknown>(type: string, form: T): T | FormData => {
4
+ switch(type) {
5
+ case 'multipart/form-data':
6
+ return serialize(form);
7
+ default:
8
+ return form;
9
+ }
10
+ }
@@ -0,0 +1,3 @@
1
+ export * from './template';
2
+ export * from './query';
3
+ export * from './formData';
@@ -0,0 +1,79 @@
1
+ type ParsedUrlQueryInput = NodeJS.Dict<string | number | boolean | ReadonlyArray<string> | ReadonlyArray<number> | ReadonlyArray<boolean> | null>
2
+
3
+ const isObject = (value: any): value is object => {
4
+ const type = typeof value
5
+ return value != null && (type == 'object' || type == 'function')
6
+ }
7
+
8
+ const queryForm =
9
+ (name: string,
10
+ value: string | number | Array<string | number> | { [key: string]: string | number },
11
+ explode: boolean): ParsedUrlQueryInput => {
12
+ if (Array.isArray(value)) {
13
+ if (explode) {
14
+ return {[name]: value.map(String)}
15
+ } else {
16
+ return {[name]: value.join(',')}
17
+ }
18
+ } else if (isObject(value)) {
19
+ if (explode) {
20
+ return value;
21
+ } else {
22
+ return {[name]: Object.entries(value).map((prop: [string, string | number]) => prop.join(',')).join(',')}
23
+ }
24
+ } else {
25
+ return {[name]: value};
26
+ }
27
+ }
28
+
29
+ const querySpaceDelimited =
30
+ (name: string,
31
+ value: string | number | Array<string | number> | { [key: string]: string | number }): ParsedUrlQueryInput => {
32
+ if (Array.isArray(value)) {
33
+ return {[name]: value.join(' ')}
34
+ } else if (isObject(value)) {
35
+ return {[name]: Object.entries(value).map((prop: [string, string | number]) => prop.join(' ')).join(' ')}
36
+ }
37
+ throw new Error(`Unsupported value: ${name}`);
38
+ }
39
+
40
+ const queryPipeDelimited =
41
+ (name: string,
42
+ value: string | number | Array<string | number> | { [key: string]: string | number }): ParsedUrlQueryInput => {
43
+ if (Array.isArray(value)) {
44
+ return {[name]: value.join('|')}
45
+ } else if (isObject(value)) {
46
+ return {[name]: Object.entries(value).map((prop: [string, string | number]) => prop.join('|')).join('|')}
47
+ }
48
+ throw new Error(`Unsupported value: ${name}`);
49
+ }
50
+
51
+ const queryDeepObject =
52
+ (name: string,
53
+ value: string | number | Array<string | number> | { [key: string]: string | number }): ParsedUrlQueryInput => {
54
+ if (!Array.isArray(value) && isObject(value)) {
55
+ return Object.keys(value).reduce((pre, cur) => ({...pre, [`${name}[${cur}]`]: value[cur]}), {});
56
+ }
57
+ throw new Error(`Unsupported value: ${name}`);
58
+ }
59
+
60
+ export const query =
61
+ (
62
+ name: string,
63
+ value: undefined | string | number | Array<string | number> | { [key: string]: string | number },
64
+ style: 'form' | 'spaceDelimited' | 'pipeDelimited' | 'deepObject',
65
+ explode: boolean): ParsedUrlQueryInput => {
66
+ if (value === undefined) return {};
67
+ switch (style) {
68
+ case 'form':
69
+ return queryForm(name, value, explode);
70
+ case 'spaceDelimited':
71
+ return querySpaceDelimited(name, value);
72
+ case 'pipeDelimited':
73
+ return queryPipeDelimited(name, value);
74
+ case 'deepObject':
75
+ return queryDeepObject(name, value);
76
+ default:
77
+ throw new Error(`Unsupported style: ${style}`);
78
+ }
79
+ }
@@ -0,0 +1,55 @@
1
+ const templateSimple = (explode: boolean, value: string | number | Array<string | number> | { [p: string]: string | number }): string => {
2
+ if (!explode) {
3
+ return value instanceof Object
4
+ ? Array.isArray(value)
5
+ ? value.join(',') : Object.entries(value).map(prop => prop.join(',')).flat().join(',')
6
+ : String(value);
7
+ }
8
+ return value instanceof Object
9
+ ? Array.isArray(value)
10
+ ? value.join(',') : Object.entries(value).map(([key, value]) => `${key}=${value}`).flat().join(',')
11
+ : String(value);
12
+ }
13
+
14
+ const templateLabel = (explode: boolean, value: string | number | Array<string | number> | { [p: string]: string | number }): string => {
15
+ if (!explode) {
16
+ return `.${value instanceof Object
17
+ ? Array.isArray(value)
18
+ ? value.join(',') : Object.entries(value).map(prop => prop.join(',')).flat().join(',')
19
+ : String(value)}`;
20
+ }
21
+ return value instanceof Object
22
+ ? Array.isArray(value)
23
+ ? value.join(',') : Object.entries(value).map(([key, value]) => `${key}=${value}`).flat().join(',')
24
+ : String(value);
25
+ }
26
+
27
+ const templateMatrix = (explode: boolean, name: string, value: string | number | Array<string | number> | { [p: string]: string | number }): string => {
28
+ if (!explode) {
29
+ return `;${name}=${value instanceof Object
30
+ ? Array.isArray(value)
31
+ ? value.join(',') : Object.entries(value).map(prop => prop.join(',')).flat().join(',')
32
+ : String(value)}`;
33
+ }
34
+ return `;${value instanceof Object
35
+ ? Array.isArray(value)
36
+ ? value.map(item => `${name}=${item}`).join(';')
37
+ : Object.entries(value).map(([key, value]) => `${key}=${value}`).flat().join(';')
38
+ : `${name}=${String(value)}`}`;
39
+ }
40
+
41
+ export const template =
42
+ (
43
+ name: string,
44
+ value: string | number | Array<string | number> | { [key: string]: string | number },
45
+ style: 'simple' | 'label' | 'matrix',
46
+ explode: boolean): string => {
47
+ if (style === 'simple') {
48
+ return templateSimple(explode, value);
49
+ } else if (style === 'label') {
50
+ return templateLabel(explode, value);
51
+ } else if (style === 'matrix') {
52
+ return templateMatrix(explode, name, value);
53
+ }
54
+ throw new Error(`Unsupported style: ${style}`)
55
+ }