@seamapi/nextlove-sdk-generator 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. package/LICENSE.txt +20 -0
  2. package/README.md +16 -0
  3. package/index.d.ts +6 -0
  4. package/index.js +7 -0
  5. package/index.js.map +1 -0
  6. package/lib/cli.d.ts +2 -0
  7. package/lib/cli.js +53 -0
  8. package/lib/cli.js.map +1 -0
  9. package/lib/fs-util/index.d.ts +2 -0
  10. package/lib/fs-util/index.js +3 -0
  11. package/lib/fs-util/index.js.map +1 -0
  12. package/lib/fs-util/populate-fs.d.ts +1 -0
  13. package/lib/fs-util/populate-fs.js +11 -0
  14. package/lib/fs-util/populate-fs.js.map +1 -0
  15. package/lib/fs-util/write-fs.d.ts +1 -0
  16. package/lib/fs-util/write-fs.js +10 -0
  17. package/lib/fs-util/write-fs.js.map +1 -0
  18. package/lib/generate-csharp-sdk/codegen.d.ts +235 -0
  19. package/lib/generate-csharp-sdk/codegen.js +432 -0
  20. package/lib/generate-csharp-sdk/codegen.js.map +1 -0
  21. package/lib/generate-csharp-sdk/constants.d.ts +1 -0
  22. package/lib/generate-csharp-sdk/constants.js +2 -0
  23. package/lib/generate-csharp-sdk/constants.js.map +1 -0
  24. package/lib/generate-csharp-sdk/generate-csharp-sdk.d.ts +1 -0
  25. package/lib/generate-csharp-sdk/generate-csharp-sdk.js +81 -0
  26. package/lib/generate-csharp-sdk/generate-csharp-sdk.js.map +1 -0
  27. package/lib/generate-csharp-sdk/generate-csproj.d.ts +1 -0
  28. package/lib/generate-csharp-sdk/generate-csproj.js +45 -0
  29. package/lib/generate-csharp-sdk/generate-csproj.js.map +1 -0
  30. package/lib/generate-csharp-sdk/templates/dataclass.d.ts +24 -0
  31. package/lib/generate-csharp-sdk/templates/dataclass.js +468 -0
  32. package/lib/generate-csharp-sdk/templates/dataclass.js.map +1 -0
  33. package/lib/generate-csharp-sdk/templates/fs/csharp-testing.sln +34 -0
  34. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ApiResponse.cs +159 -0
  35. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ClientUtils.cs +280 -0
  36. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ExceptionFactory.cs +12 -0
  37. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/GlobalSeamRequestConfiguration.cs +60 -0
  38. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/HttpMethod.cs +29 -0
  39. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/IAsynchronousSeam.cs +142 -0
  40. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/IReadableSeamRequestConfiguration.cs +68 -0
  41. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ISynchronousSeam.cs +103 -0
  42. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/Multimap.cs +286 -0
  43. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/RequestOptions.cs +74 -0
  44. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/RetryConfiguration.cs +21 -0
  45. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/Seam.cs +1070 -0
  46. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/SeamException.cs +64 -0
  47. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/SeamRequestConfiguration.cs +662 -0
  48. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Model/AsbtractModelSchema.cs +62 -0
  49. package/lib/generate-php-sdk/generate-php-sdk.d.ts +1 -0
  50. package/lib/generate-php-sdk/generate-php-sdk.js +127 -0
  51. package/lib/generate-php-sdk/generate-php-sdk.js.map +1 -0
  52. package/lib/generate-php-sdk/index.d.ts +1 -0
  53. package/lib/generate-php-sdk/index.js +2 -0
  54. package/lib/generate-php-sdk/index.js.map +1 -0
  55. package/lib/generate-php-sdk/templates/composer.json.template.d.ts +2 -0
  56. package/lib/generate-php-sdk/templates/composer.json.template.js +25 -0
  57. package/lib/generate-php-sdk/templates/composer.json.template.js.map +1 -0
  58. package/lib/generate-php-sdk/templates/env.example.template.d.ts +2 -0
  59. package/lib/generate-php-sdk/templates/env.example.template.js +4 -0
  60. package/lib/generate-php-sdk/templates/env.example.template.js.map +1 -0
  61. package/lib/generate-php-sdk/templates/gitignore.template.d.ts +2 -0
  62. package/lib/generate-php-sdk/templates/gitignore.template.js +6 -0
  63. package/lib/generate-php-sdk/templates/gitignore.template.js.map +1 -0
  64. package/lib/generate-php-sdk/templates/package.json.template.d.ts +2 -0
  65. package/lib/generate-php-sdk/templates/package.json.template.js +12 -0
  66. package/lib/generate-php-sdk/templates/package.json.template.js.map +1 -0
  67. package/lib/generate-php-sdk/templates/readme.md.template.d.ts +2 -0
  68. package/lib/generate-php-sdk/templates/readme.md.template.js +86 -0
  69. package/lib/generate-php-sdk/templates/readme.md.template.js.map +1 -0
  70. package/lib/generate-php-sdk/templates/smoke-test.template.d.ts +2 -0
  71. package/lib/generate-php-sdk/templates/smoke-test.template.js +30 -0
  72. package/lib/generate-php-sdk/templates/smoke-test.template.js.map +1 -0
  73. package/lib/generate-php-sdk/templates/test-fixture.template.d.ts +2 -0
  74. package/lib/generate-php-sdk/templates/test-fixture.template.js +21 -0
  75. package/lib/generate-php-sdk/templates/test-fixture.template.js.map +1 -0
  76. package/lib/generate-php-sdk/utils/deep-extract-resource-object-schemas.d.ts +16 -0
  77. package/lib/generate-php-sdk/utils/deep-extract-resource-object-schemas.js +97 -0
  78. package/lib/generate-php-sdk/utils/deep-extract-resource-object-schemas.js.map +1 -0
  79. package/lib/generate-php-sdk/utils/deep-flatten-one-of-and-all-of-schema.d.ts +2 -0
  80. package/lib/generate-php-sdk/utils/deep-flatten-one-of-and-all-of-schema.js +95 -0
  81. package/lib/generate-php-sdk/utils/deep-flatten-one-of-and-all-of-schema.js.map +1 -0
  82. package/lib/generate-php-sdk/utils/generate-resource-object-class.d.ts +8 -0
  83. package/lib/generate-php-sdk/utils/generate-resource-object-class.js +73 -0
  84. package/lib/generate-php-sdk/utils/generate-resource-object-class.js.map +1 -0
  85. package/lib/generate-php-sdk/utils/generate-seam-client.d.ts +7 -0
  86. package/lib/generate-php-sdk/utils/generate-seam-client.js +103 -0
  87. package/lib/generate-php-sdk/utils/generate-seam-client.js.map +1 -0
  88. package/lib/generate-php-sdk/utils/get-php-type.d.ts +1 -0
  89. package/lib/generate-php-sdk/utils/get-php-type.js +17 -0
  90. package/lib/generate-php-sdk/utils/get-php-type.js.map +1 -0
  91. package/lib/generate-php-sdk/utils/php-client.d.ts +31 -0
  92. package/lib/generate-php-sdk/utils/php-client.js +130 -0
  93. package/lib/generate-php-sdk/utils/php-client.js.map +1 -0
  94. package/lib/generate-python-sdk/class-file.d.ts +20 -0
  95. package/lib/generate-python-sdk/class-file.js +75 -0
  96. package/lib/generate-python-sdk/class-file.js.map +1 -0
  97. package/lib/generate-python-sdk/generate-python-sdk.d.ts +1 -0
  98. package/lib/generate-python-sdk/generate-python-sdk.js +117 -0
  99. package/lib/generate-python-sdk/generate-python-sdk.js.map +1 -0
  100. package/lib/generate-python-sdk/index.d.ts +1 -0
  101. package/lib/generate-python-sdk/index.js +2 -0
  102. package/lib/generate-python-sdk/index.js.map +1 -0
  103. package/lib/generate-python-sdk/map-python-type.d.ts +2 -0
  104. package/lib/generate-python-sdk/map-python-type.js +26 -0
  105. package/lib/generate-python-sdk/map-python-type.js.map +1 -0
  106. package/lib/generate-python-sdk/templates/conftest.py.template.d.ts +2 -0
  107. package/lib/generate-python-sdk/templates/conftest.py.template.js +12 -0
  108. package/lib/generate-python-sdk/templates/conftest.py.template.js.map +1 -0
  109. package/lib/generate-python-sdk/templates/pyproject.toml.template.d.ts +2 -0
  110. package/lib/generate-python-sdk/templates/pyproject.toml.template.js +21 -0
  111. package/lib/generate-python-sdk/templates/pyproject.toml.template.js.map +1 -0
  112. package/lib/generate-python-sdk/templates/readme.md.template.d.ts +2 -0
  113. package/lib/generate-python-sdk/templates/readme.md.template.js +48 -0
  114. package/lib/generate-python-sdk/templates/readme.md.template.js.map +1 -0
  115. package/lib/generate-python-sdk/templates/routes.py.template.d.ts +2 -0
  116. package/lib/generate-python-sdk/templates/routes.py.template.js +13 -0
  117. package/lib/generate-python-sdk/templates/routes.py.template.js.map +1 -0
  118. package/lib/generate-python-sdk/templates/seam.py.template.d.ts +2 -0
  119. package/lib/generate-python-sdk/templates/seam.py.template.js +74 -0
  120. package/lib/generate-python-sdk/templates/seam.py.template.js.map +1 -0
  121. package/lib/generate-python-sdk/templates/snippets/abstract-routes.template.d.ts +2 -0
  122. package/lib/generate-python-sdk/templates/snippets/abstract-routes.template.js +9 -0
  123. package/lib/generate-python-sdk/templates/snippets/abstract-routes.template.js.map +1 -0
  124. package/lib/generate-python-sdk/templates/snippets/abstract-seam.template.d.ts +2 -0
  125. package/lib/generate-python-sdk/templates/snippets/abstract-seam.template.js +9 -0
  126. package/lib/generate-python-sdk/templates/snippets/abstract-seam.template.js.map +1 -0
  127. package/lib/generate-python-sdk/templates/snippets/resource-dataclass.template.d.ts +5 -0
  128. package/lib/generate-python-sdk/templates/snippets/resource-dataclass.template.js +10 -0
  129. package/lib/generate-python-sdk/templates/snippets/resource-dataclass.template.js.map +1 -0
  130. package/lib/generate-python-sdk/templates/test_smoke.py.template.d.ts +2 -0
  131. package/lib/generate-python-sdk/templates/test_smoke.py.template.js +13 -0
  132. package/lib/generate-python-sdk/templates/test_smoke.py.template.js.map +1 -0
  133. package/lib/generate-python-sdk/templates/utils/deep_attr_dict.py.template.d.ts +2 -0
  134. package/lib/generate-python-sdk/templates/utils/deep_attr_dict.py.template.js +28 -0
  135. package/lib/generate-python-sdk/templates/utils/deep_attr_dict.py.template.js.map +1 -0
  136. package/lib/generate-ruby-sdk/generate-ruby-sdk.d.ts +1 -0
  137. package/lib/generate-ruby-sdk/generate-ruby-sdk.js +132 -0
  138. package/lib/generate-ruby-sdk/generate-ruby-sdk.js.map +1 -0
  139. package/lib/generate-ruby-sdk/index.d.ts +1 -0
  140. package/lib/generate-ruby-sdk/index.js +2 -0
  141. package/lib/generate-ruby-sdk/index.js.map +1 -0
  142. package/lib/generate-ruby-sdk/request.rb.template.d.ts +1 -0
  143. package/lib/generate-ruby-sdk/request.rb.template.js +2 -0
  144. package/lib/generate-ruby-sdk/request.rb.template.js.map +1 -0
  145. package/lib/generate-ruby-sdk/ruby-client.d.ts +35 -0
  146. package/lib/generate-ruby-sdk/ruby-client.js +59 -0
  147. package/lib/generate-ruby-sdk/ruby-client.js.map +1 -0
  148. package/lib/generate-ruby-sdk/templates/base_client.rb.template.d.ts +2 -0
  149. package/lib/generate-ruby-sdk/templates/base_client.rb.template.js +22 -0
  150. package/lib/generate-ruby-sdk/templates/base_client.rb.template.js.map +1 -0
  151. package/lib/generate-ruby-sdk/templates/base_resource.rb.template.d.ts +2 -0
  152. package/lib/generate-ruby-sdk/templates/base_resource.rb.template.js +59 -0
  153. package/lib/generate-ruby-sdk/templates/base_resource.rb.template.js.map +1 -0
  154. package/lib/generate-ruby-sdk/templates/client.rb.template.d.ts +2 -0
  155. package/lib/generate-ruby-sdk/templates/client.rb.template.js +74 -0
  156. package/lib/generate-ruby-sdk/templates/client.rb.template.js.map +1 -0
  157. package/lib/generate-ruby-sdk/templates/gemfile.template.d.ts +2 -0
  158. package/lib/generate-ruby-sdk/templates/gemfile.template.js +7 -0
  159. package/lib/generate-ruby-sdk/templates/gemfile.template.js.map +1 -0
  160. package/lib/generate-ruby-sdk/templates/logger.rb.template.d.ts +2 -0
  161. package/lib/generate-ruby-sdk/templates/logger.rb.template.js +13 -0
  162. package/lib/generate-ruby-sdk/templates/logger.rb.template.js.map +1 -0
  163. package/lib/generate-ruby-sdk/templates/rakefile.template.d.ts +2 -0
  164. package/lib/generate-ruby-sdk/templates/rakefile.template.js +23 -0
  165. package/lib/generate-ruby-sdk/templates/rakefile.template.js.map +1 -0
  166. package/lib/generate-ruby-sdk/templates/readme.md.template.d.ts +2 -0
  167. package/lib/generate-ruby-sdk/templates/readme.md.template.js +184 -0
  168. package/lib/generate-ruby-sdk/templates/readme.md.template.js.map +1 -0
  169. package/lib/generate-ruby-sdk/templates/request.rb.template.d.ts +2 -0
  170. package/lib/generate-ruby-sdk/templates/request.rb.template.js +71 -0
  171. package/lib/generate-ruby-sdk/templates/request.rb.template.js.map +1 -0
  172. package/lib/generate-ruby-sdk/templates/resource_error.rb.template.d.ts +2 -0
  173. package/lib/generate-ruby-sdk/templates/resource_error.rb.template.js +8 -0
  174. package/lib/generate-ruby-sdk/templates/resource_error.rb.template.js.map +1 -0
  175. package/lib/generate-ruby-sdk/templates/resource_errors_support.rb.template.d.ts +2 -0
  176. package/lib/generate-ruby-sdk/templates/resource_errors_support.rb.template.js +10 -0
  177. package/lib/generate-ruby-sdk/templates/resource_errors_support.rb.template.js.map +1 -0
  178. package/lib/generate-ruby-sdk/templates/resource_warning.rb.template.d.ts +2 -0
  179. package/lib/generate-ruby-sdk/templates/resource_warning.rb.template.js +8 -0
  180. package/lib/generate-ruby-sdk/templates/resource_warning.rb.template.js.map +1 -0
  181. package/lib/generate-ruby-sdk/templates/resource_warnings_support.rb.template.d.ts +2 -0
  182. package/lib/generate-ruby-sdk/templates/resource_warnings_support.rb.template.js +10 -0
  183. package/lib/generate-ruby-sdk/templates/resource_warnings_support.rb.template.js.map +1 -0
  184. package/lib/generate-ruby-sdk/templates/seamapi.gemspec.template.d.ts +2 -0
  185. package/lib/generate-ruby-sdk/templates/seamapi.gemspec.template.js +41 -0
  186. package/lib/generate-ruby-sdk/templates/seamapi.gemspec.template.js.map +1 -0
  187. package/lib/generate-ruby-sdk/templates/snippets/resource.rb.template.d.ts +6 -0
  188. package/lib/generate-ruby-sdk/templates/snippets/resource.rb.template.js +15 -0
  189. package/lib/generate-ruby-sdk/templates/snippets/resource.rb.template.js.map +1 -0
  190. package/lib/generate-ruby-sdk/templates/version.rb.template.d.ts +2 -0
  191. package/lib/generate-ruby-sdk/templates/version.rb.template.js +6 -0
  192. package/lib/generate-ruby-sdk/templates/version.rb.template.js.map +1 -0
  193. package/lib/index.d.ts +2 -0
  194. package/lib/index.js +3 -0
  195. package/lib/index.js.map +1 -0
  196. package/lib/openapi/flatten-obj-schema.d.ts +5 -0
  197. package/lib/openapi/flatten-obj-schema.js +86 -0
  198. package/lib/openapi/flatten-obj-schema.js.map +1 -0
  199. package/lib/openapi/get-parameter-and-response-schema.d.ts +20 -0
  200. package/lib/openapi/get-parameter-and-response-schema.js +42 -0
  201. package/lib/openapi/get-parameter-and-response-schema.js.map +1 -0
  202. package/lib/openapi/index.d.ts +2 -0
  203. package/lib/openapi/index.js +3 -0
  204. package/lib/openapi/index.js.map +1 -0
  205. package/lib/types.d.ts +91 -0
  206. package/lib/types.js +2 -0
  207. package/lib/types.js.map +1 -0
  208. package/package.json +95 -0
  209. package/src/index.ts +6 -0
  210. package/src/lib/cli.ts +71 -0
  211. package/src/lib/fs-util/index.ts +2 -0
  212. package/src/lib/fs-util/populate-fs.ts +14 -0
  213. package/src/lib/fs-util/write-fs.ts +10 -0
  214. package/src/lib/generate-csharp-sdk/codegen.ts +648 -0
  215. package/src/lib/generate-csharp-sdk/constants.ts +1 -0
  216. package/src/lib/generate-csharp-sdk/generate-csharp-sdk.ts +126 -0
  217. package/src/lib/generate-csharp-sdk/generate-csproj.ts +45 -0
  218. package/src/lib/generate-csharp-sdk/templates/dataclass.ts +973 -0
  219. package/src/lib/generate-csharp-sdk/templates/fs/csharp-testing.sln +34 -0
  220. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ApiResponse.cs +159 -0
  221. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ClientUtils.cs +280 -0
  222. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ExceptionFactory.cs +12 -0
  223. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/GlobalSeamRequestConfiguration.cs +60 -0
  224. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/HttpMethod.cs +29 -0
  225. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/IAsynchronousSeam.cs +142 -0
  226. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/IReadableSeamRequestConfiguration.cs +68 -0
  227. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ISynchronousSeam.cs +103 -0
  228. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/Multimap.cs +286 -0
  229. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/RequestOptions.cs +74 -0
  230. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/RetryConfiguration.cs +21 -0
  231. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/Seam.cs +1070 -0
  232. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/SeamException.cs +64 -0
  233. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/SeamRequestConfiguration.cs +662 -0
  234. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Model/AsbtractModelSchema.cs +62 -0
  235. package/src/lib/generate-php-sdk/generate-php-sdk.ts +176 -0
  236. package/src/lib/generate-php-sdk/index.ts +1 -0
  237. package/src/lib/generate-php-sdk/templates/composer.json.template.ts +24 -0
  238. package/src/lib/generate-php-sdk/templates/env.example.template.ts +3 -0
  239. package/src/lib/generate-php-sdk/templates/gitignore.template.ts +5 -0
  240. package/src/lib/generate-php-sdk/templates/package.json.template.ts +11 -0
  241. package/src/lib/generate-php-sdk/templates/readme.md.template.ts +85 -0
  242. package/src/lib/generate-php-sdk/templates/smoke-test.template.ts +29 -0
  243. package/src/lib/generate-php-sdk/templates/test-fixture.template.ts +20 -0
  244. package/src/lib/generate-php-sdk/utils/deep-extract-resource-object-schemas.ts +160 -0
  245. package/src/lib/generate-php-sdk/utils/deep-flatten-one-of-and-all-of-schema.ts +128 -0
  246. package/src/lib/generate-php-sdk/utils/generate-resource-object-class.ts +105 -0
  247. package/src/lib/generate-php-sdk/utils/generate-seam-client.ts +115 -0
  248. package/src/lib/generate-php-sdk/utils/get-php-type.ts +21 -0
  249. package/src/lib/generate-php-sdk/utils/php-client.ts +189 -0
  250. package/src/lib/generate-python-sdk/class-file.ts +114 -0
  251. package/src/lib/generate-python-sdk/generate-python-sdk.ts +147 -0
  252. package/src/lib/generate-python-sdk/index.ts +1 -0
  253. package/src/lib/generate-python-sdk/map-python-type.ts +29 -0
  254. package/src/lib/generate-python-sdk/templates/conftest.py.template.ts +11 -0
  255. package/src/lib/generate-python-sdk/templates/pyproject.toml.template.ts +20 -0
  256. package/src/lib/generate-python-sdk/templates/readme.md.template.ts +47 -0
  257. package/src/lib/generate-python-sdk/templates/routes.py.template.ts +13 -0
  258. package/src/lib/generate-python-sdk/templates/seam.py.template.ts +73 -0
  259. package/src/lib/generate-python-sdk/templates/snippets/abstract-routes.template.ts +9 -0
  260. package/src/lib/generate-python-sdk/templates/snippets/abstract-seam.template.ts +8 -0
  261. package/src/lib/generate-python-sdk/templates/snippets/resource-dataclass.template.ts +15 -0
  262. package/src/lib/generate-python-sdk/templates/test_smoke.py.template.ts +12 -0
  263. package/src/lib/generate-python-sdk/templates/utils/deep_attr_dict.py.template.ts +27 -0
  264. package/src/lib/generate-ruby-sdk/generate-ruby-sdk.ts +153 -0
  265. package/src/lib/generate-ruby-sdk/index.ts +1 -0
  266. package/src/lib/generate-ruby-sdk/request.rb.template.ts +0 -0
  267. package/src/lib/generate-ruby-sdk/ruby-client.ts +81 -0
  268. package/src/lib/generate-ruby-sdk/templates/base_client.rb.template.ts +21 -0
  269. package/src/lib/generate-ruby-sdk/templates/base_resource.rb.template.ts +58 -0
  270. package/src/lib/generate-ruby-sdk/templates/client.rb.template.ts +73 -0
  271. package/src/lib/generate-ruby-sdk/templates/gemfile.template.ts +6 -0
  272. package/src/lib/generate-ruby-sdk/templates/logger.rb.template.ts +12 -0
  273. package/src/lib/generate-ruby-sdk/templates/rakefile.template.ts +22 -0
  274. package/src/lib/generate-ruby-sdk/templates/readme.md.template.ts +183 -0
  275. package/src/lib/generate-ruby-sdk/templates/request.rb.template.ts +70 -0
  276. package/src/lib/generate-ruby-sdk/templates/resource_error.rb.template.ts +7 -0
  277. package/src/lib/generate-ruby-sdk/templates/resource_errors_support.rb.template.ts +9 -0
  278. package/src/lib/generate-ruby-sdk/templates/resource_warning.rb.template.ts +7 -0
  279. package/src/lib/generate-ruby-sdk/templates/resource_warnings_support.rb.template.ts +9 -0
  280. package/src/lib/generate-ruby-sdk/templates/seamapi.gemspec.template.ts +40 -0
  281. package/src/lib/generate-ruby-sdk/templates/snippets/resource.rb.template.ts +24 -0
  282. package/src/lib/generate-ruby-sdk/templates/version.rb.template.ts +5 -0
  283. package/src/lib/index.ts +2 -0
  284. package/src/lib/openapi/flatten-obj-schema.ts +124 -0
  285. package/src/lib/openapi/get-parameter-and-response-schema.ts +59 -0
  286. package/src/lib/openapi/index.ts +2 -0
  287. package/src/lib/types.ts +96 -0
