@seamapi/nextlove-sdk-generator 1.4.1 → 1.5.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 (41) hide show
  1. package/index.d.ts +1 -0
  2. package/index.js +1 -0
  3. package/index.js.map +1 -1
  4. package/lib/generate-php-sdk/utils/deep-extract-resource-object-schemas.js +10 -0
  5. package/lib/generate-php-sdk/utils/deep-extract-resource-object-schemas.js.map +1 -1
  6. package/lib/generate-php-sdk/utils/generate-resource-object-class.js +9 -7
  7. package/lib/generate-php-sdk/utils/generate-resource-object-class.js.map +1 -1
  8. package/lib/generate-swift-sdk/generate-swift-sdk.d.ts +1 -0
  9. package/lib/generate-swift-sdk/generate-swift-sdk.js +107 -0
  10. package/lib/generate-swift-sdk/generate-swift-sdk.js.map +1 -0
  11. package/lib/generate-swift-sdk/map-swift-type.d.ts +2 -0
  12. package/lib/generate-swift-sdk/map-swift-type.js +21 -0
  13. package/lib/generate-swift-sdk/map-swift-type.js.map +1 -0
  14. package/lib/generate-swift-sdk/route-group-class-file.d.ts +20 -0
  15. package/lib/generate-swift-sdk/route-group-class-file.js +68 -0
  16. package/lib/generate-swift-sdk/route-group-class-file.js.map +1 -0
  17. package/lib/generate-swift-sdk/templates/anyjson.swift.template.d.ts +2 -0
  18. package/lib/generate-swift-sdk/templates/anyjson.swift.template.js +168 -0
  19. package/lib/generate-swift-sdk/templates/anyjson.swift.template.js.map +1 -0
  20. package/lib/generate-swift-sdk/templates/package.swift.template.d.ts +2 -0
  21. package/lib/generate-swift-sdk/templates/package.swift.template.js +28 -0
  22. package/lib/generate-swift-sdk/templates/package.swift.template.js.map +1 -0
  23. package/lib/generate-swift-sdk/templates/readme.md.template.d.ts +2 -0
  24. package/lib/generate-swift-sdk/templates/readme.md.template.js +48 -0
  25. package/lib/generate-swift-sdk/templates/readme.md.template.js.map +1 -0
  26. package/lib/generate-swift-sdk/templates/seamclient.swift.template.d.ts +5 -0
  27. package/lib/generate-swift-sdk/templates/seamclient.swift.template.js +73 -0
  28. package/lib/generate-swift-sdk/templates/seamclient.swift.template.js.map +1 -0
  29. package/lib/types.d.ts +5 -0
  30. package/package.json +3 -1
  31. package/src/index.ts +1 -0
  32. package/src/lib/generate-php-sdk/utils/deep-extract-resource-object-schemas.ts +10 -0
  33. package/src/lib/generate-php-sdk/utils/generate-resource-object-class.ts +14 -7
  34. package/src/lib/generate-swift-sdk/generate-swift-sdk.ts +135 -0
  35. package/src/lib/generate-swift-sdk/map-swift-type.ts +27 -0
  36. package/src/lib/generate-swift-sdk/route-group-class-file.ts +89 -0
  37. package/src/lib/generate-swift-sdk/templates/anyjson.swift.template.ts +167 -0
  38. package/src/lib/generate-swift-sdk/templates/package.swift.template.ts +27 -0
  39. package/src/lib/generate-swift-sdk/templates/readme.md.template.ts +47 -0
  40. package/src/lib/generate-swift-sdk/templates/seamclient.swift.template.ts +87 -0
  41. package/src/lib/types.ts +9 -4
