@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,62 @@
1
+ using System;
2
+ using Newtonsoft.Json;
3
+ using Newtonsoft.Json.Serialization;
4
+
5
+ namespace Seam.Model
6
+ {
7
+ /// <summary>
8
+ /// Abstract base class for oneOf, anyOf schemas in the OpenAPI specification
9
+ /// </summary>
10
+ public abstract class AbstractModelSchema
11
+ {
12
+ /// <summary>
13
+ /// Custom JSON serializer
14
+ /// </summary>
15
+ static public readonly JsonSerializerSettings SerializerSettings =
16
+ new JsonSerializerSettings
17
+ {
18
+ // OpenAPI generated types generally hide default constructors.
19
+ ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
20
+ MissingMemberHandling = MissingMemberHandling.Error,
21
+ ContractResolver = new DefaultContractResolver
22
+ {
23
+ NamingStrategy = new CamelCaseNamingStrategy { OverrideSpecifiedNames = false }
24
+ }
25
+ };
26
+
27
+ /// <summary>
28
+ /// Custom JSON serializer for objects with additional properties
29
+ /// </summary>
30
+ static public readonly JsonSerializerSettings AdditionalPropertiesSerializerSettings =
31
+ new JsonSerializerSettings
32
+ {
33
+ // OpenAPI generated types generally hide default constructors.
34
+ ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
35
+ MissingMemberHandling = MissingMemberHandling.Ignore,
36
+ ContractResolver = new DefaultContractResolver
37
+ {
38
+ NamingStrategy = new CamelCaseNamingStrategy { OverrideSpecifiedNames = false }
39
+ }
40
+ };
41
+
42
+ /// <summary>
43
+ /// Gets or Sets the actual instance
44
+ /// </summary>
45
+ public abstract Object ActualInstance { get; set; }
46
+
47
+ /// <summary>
48
+ /// Gets or Sets IsNullable to indicate whether the instance is nullable
49
+ /// </summary>
50
+ public bool IsNullable { get; protected set; }
51
+
52
+ /// <summary>
53
+ /// Gets or Sets the schema type, which can be either `oneOf` or `anyOf`
54
+ /// </summary>
55
+ public string SchemaType { get; protected set; }
56
+
57
+ /// <summary>
58
+ /// Converts the instance into JSON string.
59
+ /// </summary>
60
+ public abstract string ToJson();
61
+ }
62
+ }
@@ -0,0 +1,176 @@
1
+ import axios from "axios"
2
+ import type { OpenAPISchema, Route } from "lib/types.js"
3
+ import { getParameterAndResponseSchema } from "lib/index.js"
4
+ import { generateResourceObjectClass } from "./utils/generate-resource-object-class.js"
5
+ import { pascalCase } from "change-case"
6
+ import { getPhpType } from "./utils/get-php-type.js"
7
+ import { PhpClient, type PhpClientIdentifiers } from "./utils/php-client.js"
8
+ import { generateSeamClient } from "./utils/generate-seam-client.js"
9
+ import { deepExtractResourceObjectSchemas } from "./utils/deep-extract-resource-object-schemas.js"
10
+ import readmeMdTemplate from "./templates/readme.md.template.js"
11
+ import packageJsonTemplate from "./templates/package.json.template.js"
12
+ import composerJsonTemplate from "./templates/composer.json.template.js"
13
+ import gitignoreTemplate from "./templates/gitignore.template.js"
14
+ import envExampleTemplate from "./templates/env.example.template.js"
15
+ import testFixtureTemplate from "./templates/test-fixture.template.js"
16
+ import smokeTestTemplate from "./templates/smoke-test.template.js"
17
+
18
+ export const generatePhpSDK = async () => {
19
+ const openapi: OpenAPISchema = await axios
20
+ .get("https://connect.getseam.com/openapi.json")
21
+ .then((res) => res.data)
22
+ const routes: Route[] = Object.entries(openapi.paths).map(([path, v]) => ({
23
+ path,
24
+ ...v,
25
+ }))
26
+
27
+ const fs: any = {}
28
+
29
+ fs["README.md"] = readmeMdTemplate()
30
+ fs["package.json"] = packageJsonTemplate()
31
+ fs["composer.json"] = composerJsonTemplate()
32
+ fs[".gitignore"] = gitignoreTemplate()
33
+ fs[".env.example"] = envExampleTemplate()
34
+ fs["tests/Fixture.php"] = testFixtureTemplate()
35
+ fs["tests/SmokeTest.php"] = smokeTestTemplate()
36
+
37
+ const base_resource_object_names: string[] = []
38
+ for (const [schema_name, schema] of Object.entries(
39
+ openapi.components.schemas
40
+ )) {
41
+ base_resource_object_names.push(pascalCase(schema_name))
42
+
43
+ const base_resource_schema_with_sub_schemas =
44
+ deepExtractResourceObjectSchemas({
45
+ schema_name,
46
+ schema_body: schema,
47
+ })
48
+
49
+ for (const { name, properties, required_property_names } of Object.values(
50
+ base_resource_schema_with_sub_schemas
51
+ )) {
52
+ fs[`src/Objects/${name}.php`] = generateResourceObjectClass({
53
+ resource_name: name,
54
+ resource_properties: properties,
55
+ required_property_names,
56
+ })
57
+ }
58
+ }
59
+
60
+ const parent_resource_to_children_map = routes.reduce(
61
+ (acc: Record<string, string[]>, route) => {
62
+ if (!route.post?.["x-fern-sdk-group-name"]) return acc
63
+
64
+ const [parent_resource_name, child_resource_name] =
65
+ route.post["x-fern-sdk-group-name"]
66
+
67
+ // Making TS happy
68
+ if (!parent_resource_name) return acc
69
+
70
+ if (!acc[parent_resource_name]) {
71
+ acc[parent_resource_name] = []
72
+ }
73
+
74
+ if (
75
+ child_resource_name &&
76
+ !acc[parent_resource_name]!.includes(child_resource_name)
77
+ ) {
78
+ acc[parent_resource_name]!.push(child_resource_name)
79
+ }
80
+
81
+ return acc
82
+ },
83
+ {}
84
+ )
85
+
86
+ const clients: Record<string, PhpClient> = {}
87
+
88
+ const processClient = (resource_name: string) => {
89
+ const child_client_identifiers: PhpClientIdentifiers[] = (
90
+ parent_resource_to_children_map[resource_name] ?? []
91
+ ).map((child_resource) => ({
92
+ client_name: pascalCase(`${resource_name} ${child_resource}`),
93
+ namespace: child_resource,
94
+ }))
95
+ const is_parent_client = Object.keys(
96
+ parent_resource_to_children_map
97
+ ).includes(resource_name)
98
+ const pascal_resource_name = pascalCase(resource_name)
99
+
100
+ clients[pascal_resource_name] = new PhpClient(
101
+ pascal_resource_name,
102
+ resource_name,
103
+ is_parent_client,
104
+ child_client_identifiers
105
+ )
106
+ }
107
+
108
+ for (const route of routes) {
109
+ if (!route.post || !route.post["x-fern-sdk-group-name"]) continue
110
+
111
+ const group_names = [...route.post["x-fern-sdk-group-name"]]
112
+ const [base_resource] = group_names
113
+ const namespace = group_names.join("_")
114
+ const client_name = pascalCase(namespace)
115
+
116
+ if (!clients[client_name]) {
117
+ processClient(namespace)
118
+ }
119
+
120
+ /*
121
+ special case when we don't have routes for a base resource
122
+ and thus a respective x-fern-sdk-group-name for ex. /noise_sensors
123
+ */
124
+ if (base_resource && !clients[pascalCase(base_resource)]) {
125
+ processClient(base_resource)
126
+ }
127
+
128
+ const client = clients[client_name]
129
+
130
+ if (!client) {
131
+ console.warn(`No client for "${client_name}", skipping`)
132
+ continue
133
+ }
134
+
135
+ const { parameter_schema, response_obj_type, response_arr_type } =
136
+ getParameterAndResponseSchema(route)
137
+
138
+ if (!parameter_schema) {
139
+ console.warn(`No parameter schema for "${route.path}", skipping`)
140
+ continue
141
+ }
142
+
143
+ const return_resource = response_obj_type ?? response_arr_type ?? ""
144
+
145
+ client.addMethod({
146
+ method_name: route.post["x-fern-sdk-method-name"],
147
+ path: route.path,
148
+ parameters: Object.entries(parameter_schema.properties)
149
+ .filter(
150
+ ([_, param_val]) =>
151
+ "type" in param_val ||
152
+ ("oneOf" in param_val && "type" in (param_val.oneOf[0] ?? {}))
153
+ )
154
+ .map(([param_name, param_val]: any) => ({
155
+ name: param_name,
156
+ type: getPhpType(param_val?.type ?? param_val.oneOf[0].type),
157
+ required: parameter_schema.required?.includes(param_name),
158
+ position:
159
+ route.post["x-fern-sdk-method-name"] === "get" &&
160
+ param_name === `${route.post["x-fern-sdk-return-value"]}_id`
161
+ ? 0
162
+ : undefined,
163
+ })),
164
+ return_path: route.post["x-fern-sdk-return-value"],
165
+ return_resource: pascalCase(return_resource),
166
+ is_array_response: Boolean(response_arr_type),
167
+ })
168
+ }
169
+
170
+ fs["src/SeamClient.php"] = generateSeamClient({
171
+ resource_clients: Object.values(clients),
172
+ resource_object_names: base_resource_object_names,
173
+ })
174
+
175
+ return fs
176
+ }
@@ -0,0 +1 @@
1
+ export * from "./generate-php-sdk.js"
@@ -0,0 +1,24 @@
1
+ export default () => `{
2
+ "name": "seamapi/seam",
3
+ "type": "library",
4
+ "require": {
5
+ "guzzlehttp/guzzle": "^7.5"
6
+ },
7
+ "autoload": {
8
+ "psr-4": {
9
+ "Seam\\\\": "src/",
10
+ "Tests\\\\": "tests/"
11
+ }
12
+ },
13
+ "authors": [
14
+ {
15
+ "name": "seveibar",
16
+ "email": "seveibar@gmail.com"
17
+ }
18
+ ],
19
+ "require-dev": {
20
+ "phpunit/phpunit": "^9.5",
21
+ "squizlabs/php_codesniffer": "^3.7"
22
+ }
23
+ }
24
+ `
@@ -0,0 +1,3 @@
1
+ export default () => `# API Key for a sandbox workspace
2
+ SEAM_API_KEY=
3
+ `
@@ -0,0 +1,5 @@
1
+ export default () => `vendor
2
+ node_modules
3
+ .env
4
+ .vscode
5
+ `
@@ -0,0 +1,11 @@
1
+ export default () => `{
2
+ "name": "sdk1",
3
+ "version": "1.0.0",
4
+ "main": "index.js",
5
+ "license": "MIT",
6
+ "devDependencies": {
7
+ "@prettier/plugin-php": "^0.19.0",
8
+ "prettier": "^2.7.1"
9
+ }
10
+ }
11
+ `
@@ -0,0 +1,85 @@
1
+ export default () => `# Seam PHP SDK
2
+
3
+ Control locks, lights and other internet of things devices with Seam's simple API.
4
+
5
+ Check out [the documentation](https://docs.seam.co) or the usage below.
6
+
7
+ ## Usage
8
+
9
+ \`\`\`php
10
+ $seam = new Seam\SeamClient("YOUR_API_KEY");
11
+
12
+ # Create a Connect Webview to login to a provider
13
+ $connect_webview = $seam->connect_webviews->create(
14
+ accepted_providers: ["august"]
15
+ );
16
+
17
+ print "Please Login at this url: " . $connect_webview->url;
18
+
19
+ # Poll until connect webview is completed
20
+ while (true) {
21
+ $connect_webview = $seam->connect_webviews->get(
22
+ $connect_webview->connect_webview_id
23
+ );
24
+ if ($connect_webview->status == "authorized") {
25
+ break;
26
+ } else {
27
+ sleep(1);
28
+ }
29
+ }
30
+
31
+ $connected_account = $seam->connected_accounts->get(
32
+ $connect_webview->connected_account_id
33
+ );
34
+
35
+ print "Looks like you connected with " .
36
+ json_encode($connected_account->user_identifier);
37
+
38
+ $devices = $seam->devices->list(
39
+ connected_account_id: $connected_account->connected_account_id
40
+ );
41
+
42
+ print "You have " . count($devices) . " devices";
43
+
44
+ $device_id = $devices[0]->device_id;
45
+
46
+ # Lock a Door
47
+ $seam->locks->lock_door($device_id);
48
+
49
+ $updated_device = $seam->devices->get($device_id);
50
+ $updated_device->properties->locked; // true
51
+
52
+ # Unlock a Door
53
+ $seam->locks->unlock_door($device_id);
54
+ $updated_device->properties->locked; // false
55
+
56
+ # Create an access code on a device
57
+ $access_code = $seam->access_codes->create(
58
+ device_id: $device_id,
59
+ code: "1234",
60
+ name: "Test Code"
61
+ );
62
+
63
+ # Check the status of an access code
64
+ $access_code->status; // 'setting' (it will go to 'set' when active on the device)
65
+
66
+ $seam->access_codes->delete($access_code->access_code_id);
67
+ \`\`\`
68
+
69
+ ## Installation
70
+
71
+ Run \`composer require seamapi/seam\`
72
+
73
+ ## Development Setup
74
+
75
+ 1. Run \`yarn install\` to get prettier installed for formatting
76
+ 2. Install [composer](https://getcomposer.org/).
77
+ 3. Run \`composer install\` in this directory
78
+ 4. Run \`composer exec phpunit tests\`
79
+
80
+ > To run a specific test file, do \`composer exec phpunit tests/MyTest.php\`
81
+
82
+ ### Running Tests
83
+
84
+ You'll need to export \`SEAM_API_KEY\` to a sandbox workspace API key.
85
+ `
@@ -0,0 +1,29 @@
1
+ export default () => `<?php
2
+
3
+ declare(strict_types=1);
4
+
5
+ use PHPUnit\\Framework\\TestCase;
6
+ use Tests\\Fixture;
7
+
8
+ final class SmokeTest extends TestCase
9
+ {
10
+ public function testGetDevices(): void
11
+ {
12
+ $seam = Fixture::getTestSeamClient();
13
+
14
+ $devices_response = $seam->devices->list();
15
+ $this->assertIsString($devices_response[0]->device_id);
16
+ }
17
+ public function testCreateAccessCode(): void
18
+ {
19
+ $seam = Fixture::getTestSeamClient();
20
+
21
+ $access_code = $seam->access_codes->create(
22
+ device_id:"august_device_1", code:"1234"
23
+ );
24
+
25
+ $this->assertTrue($access_code->status === "setting");
26
+ $this->assertTrue($access_code->code === "1234");
27
+ }
28
+ }
29
+ `
@@ -0,0 +1,20 @@
1
+ export default () => `<?php
2
+
3
+ namespace Tests;
4
+
5
+ use Seam\\SeamClient;
6
+
7
+ final class Fixture
8
+ {
9
+ public static function getTestSeamClient()
10
+ {
11
+ $random_string = substr(str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 0, 10);
12
+ $api_url = "https://{$random_string}.fakeseamconnect.seam.vc";
13
+ $api_key = "seam_apikey1_token";
14
+
15
+ $seam = new SeamClient($api_key, $api_url);
16
+
17
+ return $seam;
18
+ }
19
+ }
20
+ `
@@ -0,0 +1,160 @@
1
+ import type { OpenAPISchema, PropertySchema } from "lib/types.js"
2
+ import { deepFlattenOneOfAndAllOfSchema } from "./deep-flatten-one-of-and-all-of-schema.js"
3
+ import { pascalCase } from "change-case"
4
+
5
+ type DeepExtractResourceObjectSchemasParams = {
6
+ schema_name: string
7
+ schema_body: OpenAPISchema["components"]["schemas"][string]
8
+ }
9
+
10
+ type ExtractedResourceObjectSchema = {
11
+ name: string
12
+ properties: Record<string, PropertySchemaWithReferenceObject>
13
+ required_property_names: string[]
14
+ }
15
+
16
+ type CreateResourceSchemaParams = {
17
+ name: string
18
+ properties: ResourceSchemaProperties
19
+ required_property_names?: string[]
20
+ }
21
+ type ResourceSchemaProperties = Record<
22
+ string,
23
+ PropertySchemaWithReferenceObject
24
+ >
25
+
26
+ export type PropertySchemaWithReferenceObject =
27
+ | PropertySchema
28
+ | {
29
+ type: "object" | "array"
30
+ reference_object_type_name?: string
31
+ }
32
+
33
+ export function deepExtractResourceObjectSchemas({
34
+ schema_name,
35
+ schema_body,
36
+ }: DeepExtractResourceObjectSchemasParams) {
37
+ const extracted_resource_objects_schemas: Record<
38
+ string,
39
+ ExtractedResourceObjectSchema
40
+ > = {}
41
+
42
+ function createResourceSchema({
43
+ name,
44
+ properties,
45
+ required_property_names = [],
46
+ }: CreateResourceSchemaParams) {
47
+ if (!extracted_resource_objects_schemas[name]) {
48
+ extracted_resource_objects_schemas[name] = {
49
+ name: pascalCase(name),
50
+ properties: processPropertySchemas(properties),
51
+ required_property_names: required_property_names,
52
+ }
53
+ }
54
+ }
55
+
56
+ function processPropertySchemas(
57
+ property_schemas: ResourceSchemaProperties
58
+ ): Record<string, PropertySchemaWithReferenceObject> {
59
+ const property_schemas_with_type_references: Record<
60
+ string,
61
+ PropertySchemaWithReferenceObject
62
+ > = {}
63
+
64
+ for (const property_name in property_schemas) {
65
+ const property_schema = property_schemas[property_name] as PropertySchema
66
+ const reference_object_type_name = pascalCase(
67
+ `${schema_name}_${property_name}`
68
+ )
69
+ if ("$ref" in property_schema) {
70
+ console.error("$ref not currently supported when extracting schemas")
71
+ continue
72
+ }
73
+
74
+ const is_all_of_or_one_of_schema =
75
+ "allOf" in property_schema || "oneOf" in property_schema
76
+ const is_object_schema =
77
+ !is_all_of_or_one_of_schema &&
78
+ property_schema.type === "object" &&
79
+ "properties" in property_schema
80
+ const is_array_non_primitive_schema =
81
+ !is_all_of_or_one_of_schema &&
82
+ property_schema.type === "array" &&
83
+ "items" in property_schema &&
84
+ "properties" in property_schema.items
85
+
86
+ if (is_object_schema) {
87
+ property_schemas_with_type_references[property_name] = {
88
+ type: "object",
89
+ reference_object_type_name,
90
+ }
91
+
92
+ createResourceSchema({
93
+ name: reference_object_type_name,
94
+ properties: property_schema.properties,
95
+ required_property_names: property_schema?.required,
96
+ })
97
+ } else if (is_array_non_primitive_schema) {
98
+ property_schemas_with_type_references[property_name] = {
99
+ type: "array",
100
+ reference_object_type_name,
101
+ }
102
+
103
+ createResourceSchema({
104
+ name: reference_object_type_name,
105
+ properties: (property_schema.items as any).properties,
106
+ required_property_names: (property_schema.items as any)?.required,
107
+ })
108
+ } else if (is_all_of_or_one_of_schema) {
109
+ const flattened_schema = deepFlattenOneOfAndAllOfSchema(property_schema)
110
+
111
+ if ("properties" in flattened_schema) {
112
+ property_schemas_with_type_references[property_name] = {
113
+ type: flattened_schema.type,
114
+ reference_object_type_name,
115
+ }
116
+
117
+ createResourceSchema({
118
+ name: reference_object_type_name,
119
+ properties: flattened_schema.properties,
120
+ required_property_names: flattened_schema?.required,
121
+ })
122
+ } else {
123
+ property_schemas_with_type_references[property_name] =
124
+ flattened_schema
125
+ }
126
+ continue
127
+ } else {
128
+ property_schemas_with_type_references[property_name] = {
129
+ type: property_schema.type as any,
130
+ }
131
+ }
132
+ }
133
+
134
+ return property_schemas_with_type_references
135
+ }
136
+
137
+ let base_resource_properties
138
+
139
+ if ("allOf" in schema_body || "oneOf" in schema_body) {
140
+ const flattened_base_resource_schema =
141
+ deepFlattenOneOfAndAllOfSchema(schema_body)
142
+
143
+ base_resource_properties =
144
+ "properties" in flattened_base_resource_schema
145
+ ? flattened_base_resource_schema.properties
146
+ : {}
147
+ }
148
+
149
+ base_resource_properties ??=
150
+ "properties" in schema_body ? schema_body.properties : {}
151
+
152
+ createResourceSchema({
153
+ name: pascalCase(schema_name),
154
+ properties: base_resource_properties as ResourceSchemaProperties,
155
+ required_property_names:
156
+ "required" in schema_body ? schema_body.required : [],
157
+ })
158
+
159
+ return extracted_resource_objects_schemas
160
+ }