@@ -0,0 +1,128 @@
1
+ import type {
2
+ AllOfSchema,
3
+ ArraySchema,
4
+ ObjSchema,
5
+ OneOfSchema,
6
+ PrimitiveSchema,
7
+ PropertySchema,
8
+ } from "lib/types.js"
9
+
10
+ export function deepFlattenOneOfAndAllOfSchema(schema: PropertySchema) {
11
+ if ("oneOf" in schema) {
12
+ return flattenOneOf(schema)
13
+ } else if ("allOf" in schema) {
14
+ return flattenAllOf(schema)
15
+ } else if (
16
+ "type" in schema &&
17
+ schema.type === "object" &&
18
+ schema.properties
19
+ ) {
20
+ return flattenObject(schema)
21
+ } else if ("type" in schema && schema.type === "array" && schema.items) {
22
+ return flattenArray(schema)
23
+ } else {
24
+ // For primitive types, return the schema as is
25
+ return schema
26
+ }
27
+ }
28
+
29
+ function flattenOneOf(one_of_schema: OneOfSchema): ObjSchema | PrimitiveSchema {
30
+ const flattened_schema = {
31
+ type: "object",
32
+ properties: {},
33
+ required: [],
34
+ } as ObjSchema
35
+
36
+ for (const sub_schema of one_of_schema.oneOf) {
37
+ const flattened_sub_schema = deepFlattenOneOfAndAllOfSchema(sub_schema)
38
+
39
+ // Check if the sub-schema is a primitive schema
40
+ if (
41
+ "type" in flattened_sub_schema &&
42
+ !("properties" in flattened_sub_schema)
43
+ ) {
44
+ return { type: flattened_sub_schema.type } as PrimitiveSchema
45
+ }
46
+
47
+ if ("$ref" in flattened_sub_schema) {
48
+ console.error("$ref not currently supported when flattening oneOf")
49
+ continue
50
+ }
51
+
52
+ // Merge properties
53
+ Object.assign(flattened_schema.properties, flattened_sub_schema.properties)
54
+
55
+ // Update required array with common properties
56
+ flattened_schema.required =
57
+ flattened_schema.required.length === 0
58
+ ? flattened_sub_schema.required
59
+ : flattened_schema.required.filter((prop) =>
60
+ flattened_sub_schema.required.includes(prop)
61
+ )
62
+ }
63
+
64
+ return flattened_schema
65
+ }
66
+
67
+ function flattenAllOf(all_of_schema: AllOfSchema): ObjSchema | PrimitiveSchema {
68
+ const flattened_schema = {
69
+ type: "object",
70
+ properties: {},
71
+ required: [],
72
+ } as ObjSchema
73
+
74
+ for (const sub_Schema of all_of_schema.allOf) {
75
+ const flattened_sub_schema = deepFlattenOneOfAndAllOfSchema(sub_Schema)
76
+
77
+ // Check if the sub-schema is a primitive schema
78
+ if (
79
+ "type" in flattened_sub_schema &&
80
+ !("properties" in flattened_sub_schema)
81
+ ) {
82
+ return { type: flattened_sub_schema.type } as PrimitiveSchema
83
+ }
84
+
85
+ if ("$ref" in flattened_sub_schema) {
86
+ console.error("$ref not currently supported when flattening allOf")
87
+ continue
88
+ }
89
+
90
+ // Merge properties
91
+ Object.assign(flattened_schema.properties, flattened_sub_schema.properties)
92
+
93
+ // Merge required array
94
+ flattened_schema.required = [
95
+ ...new Set([
96
+ ...flattened_schema.required,
97
+ ...flattened_sub_schema.required,
98
+ ]),
99
+ ]
100
+ }
101
+
102
+ return flattened_schema
103
+ }
104
+
105
+ function flattenObject(obj_schema: ObjSchema) {
106
+ const flattened_schema = {
107
+ type: "object",
108
+ properties: {},
109
+ required: obj_schema.required || [],
110
+ } as ObjSchema
111
+
112
+ for (const prop in obj_schema.properties) {
113
+ flattened_schema.properties[prop] = deepFlattenOneOfAndAllOfSchema(
114
+ obj_schema.properties[prop]!
115
+ )
116
+ }
117
+
118
+ return flattened_schema
119
+ }
120
+
121
+ function flattenArray(array_schema: ArraySchema): ArraySchema {
122
+ const flattened_schema = {
123
+ type: "array",
124
+ items: deepFlattenOneOfAndAllOfSchema(array_schema.items),
125
+ } as ArraySchema
126
+
127
+ return flattened_schema
128
+ }
@@ -0,0 +1,105 @@
1
+ import type { PropertySchemaWithReferenceObject } from "./deep-extract-resource-object-schemas.js"
2
+ import { getPhpType } from "./get-php-type.js"
3
+
4
+ interface Params {
5
+ resource_name: string
6
+ resource_properties: Record<string, PropertySchemaWithReferenceObject>
7
+ required_property_names: string[]
8
+ }
9
+
10
+ export const generateResourceObjectClass = ({
11
+ resource_name,
12
+ resource_properties,
13
+ required_property_names,
14
+ }: Params) => {
15
+ const generateTypeDefinition = (
16
+ prop_name: string,
17
+ prop_schema: PropertySchemaWithReferenceObject
18
+ ) => {
19
+ const is_object_referencing_resource =
20
+ "type" in prop_schema &&
21
+ prop_schema.type === "object" &&
22
+ "reference_object_type_name" in prop_schema
23
+
24
+ const is_array_referencing_resource =
25
+ "type" in prop_schema &&
26
+ prop_schema.type === "array" &&
27
+ "reference_object_type_name" in prop_schema
28
+
29
+ if (is_object_referencing_resource) {
30
+ return `${prop_name}: ${
31
+ prop_schema.reference_object_type_name
32
+ }::from_json($json->${prop_name})${
33
+ required_property_names.includes(prop_name) ? "," : " ?? null,"
34
+ }`
35
+ } else if (is_array_referencing_resource) {
36
+ return `${prop_name}: array_map(
37
+ fn ($${prop_name[0]}) => ${prop_schema.reference_object_type_name}::from_json($${prop_name[0]}),
38
+ $json->${prop_name} ?? []
39
+ ),`
40
+ } else {
41
+ return `${prop_name}: $json->${prop_name}${
42
+ required_property_names.includes(prop_name) ? "," : " ?? null,"
43
+ }`
44
+ }
45
+ }
46
+
47
+ const generateFromJsonMethod = () => {
48
+ return `
49
+ public static function from_json(mixed $json): ${resource_name}|null
50
+ {
51
+ if (!$json) {
52
+ return null;
53
+ }
54
+ return new self(
55
+ ${Object.entries(resource_properties)
56
+ .map(([prop, prop_schema]) =>
57
+ generateTypeDefinition(prop, prop_schema)
58
+ )
59
+ .join("\n ")}
60
+ );
61
+ }
62
+ `
63
+ }
64
+
65
+ const generateConstructor = () => {
66
+ return `
67
+ public function __construct(
68
+ ${Object.entries(resource_properties)
69
+ .map(([prop_name, prop_schema]) => {
70
+ const is_object_referencing_resource =
71
+ "type" in prop_schema &&
72
+ prop_schema.type === "object" &&
73
+ "reference_object_type_name" in prop_schema
74
+ const php_type = is_object_referencing_resource
75
+ ? prop_schema.reference_object_type_name
76
+ : getPhpType("type" in prop_schema ? prop_schema.type : "mixed")
77
+
78
+ return `public ${php_type}${
79
+ php_type === "mixed"
80
+ ? ""
81
+ : required_property_names.includes(prop_name)
82
+ ? ""
83
+ : " | null"
84
+ } $${prop_name},`
85
+ })
86
+ .join("\n ")}
87
+ ) {
88
+ }
89
+ `
90
+ }
91
+
92
+ const phpClass = `<?php
93
+
94
+ namespace Seam\\Objects;
95
+
96
+ class ${resource_name}
97
+ {
98
+ ${generateFromJsonMethod()}
99
+
100
+ ${generateConstructor()}
101
+ }
102
+ `
103
+
104
+ return phpClass
105
+ }
@@ -0,0 +1,115 @@
1
+ import type { PhpClient } from "./php-client.js"
2
+
3
+ interface Params {
4
+ resource_clients: PhpClient[]
5
+ resource_object_names: string[]
6
+ }
7
+
8
+ export const generateSeamClient = ({
9
+ resource_clients,
10
+ resource_object_names,
11
+ }: Params) => {
12
+ const parent_resource_clients = resource_clients.filter(
13
+ (c) => c.is_parent_client
14
+ )
15
+
16
+ return `<?php
17
+
18
+ namespace Seam;
19
+
20
+ ${resource_object_names.map((n) => `use Seam\\Objects\\${n};`).join("\n")}
21
+
22
+ use GuzzleHttp\\Client as HTTPClient;
23
+ use \\Exception as Exception;
24
+
25
+ class SeamClient
26
+ {
27
+ ${parent_resource_clients
28
+ .map((c) => `public ${c.client_name}Client $${c.namespace};`)
29
+ .join("\n ")}
30
+
31
+ public string $api_key;
32
+ public HTTPClient $client;
33
+
34
+ public function __construct(
35
+ $api_key,
36
+ $endpoint = "https://connect.getseam.com",
37
+ $throw_http_errors = false
38
+ ) {
39
+ $this->api_key = $api_key;
40
+ $this->client = new HTTPClient([
41
+ "base_uri" => $endpoint,
42
+ "timeout" => 60.0,
43
+ "headers" => [
44
+ "Authorization" => "Bearer " . $this->api_key,
45
+ "User-Agent" => "Seam PHP Client 0.0.1",
46
+ ],
47
+ "http_errors" => $throw_http_errors,
48
+ ]);
49
+ ${parent_resource_clients
50
+ .map((c) => `$this->${c.namespace} = new ${c.client_name}Client($this);`)
51
+ .join("\n ")}
52
+ }
53
+
54
+ public function request(
55
+ $method,
56
+ $path,
57
+ $json = null,
58
+ $query = null,
59
+ $inner_object = null
60
+ ) {
61
+ $options = [
62
+ "json" => $json,
63
+ "query" => $query,
64
+ ];
65
+ $options = array_filter($options, fn ($option) => $option !== null);
66
+
67
+ // TODO handle request errors
68
+ $response = $this->client->request($method, $path, $options);
69
+ $statusCode = $response->getStatusCode();
70
+
71
+ $res_json = null;
72
+ try {
73
+ $res_json = json_decode($response->getBody());
74
+ } catch (Exception $ignoreError) {
75
+ }
76
+
77
+ if (($res_json->error ?? null) != null) {
78
+ throw new Exception(
79
+ "Error Calling \\"" .
80
+ $method .
81
+ " " .
82
+ $path .
83
+ "\\" : " .
84
+ ($res_json->error->type ?? "") .
85
+ ": " .
86
+ $res_json->error->message
87
+ );
88
+ }
89
+
90
+ if ($statusCode >= 400) {
91
+ throw new Exception(
92
+ "HTTP Error: [" . $statusCode . "] " . $method . " " . $path
93
+ );
94
+ }
95
+
96
+ if ($inner_object) {
97
+ if (!is_array($res_json->$inner_object) && ($res_json->$inner_object ?? null) == null) {
98
+ throw new Exception(
99
+ 'Missing Inner Object "' .
100
+ $inner_object .
101
+ '" for ' .
102
+ $method .
103
+ " " .
104
+ $path
105
+ );
106
+ }
107
+ return $res_json->$inner_object;
108
+ }
109
+ return $res_json;
110
+ }
111
+ }
112
+
113
+ ${resource_clients.map((c) => c.serialize()).join("\n\n")}
114
+ `
115
+ }
@@ -0,0 +1,21 @@
1
+ export const getPhpType = (zod_type: string) => {
2
+ switch (zod_type) {
3
+ case "string":
4
+ return "string"
5
+
6
+ case "number":
7
+ return "float"
8
+
9
+ case "boolean":
10
+ return "bool"
11
+
12
+ case "object":
13
+ return "mixed"
14
+
15
+ case "array":
16
+ return "array"
17
+
18
+ default:
19
+ return "mixed"
20
+ }
21
+ }
@@ -0,0 +1,189 @@
1
+ export type PhpClientMethodParameter = {
2
+ name: string
3
+ type: string
4
+ required?: boolean | undefined
5
+ position?: number | undefined
6
+ }
7
+
8
+ export type PhpClientMethod = {
9
+ method_name: string
10
+ path: string
11
+ parameters: PhpClientMethodParameter[]
12
+ return_resource: string
13
+ return_path: string
14
+ is_array_response: boolean
15
+ }
16
+
17
+ type ClientName = string
18
+ type Namespace = string
19
+ export type PhpClientIdentifiers = {
20
+ client_name: ClientName
21
+ namespace: Namespace
22
+ }
23
+
24
+ export class PhpClient {
25
+ methods: PhpClientMethod[] = []
26
+
27
+ constructor(
28
+ public client_name: ClientName,
29
+ public namespace: Namespace,
30
+ public is_parent_client: boolean,
31
+ public child_client_identifiers: PhpClientIdentifiers[]
32
+ ) {
33
+ this.methods = []
34
+ }
35
+
36
+ addMethod(method: PhpClientMethod) {
37
+ this.methods.push(method)
38
+ }
39
+
40
+ serialize() {
41
+ const has_child_clients = this.child_client_identifiers.length > 0
42
+
43
+ return [
44
+ `class ${this.client_name}Client`,
45
+ `{`,
46
+ ` private SeamClient $seam;`,
47
+ ` ${
48
+ has_child_clients
49
+ ? this.child_client_identifiers
50
+ .map((i) => ` public ${i.client_name}Client $${i.namespace};`)
51
+ .join("\n")
52
+ : ""
53
+ }`,
54
+ ` public function __construct(SeamClient $seam)`,
55
+ ` {`,
56
+ ` $this->seam = $seam;`,
57
+ ` ${
58
+ has_child_clients
59
+ ? this.child_client_identifiers
60
+ .map(
61
+ (i) =>
62
+ `$this->${i.namespace} = new ${i.client_name}Client($seam);`
63
+ )
64
+ .join("\n")
65
+ : ""
66
+ }`,
67
+ ` }`,
68
+ "",
69
+ ...this.methods.map(
70
+ ({
71
+ method_name,
72
+ path,
73
+ parameters,
74
+ return_resource,
75
+ return_path,
76
+ is_array_response,
77
+ }) => {
78
+ const does_method_use_action_attempt =
79
+ return_resource === "ActionAttempt" &&
80
+ this.client_name !== "ActionAttempts"
81
+ const method_return_type = is_array_response
82
+ ? "array"
83
+ : return_resource
84
+ ? return_resource
85
+ : "void"
86
+
87
+ return [
88
+ "",
89
+ ` public function ${method_name}(`,
90
+ ` ${parameters
91
+ .sort(
92
+ (a, b) =>
93
+ (a.position ?? a.required ? 1000 : 9999) -
94
+ (b.position ?? b.required ? 1000 : 9999)
95
+ )
96
+ .map((p) => `${p.type} $${p.name}${p.required ? "" : " = null"}`)
97
+ .concat(
98
+ does_method_use_action_attempt
99
+ ? ["bool $wait_for_action_attempt = true"]
100
+ : []
101
+ )
102
+ .join(",\n ")}`,
103
+ ` ): ${method_return_type} {`,
104
+
105
+ ` $request_payload = [];`,
106
+ ``,
107
+
108
+ `${parameters
109
+ .map((p) =>
110
+ [
111
+ ` if ($${p.name} !== null) {`,
112
+ ` $request_payload["${p.name}"] = $${p.name};`,
113
+ ` }`,
114
+ ].join("\n")
115
+ )
116
+ .join("\n")}`,
117
+ ``,
118
+
119
+ ` ${return_resource ? "$res = " : ""}$this->seam->request(`,
120
+ ` "POST",`,
121
+ ` "${path}",`,
122
+ ` json: $request_payload,`,
123
+ ` ${return_path ? `inner_object: "${return_path}",` : ""}`,
124
+ ` );`,
125
+ ``,
126
+
127
+ does_method_use_action_attempt
128
+ ? [
129
+ " if (!$wait_for_action_attempt) {",
130
+ ` return ${return_resource}::from_json($res);`,
131
+ " }",
132
+ ].join("\n")
133
+ : "",
134
+ ``,
135
+ does_method_use_action_attempt
136
+ ? [
137
+ ` $action_attempt = $this->seam->action_attempts->poll_until_ready(`,
138
+ ` $res->action_attempt_id`,
139
+ ` );`,
140
+ ``,
141
+ ` return $action_attempt;`,
142
+ ].join("\n")
143
+ : "",
144
+ ``,
145
+
146
+ return_resource && !does_method_use_action_attempt
147
+ ? ` return ${
148
+ is_array_response
149
+ ? `array_map(fn ($r) => ${return_resource}::from_json($r), $res);`
150
+ : `${return_resource}::from_json($res);`
151
+ }`
152
+ : "",
153
+ ` }`,
154
+ ].join("\n")
155
+ }
156
+ ),
157
+ this.client_name === "ActionAttempts"
158
+ ? [
159
+ " public function poll_until_ready(string $action_attempt_id): ActionAttempt",
160
+ " {",
161
+ " $seam = $this->seam;",
162
+ " $time_waiting = 0.0;",
163
+ " $action_attempt = $seam->action_attempts->get($action_attempt_id);",
164
+ "",
165
+ ' while ($action_attempt->status == "pending") {',
166
+ " $action_attempt = $seam->action_attempts->get(",
167
+ " $action_attempt->action_attempt_id",
168
+ " );",
169
+ " if ($time_waiting > 20.0) {",
170
+ ' throw new Exception("Timed out waiting for access code to be created");',
171
+ " }",
172
+ " $time_waiting += 0.4;",
173
+ " usleep(400000); // sleep for 0.4 seconds",
174
+ " }",
175
+ "",
176
+ ' if ($action_attempt->status == "failed") {',
177
+ " throw new Exception(",
178
+ ' "Action Attempt failed: " . $action_attempt->error->message',
179
+ " );",
180
+ " }",
181
+ "",
182
+ " return $action_attempt;",
183
+ " }",
184
+ ].join("\n")
185
+ : "",
186
+ "}",
187
+ ].join("\n")
188
+ }
189
+ }
@@ -0,0 +1,114 @@
1
+ export type ClassFileMethod = {
2
+ method_name: string
3
+ path: string
4
+ parameters: Array<{
5
+ name: string
6
+ type: string
7
+ position?: number | undefined
8
+ }>
9
+ return_path: string[]
10
+ return_resource: string
11
+ }
12
+
13
+ export class ClassFile {
14
+ name: string
15
+ namespace: string | undefined
16
+ methods: ClassFileMethod[]
17
+
18
+ constructor(name: string, namespace?: string | undefined) {
19
+ this.name = name
20
+ this.namespace = namespace
21
+ this.methods = []
22
+ }
23
+
24
+ addMethod(method: ClassFileMethod) {
25
+ this.methods.push(method)
26
+ }
27
+
28
+ serializeToAbstractClassWithoutImports(): string {
29
+ return [
30
+ `class Abstract${this.name}(abc.ABC):`,
31
+ this.methods.length === 0 ? ` pass` : "",
32
+ ...this.methods.map(({ method_name, parameters }) =>
33
+ [
34
+ "",
35
+ "",
36
+ `@abc.abstractmethod`,
37
+ `def ${method_name}(self, ${parameters
38
+ .sort((a, b) => (a.position ?? 9999) - (b.position ?? 9999))
39
+ .map(({ name, type, position }) =>
40
+ position !== undefined
41
+ ? `${name}: ${type}`
42
+ : `${name}: Optional[${type}] = None`
43
+ )
44
+ .join(", ")}):`,
45
+ ` raise NotImplementedError()`,
46
+ ]
47
+ .map((s) => ` ${s}`)
48
+ .join("\n")
49
+ ),
50
+ ].join("\n")
51
+ }
52
+
53
+ serializeToClass(): string {
54
+ return [
55
+ `from seamapi.types import (${[
56
+ `Abstract${this.name}`,
57
+ `AbstractSeam as Seam`,
58
+ ...Array.from(
59
+ new Set(
60
+ this.methods.map((m) =>
61
+ m.return_resource.replace(/^List\[/, "").replace(/\]$/, "")
62
+ )
63
+ )
64
+ ),
65
+ ].join(",")})`,
66
+ `from typing import (Optional, Any)`,
67
+ "",
68
+ `class ${this.name}(Abstract${this.name}):`,
69
+ // TODO DOCSTRING
70
+ ` seam: Seam`,
71
+ "",
72
+ ` def __init__(self, seam: Seam):`,
73
+ ` self.seam = seam`,
74
+ "",
75
+ ...this.methods.map(
76
+ ({ method_name, path, return_resource, return_path, parameters }) => {
77
+ const is_return_resource_a_list = return_resource.startsWith("List[")
78
+ const list_item_type = return_resource.slice(5, -1)
79
+ return [
80
+ "",
81
+ "",
82
+ `def ${method_name}(self, ${parameters
83
+ .sort((a, b) => (a.position ?? 9999) - (b.position ?? 9999))
84
+ .map(({ name, type, position }) =>
85
+ position !== undefined
86
+ ? `${name}: ${type}`
87
+ : `${name}: Optional[${type}] = None`
88
+ )
89
+ .join(", ")}):`,
90
+ ` json_payload = {}`,
91
+ ...parameters.map(
92
+ ({ name }) =>
93
+ ` if ${name} is not None:\n json_payload["${name}"] = ${name}`
94
+ ),
95
+ ` res = self.seam.make_request(`,
96
+ ` "POST",`,
97
+ ` "${path}",`,
98
+ ` json=json_payload`,
99
+ ` )`,
100
+ is_return_resource_a_list
101
+ ? ` return [${list_item_type}.from_dict(item) for item in res["${return_path.join(
102
+ '"]["'
103
+ )}"]]`
104
+ : ` return ${return_resource}.from_dict(res["${return_path.join(
105
+ '"]["'
106
+ )}"])`,
107
+ ]
108
+ .map((s) => ` ${s}`)
109
+ .join("\n")
110
+ }
111
+ ),
112
+ ].join("\n")
113
+ }
114
+ }