@@ -0,0 +1,47 @@
1
+ export default () => `# Seam API Swift SDK
2
+
3
+ Official interface to the [Seam Connect API].
4
+
5
+ [Seam Connect API]: https://docs.seam.co/
6
+
7
+ ## Description
8
+
9
+ This SDK provides convenient access to the [Seam Connect API] for Swift applications.
10
+
11
+ [Seam API endpoints]: https://docs.seam.co/latest/api-endpoints/overview
12
+
13
+ ## Installation
14
+
15
+ ### Swift Package Manager
16
+
17
+ Add the following dependency to your \`Package.swift\` file:
18
+
19
+ \`\`\`swift
20
+ dependencies: [
21
+ .package(url: "https://github.com/seamapi/swift", .upToNextMajor(from: "0.0.1"))
22
+ ]
23
+ \`\`\`
24
+
25
+
26
+ ## Usage
27
+
28
+ _Refer to the [Seam Connect API documentation][Seam Connect API]._
29
+
30
+ ### Requirements
31
+
32
+ - An API Key generated via the [Seam Dashboard].
33
+
34
+ [Seam Dashboard]: https://dashboard.getseam.com
35
+
36
+ ### Example
37
+
38
+ \`\`\`swift
39
+ import SeamAPI
40
+
41
+ let seam = SeamClient(apiKey: "YOUR_API_KEY")
42
+
43
+ // List devices
44
+ let devices = try await seam.devices.list()
45
+ print(devices)
46
+ \`\`\`
47
+ `
@@ -0,0 +1,87 @@
1
+ import { camelCase } from "change-case"
2
+
3
+ type SeamClientTemplateOptions = {
4
+ namespaceToRouteGroupClassName: Map<string, string>
5
+ }
6
+
7
+ export default ({
8
+ namespaceToRouteGroupClassName,
9
+ }: SeamClientTemplateOptions) => `import Foundation
10
+ #if canImport(FoundationNetworking)
11
+ import FoundationNetworking
12
+ #endif
13
+
14
+ enum SeamClientError: Error {
15
+ case couldNotMakeRequest(request: URLRequest, error: Error)
16
+ case non2xxResponseData(response: URLResponse, errorType: String?, errorMessage: String?, requestID: String?)
17
+ case responseJSONDecodingError(error: DecodingError)
18
+ case unknown(error: Error)
19
+ }
20
+
21
+ class SeamClient {
22
+ var apiKey: String
23
+ var baseURL: URL
24
+ let decoder = JSONDecoder()
25
+ let urlSession = URLSession.init(configuration: .default)
26
+
27
+ ${Array.from(namespaceToRouteGroupClassName.entries())
28
+ .map(
29
+ ([namespace, route_group_class_name]) =>
30
+ `var ${camelCase(namespace)}: ${route_group_class_name}! = nil`
31
+ )
32
+ .join("\n ")}
33
+
34
+ init(apiKey: String, baseURL: URL = URL(string: "https://connect.getseam.com")!) {
35
+ self.apiKey = apiKey
36
+ self.baseURL = baseURL
37
+
38
+ ${Array.from(namespaceToRouteGroupClassName.entries())
39
+ .map(
40
+ ([namespace, route_group_class_name]) =>
41
+ `self.${camelCase(
42
+ namespace
43
+ )} = ${route_group_class_name}(client: self)`
44
+ )
45
+ .join("\n ")}
46
+ }
47
+
48
+ func request<ResponseSchema: Decodable>(method: String, path: String, responseSchema: ResponseSchema.Type, jsonBody: Data? = nil) async -> Result<ResponseSchema, SeamClientError> {
49
+ let url = self.baseURL.appendingPathComponent(path)
50
+ var request = URLRequest(url: url)
51
+ request.httpMethod = method
52
+ request.setValue("application/json", forHTTPHeaderField: "Content-Type")
53
+ request.setValue("Bearer \\(apiKey)", forHTTPHeaderField: "Authorization")
54
+
55
+ if let jsonBody = jsonBody {
56
+ request.httpBody = jsonBody
57
+ }
58
+
59
+ let requestResult: (Data, URLResponse)
60
+ do {
61
+ requestResult = try await self.urlSession.data(for: request)
62
+ } catch let error {
63
+ return .failure(.couldNotMakeRequest(request: request, error: error))
64
+ }
65
+ let (data, response) = requestResult
66
+
67
+ guard let httpResponse = response as? HTTPURLResponse,
68
+ (200...299).contains(httpResponse.statusCode) else {
69
+ // todo: better error
70
+ return .failure(.non2xxResponseData(
71
+ response: response,
72
+ errorType: nil,
73
+ errorMessage: nil,
74
+ requestID: nil
75
+ ))
76
+ }
77
+
78
+ do {
79
+ let decoded = try decoder.decode(ResponseSchema.self, from: data)
80
+ return .success(decoded)
81
+ } catch let error as DecodingError {
82
+ return .failure(.responseJSONDecodingError(error: error))
83
+ } catch let error {
84
+ return .failure(.unknown(error: error))
85
+ }
86
+ }
87
+ }`
package/src/lib/types.ts CHANGED
@@ -43,16 +43,21 @@ export type PrimitiveSchema =
43
43
  format?: "uuid" | "date-time" | "uri"
44
44
  nullable?: boolean
45
45
  }
46
- | { type: "boolean"; enum?: boolean[] }
47
- | { type: "integer"; enum?: number[] }
48
- | { type: "number" }
46
+ | { type: "boolean"; enum?: boolean[]; nullable?: boolean }
47
+ | { type: "integer"; enum?: number[]; nullable?: boolean }
48
+ | { type: "number"; nullable?: boolean }
49
49
 
50
- export type ArraySchema = { type: "array"; items: PropertySchema }
50
+ export type ArraySchema = {
51
+ type: "array"
52
+ items: PropertySchema
53
+ nullable?: boolean
54
+ }
51
55
 
52
56
  export type ObjSchema = {
53
57
  type: "object"
54
58
  properties: Record<string, PropertySchema>
55
59
  required: string[]
60
+ nullable?: boolean
56
61
  }
57
62
 
58
63
  export type RefSchema = {