@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
package/index.d.ts CHANGED
@@ -4,3 +4,4 @@ export * from "./lib/generate-csharp-sdk/generate-csharp-sdk.js";
4
4
  export * from "./lib/generate-python-sdk/index.js";
5
5
  export * from "./lib/generate-ruby-sdk/index.js";
6
6
  export * from "./lib/generate-php-sdk/index.js";
7
+ export * from "./lib/generate-swift-sdk/generate-swift-sdk.js";
package/index.js CHANGED
@@ -4,4 +4,5 @@ export * from "./lib/generate-csharp-sdk/generate-csharp-sdk.js";
4
4
  export * from "./lib/generate-python-sdk/index.js";
5
5
  export * from "./lib/generate-ruby-sdk/index.js";
6
6
  export * from "./lib/generate-php-sdk/index.js";
7
+ export * from "./lib/generate-swift-sdk/generate-swift-sdk.js";
7
8
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kDAAkD,CAAA;AAChE,cAAc,oCAAoC,CAAA;AAClD,cAAc,kCAAkC,CAAA;AAChD,cAAc,iCAAiC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kDAAkD,CAAA;AAChE,cAAc,oCAAoC,CAAA;AAClD,cAAc,kCAAkC,CAAA;AAChD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,gDAAgD,CAAA"}
@@ -28,10 +28,14 @@ export function deepExtractResourceObjectSchemas({ schema_name, schema_body, })
28
28
  property_schema.type === "array" &&
29
29
  "items" in property_schema &&
30
30
  "properties" in property_schema.items;
31
+ const is_nullable_set = "nullable" in property_schema;
31
32
  if (is_object_schema) {
32
33
  property_schemas_with_type_references[property_name] = {
33
34
  type: "object",
34
35
  reference_object_type_name,
36
+ ...(is_nullable_set && {
37
+ nullable: property_schema.nullable,
38
+ }),
35
39
  };
36
40
  createResourceSchema({
37
41
  name: reference_object_type_name,
@@ -43,6 +47,9 @@ export function deepExtractResourceObjectSchemas({ schema_name, schema_body, })
43
47
  property_schemas_with_type_references[property_name] = {
44
48
  type: "array",
45
49
  reference_object_type_name,
50
+ ...(is_nullable_set && {
51
+ nullable: property_schema.nullable,
52
+ }),
46
53
  };
47
54
  createResourceSchema({
48
55
  name: reference_object_type_name,
@@ -72,6 +79,9 @@ export function deepExtractResourceObjectSchemas({ schema_name, schema_body, })
72
79
  else {
73
80
  property_schemas_with_type_references[property_name] = {
74
81
  type: property_schema.type,
82
+ ...(is_nullable_set && {
83
+ nullable: property_schema.nullable,
84
+ }),
75
85
  };
76
86
  }
77
87
  }
@@ -1 +1 @@
1
- {"version":3,"file":"deep-extract-resource-object-schemas.js","sourceRoot":"","sources":["../../../src/lib/generate-php-sdk/utils/deep-extract-resource-object-schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deep-extract-resource-object-schemas.js","sourceRoot":"","sources":["../../../src/lib/generate-php-sdk/utils/deep-extract-resource-object-schemas.ts"],"names":[],"mappings":"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"}
@@ -7,8 +7,11 @@ export const generateResourceObjectClass = ({ resource_name, resource_properties
7
7
  const is_array_referencing_resource = "type" in prop_schema &&
8
8
  prop_schema.type === "array" &&
9
9
  "reference_object_type_name" in prop_schema;
10
+ const is_property_required = "nullable" in prop_schema
11
+ ? !prop_schema.nullable
12
+ : required_property_names.includes(prop_name);
10
13
  if (is_object_referencing_resource) {
11
- return `${prop_name}: ${prop_schema.reference_object_type_name}::from_json($json->${prop_name})${required_property_names.includes(prop_name) ? "," : " ?? null,"}`;
14
+ return `${prop_name}: ${is_property_required ? "" : `isset($json->${prop_name}) ? `}${prop_schema.reference_object_type_name}::from_json($json->${prop_name})${is_property_required ? "," : " : null,"}`;
12
15
  }
13
16
  else if (is_array_referencing_resource) {
14
17
  return `${prop_name}: array_map(
@@ -17,7 +20,7 @@ export const generateResourceObjectClass = ({ resource_name, resource_properties
17
20
  ),`;
18
21
  }
19
22
  else {
20
- return `${prop_name}: $json->${prop_name}${required_property_names.includes(prop_name) ? "," : " ?? null,"}`;
23
+ return `${prop_name}: $json->${prop_name}${is_property_required ? "," : " ?? null,"}`;
21
24
  }
22
25
  };
23
26
  const generateFromJsonMethod = () => {
@@ -46,11 +49,10 @@ export const generateResourceObjectClass = ({ resource_name, resource_properties
46
49
  const php_type = is_object_referencing_resource
47
50
  ? prop_schema.reference_object_type_name
48
51
  : getPhpType("type" in prop_schema ? prop_schema.type : "mixed");
49
- return `public ${php_type}${php_type === "mixed"
50
- ? ""
51
- : required_property_names.includes(prop_name)
52
- ? ""
53
- : " | null"} $${prop_name},`;
52
+ const is_property_required = "nullable" in prop_schema
53
+ ? !prop_schema.nullable
54
+ : required_property_names.includes(prop_name);
55
+ return `public ${php_type}${php_type === "mixed" ? "" : is_property_required ? "" : " | null"} $${prop_name},`;
54
56
  })
55
57
  .join("\n ")}
56
58
  ) {
@@ -1 +1 @@
1
- {"version":3,"file":"generate-resource-object-class.js","sourceRoot":"","sources":["../../../src/lib/generate-php-sdk/utils/generate-resource-object-class.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAQ9C,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,EAC1C,aAAa,EACb,mBAAmB,EACnB,uBAAuB,GAChB,EAAE,EAAE;IACX,MAAM,sBAAsB,GAAG,CAC7B,SAAiB,EACjB,WAA8C,EAC9C,EAAE;QACF,MAAM,8BAA8B,GAClC,MAAM,IAAI,WAAW;YACrB,WAAW,CAAC,IAAI,KAAK,QAAQ;YAC7B,4BAA4B,IAAI,WAAW,CAAA;QAE7C,MAAM,6BAA6B,GACjC,MAAM,IAAI,WAAW;YACrB,WAAW,CAAC,IAAI,KAAK,OAAO;YAC5B,4BAA4B,IAAI,WAAW,CAAA;QAE7C,IAAI,8BAA8B,EAAE;YAClC,OAAO,GAAG,SAAS,KACjB,WAAW,CAAC,0BACd,sBAAsB,SAAS,IAC7B,uBAAuB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WACtD,EAAE,CAAA;SACH;aAAM,IAAI,6BAA6B,EAAE;YACxC,OAAO,GAAG,SAAS;iBACR,SAAS,CAAC,CAAC,CAAC,QAAQ,WAAW,CAAC,0BAA0B,gBAAgB,SAAS,CAAC,CAAC,CAAC;mBACpF,SAAS;WACjB,CAAA;SACN;aAAM;YACL,OAAO,GAAG,SAAS,YAAY,SAAS,GACtC,uBAAuB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WACtD,EAAE,CAAA;SACH;IACH,CAAC,CAAA;IAED,MAAM,sBAAsB,GAAG,GAAG,EAAE;QAClC,OAAO;qDAC0C,aAAa;;;;;;cAMpD,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC;aAClC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,CAC3B,sBAAsB,CAAC,IAAI,EAAE,WAAW,CAAC,CAC1C;aACA,IAAI,CAAC,gBAAgB,CAAC;;;GAGlC,CAAA;IACD,CAAC,CAAA;IAED,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC/B,OAAO;;UAED,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC;aAClC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE;YAChC,MAAM,8BAA8B,GAClC,MAAM,IAAI,WAAW;gBACrB,WAAW,CAAC,IAAI,KAAK,QAAQ;gBAC7B,4BAA4B,IAAI,WAAW,CAAA;YAC7C,MAAM,QAAQ,GAAG,8BAA8B;gBAC7C,CAAC,CAAC,WAAW,CAAC,0BAA0B;gBACxC,CAAC,CAAC,UAAU,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;YAElE,OAAO,UAAU,QAAQ,GACvB,QAAQ,KAAK,OAAO;gBAClB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,uBAAuB,CAAC,QAAQ,CAAC,SAAS,CAAC;oBAC7C,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,SACN,KAAK,SAAS,GAAG,CAAA;QACnB,CAAC,CAAC;aACD,IAAI,CAAC,YAAY,CAAC;;;GAG1B,CAAA;IACD,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG;;;;QAIX,aAAa;;MAEf,sBAAsB,EAAE;;MAExB,mBAAmB,EAAE;;CAE1B,CAAA;IAEC,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
1
+ {"version":3,"file":"generate-resource-object-class.js","sourceRoot":"","sources":["../../../src/lib/generate-php-sdk/utils/generate-resource-object-class.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const generateSwiftSDK: () => Promise<Record<string, string>>;
@@ -0,0 +1,107 @@
1
+ import axios from "axios";
2
+ import readmeMdTemplate from "./templates/readme.md.template.js";
3
+ import packageSwiftTemplate from "./templates/package.swift.template.js";
4
+ import seamClientSwiftTemplate from "./templates/seamclient.swift.template.js";
5
+ import anyJsonSwiftTemplate from "./templates/anyjson.swift.template.js";
6
+ import { pascalCase } from "change-case";
7
+ import { flattenObjSchema, getParameterAndResponseSchema } from "../../lib/index.js";
8
+ import { mapSwiftType } from "./map-swift-type.js";
9
+ import { RouteGroupClassfile } from "./route-group-class-file.js";
10
+ export const generateSwiftSDK = async () => {
11
+ const openapi = await axios
12
+ .get("https://connect.getseam.com/openapi.json")
13
+ .then((res) => res.data);
14
+ const fs = {};
15
+ fs["README.md"] = readmeMdTemplate();
16
+ fs["Package.swift"] = packageSwiftTemplate();
17
+ const resources = Object.entries(openapi.components.schemas).map(([schema_name, schema]) => [schema_name, flattenObjSchema(schema)]);
18
+ fs["Sources/SeamAPI/AnyJSON.swift"] = anyJsonSwiftTemplate();
19
+ // Create a struct for each declared resource
20
+ fs["Sources/SeamAPI/Schemas.swift"] = [
21
+ "import Foundation",
22
+ ...resources
23
+ .map(([snake_name, schema]) => {
24
+ const props = Object.entries(schema.properties)
25
+ .map(([name, property_schema]) => {
26
+ const is_optional = !schema.required?.includes(name) ||
27
+ property_schema.nullable;
28
+ return `let ${name}: ${mapSwiftType(property_schema, "AnyJSON")}${is_optional ? "?" : ""}`;
29
+ })
30
+ .join("\n");
31
+ return `struct ${pascalCase(snake_name)}: Decodable {\n${props}\n}`;
32
+ })
33
+ .filter((x) => x),
34
+ ].join("\n");
35
+ // Construct route groups by namespace
36
+ const namespaceToRouteGroupClassName = new Map();
37
+ const routes = Object.entries(openapi.paths).map(([path, v]) => ({
38
+ path,
39
+ ...v,
40
+ }));
41
+ const class_map = {};
42
+ const namespaces = [];
43
+ for (const route of routes) {
44
+ if (!route.post)
45
+ continue;
46
+ if (!route.post["x-fern-sdk-group-name"])
47
+ continue;
48
+ const group_names = [...route.post["x-fern-sdk-group-name"]];
49
+ const namespace = group_names.join("_");
50
+ group_names.reverse();
51
+ const class_name = pascalCase(group_names.join("_")) + "Routes";
52
+ if (!class_map[class_name]) {
53
+ namespaces.push(route.post["x-fern-sdk-group-name"]);
54
+ class_map[class_name] = new RouteGroupClassfile(class_name, namespace);
55
+ namespaceToRouteGroupClassName.set(namespace, class_name);
56
+ }
57
+ const cls = class_map[class_name];
58
+ if (!cls) {
59
+ console.warn(`No class for "${route.path}", skipping`);
60
+ continue;
61
+ }
62
+ const { parameter_schema, response_obj_type, response_arr_type } = getParameterAndResponseSchema(route);
63
+ if (!response_obj_type && !response_arr_type) {
64
+ console.warn(`No response object/array ref for "${route.path}", skipping`);
65
+ continue;
66
+ }
67
+ if (!parameter_schema) {
68
+ console.warn(`No parameter schema for "${route.path}", skipping`);
69
+ continue;
70
+ }
71
+ cls.addMethod({
72
+ method_name: route.post["x-fern-sdk-method-name"],
73
+ path: route.path,
74
+ bodyParameters: Object.entries(parameter_schema.properties)
75
+ .filter(([_, param_val]) => param_val && typeof param_val === "object" && "type" in param_val)
76
+ .map(([param_name, param_schema]) => {
77
+ const name = param_name;
78
+ return {
79
+ name,
80
+ swiftType: mapSwiftType(param_schema),
81
+ isRequired: parameter_schema.required?.includes(name) ?? false,
82
+ };
83
+ }),
84
+ return_path: [route.post["x-fern-sdk-return-value"]],
85
+ return_resource: response_obj_type
86
+ ? pascalCase(response_obj_type)
87
+ : `[${pascalCase(response_arr_type)}]`,
88
+ });
89
+ }
90
+ const route_groups = Object.values(class_map).filter((r) => !r.isEmpty);
91
+ // Write all route groups
92
+ for (const route_group of route_groups) {
93
+ fs[`Sources/SeamAPI/Routes/${pascalCase(route_group.namespace)}.swift`] =
94
+ route_group.serializeToClass();
95
+ }
96
+ // Remove route groups that were filtered out because they were empty
97
+ for (const namespace of namespaceToRouteGroupClassName.keys()) {
98
+ if (!route_groups.find((r) => r.namespace === namespace)) {
99
+ namespaceToRouteGroupClassName.delete(namespace);
100
+ }
101
+ }
102
+ fs["Sources/SeamAPI/SeamClient.swift"] = seamClientSwiftTemplate({
103
+ namespaceToRouteGroupClassName,
104
+ });
105
+ return fs;
106
+ };
107
+ //# sourceMappingURL=generate-swift-sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-swift-sdk.js","sourceRoot":"","sources":["../../src/lib/generate-swift-sdk/generate-swift-sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { PropertySchema } from "lib/types.ts";
2
+ export declare const mapSwiftType: (property_schema: PropertySchema, fallback?: string) => string;
@@ -0,0 +1,21 @@
1
+ export const mapSwiftType = (property_schema, fallback = "String") => {
2
+ if (typeof property_schema !== "object") {
3
+ return "Any";
4
+ }
5
+ if ("type" in property_schema && property_schema.type === "string") {
6
+ // todo: handle date-time
7
+ return "String";
8
+ }
9
+ if ("type" in property_schema && property_schema.type === "integer")
10
+ return "Int";
11
+ if ("type" in property_schema && property_schema.type === "boolean")
12
+ return "Bool";
13
+ if ("type" in property_schema && property_schema.type === "number")
14
+ return "Float";
15
+ if ("type" in property_schema && property_schema.type === "array")
16
+ return "[String]"; // TODO, make more specific
17
+ if ("type" in property_schema && property_schema.type === "object")
18
+ return `[String: ${fallback}]`; // TODO, make more specific
19
+ return fallback;
20
+ };
21
+ //# sourceMappingURL=map-swift-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-swift-type.js","sourceRoot":"","sources":["../../src/lib/generate-swift-sdk/map-swift-type.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,eAA+B,EAC/B,QAAQ,GAAG,QAAQ,EACnB,EAAE;IACF,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE;QACvC,OAAO,KAAK,CAAA;KACb;IAED,IAAI,MAAM,IAAI,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,QAAQ,EAAE;QAClE,yBAAyB;QACzB,OAAO,QAAQ,CAAA;KAChB;IACD,IAAI,MAAM,IAAI,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,SAAS;QACjE,OAAO,KAAK,CAAA;IACd,IAAI,MAAM,IAAI,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,SAAS;QACjE,OAAO,MAAM,CAAA;IACf,IAAI,MAAM,IAAI,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,QAAQ;QAChE,OAAO,OAAO,CAAA;IAChB,IAAI,MAAM,IAAI,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,OAAO;QAC/D,OAAO,UAAU,CAAA,CAAC,2BAA2B;IAC/C,IAAI,MAAM,IAAI,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,QAAQ;QAChE,OAAO,YAAY,QAAQ,GAAG,CAAA,CAAC,2BAA2B;IAE5D,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
@@ -0,0 +1,20 @@
1
+ export type RouteGroupClassfileMethod = {
2
+ method_name: string;
3
+ path: string;
4
+ bodyParameters: {
5
+ name: string;
6
+ swiftType: string;
7
+ isRequired: boolean;
8
+ }[];
9
+ return_path: string[];
10
+ return_resource: string;
11
+ };
12
+ export declare class RouteGroupClassfile {
13
+ private name;
14
+ namespace?: string | undefined;
15
+ private methods;
16
+ constructor(name: string, namespace?: string | undefined);
17
+ addMethod(method: RouteGroupClassfileMethod): void;
18
+ get isEmpty(): boolean;
19
+ serializeToClass(): string;
20
+ }
@@ -0,0 +1,68 @@
1
+ export class RouteGroupClassfile {
2
+ constructor(name, namespace) {
3
+ this.name = name;
4
+ this.namespace = namespace;
5
+ this.methods = [];
6
+ }
7
+ addMethod(method) {
8
+ this.methods.push(method);
9
+ }
10
+ get isEmpty() {
11
+ return this.methods.length === 0;
12
+ }
13
+ serializeToClass() {
14
+ return `import Foundation
15
+ #if canImport(FoundationNetworking)
16
+ import FoundationNetworking
17
+ #endif
18
+
19
+ class ${this.name} {
20
+ private let client: SeamClient
21
+ init(client: SeamClient) {
22
+ self.client = client
23
+ }
24
+
25
+ ${this.methods
26
+ .map(({ method_name, bodyParameters, path, return_path, return_resource }) => ` func ${method_name}(${bodyParameters
27
+ .map(({ name, swiftType, isRequired }) => isRequired ? `${name}: ${swiftType}` : `${name}: ${swiftType}? = nil`)
28
+ .join(", ")}) async -> Result<${return_resource}, SeamClientError> {
29
+ ${bodyParameters.length > 0 ? "var" : "let"} jsonBody: [String: Any] = [:]
30
+
31
+ ${bodyParameters
32
+ .map(({ name, isRequired }) => isRequired
33
+ ? `jsonBody["${name}"] = ${name}`
34
+ : ` if let ${name} = ${name} {
35
+ jsonBody["${name}"] = ${name}
36
+ }`)
37
+ .join("\n\n")}
38
+
39
+ let encodedJsonBody: Data?
40
+ do {
41
+ encodedJsonBody = try JSONSerialization.data(withJSONObject: jsonBody, options: [])
42
+ } catch let error {
43
+ return .failure(.unknown(error: error))
44
+ }
45
+
46
+ struct Response: Decodable {
47
+ let ${return_path[0]}: ${return_resource}
48
+ }
49
+
50
+ let response = await client.request(
51
+ method: "POST",
52
+ path: "${path}",
53
+ responseSchema: Response.self,
54
+ jsonBody: encodedJsonBody
55
+ )
56
+
57
+ switch response {
58
+ case .success(let response):
59
+ return .success(response.${return_path[0]})
60
+ case .failure(let error):
61
+ return .failure(error)
62
+ }
63
+ }`)
64
+ .join("\n\n")}
65
+ }`.trim();
66
+ }
67
+ }
68
+ //# sourceMappingURL=route-group-class-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-group-class-file.js","sourceRoot":"","sources":["../../src/lib/generate-swift-sdk/route-group-class-file.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,mBAAmB;IAE9B,YACU,IAAY,EACb,SAAkB;QADjB,SAAI,GAAJ,IAAI,CAAQ;QACb,cAAS,GAAT,SAAS,CAAS;QAHnB,YAAO,GAAgC,EAAE,CAAA;IAI9C,CAAC;IAEJ,SAAS,CAAC,MAAiC;QACzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAA;IAClC,CAAC;IAED,gBAAgB;QACd,OAAO;;;;;YAKC,IAAI,CAAC,IAAI;;;;;;EAMnB,IAAI,CAAC,OAAO;aACX,GAAG,CACF,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,EAAE,CACtE,UAAU,WAAW,IAAI,cAAc;aACpC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,EAAE,CACvC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,SAAS,SAAS,CACtE;aACA,IAAI,CAAC,IAAI,CAAC,qBAAqB,eAAe;MACjD,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;;EAE7C,cAAc;aACb,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAC5B,UAAU;YACR,CAAC,CAAC,aAAa,IAAI,QAAQ,IAAI,EAAE;YACjC,CAAC,CAAC,cAAc,IAAI,MAAM,IAAI;kBAClB,IAAI,QAAQ,IAAI;MAC5B,CACH;aACA,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;YAUH,WAAW,CAAC,CAAC,CAAC,KAAK,eAAe;;;;;eAK/B,IAAI;;;;;;;iCAOc,WAAW,CAAC,CAAC,CAAC;;;;IAI3C,CACD;aACA,IAAI,CAAC,MAAM,CAAC;EACb,CAAC,IAAI,EAAE,CAAA;IACP,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ declare const _default: () => string;
2
+ export default _default;
@@ -0,0 +1,168 @@
1
+ export default () => `// Thanks to https://adamrackis.dev/blog/swift-codable-any
2
+ import Foundation
3
+
4
+ func decode(fromObject container: KeyedDecodingContainer<AnyJSONCodingKeys>) -> [String: Any] {
5
+ var result: [String: Any] = [:]
6
+
7
+ for key in container.allKeys {
8
+ if let val = try? container.decode(Int.self, forKey: key) {
9
+ result[key.stringValue] = val
10
+ } else if let val = try? container.decode(Double.self, forKey: key) {
11
+ result[key.stringValue] = val
12
+ } else if let val = try? container.decode(String.self, forKey: key) {
13
+ result[key.stringValue] = val
14
+ } else if let val = try? container.decode(Bool.self, forKey: key) {
15
+ result[key.stringValue] = val
16
+ } else if let nestedContainer = try? container.nestedContainer(
17
+ keyedBy: AnyJSONCodingKeys.self, forKey: key)
18
+ {
19
+ result[key.stringValue] = decode(fromObject: nestedContainer)
20
+ } else if var nestedArray = try? container.nestedUnkeyedContainer(forKey: key) {
21
+ result[key.stringValue] = decode(fromArray: &nestedArray)
22
+ } else if (try? container.decodeNil(forKey: key)) == true {
23
+ result.updateValue(Any?(nil) as Any, forKey: key.stringValue)
24
+ }
25
+ }
26
+
27
+ return result
28
+ }
29
+
30
+ func decode(fromArray container: inout UnkeyedDecodingContainer) -> [Any] {
31
+ var result: [Any] = []
32
+
33
+ while !container.isAtEnd {
34
+ if let value = try? container.decode(String.self) {
35
+ result.append(value)
36
+ } else if let value = try? container.decode(Int.self) {
37
+ result.append(value)
38
+ } else if let value = try? container.decode(Double.self) {
39
+ result.append(value)
40
+ } else if let value = try? container.decode(Bool.self) {
41
+ result.append(value)
42
+ } else if let nestedContainer = try? container.nestedContainer(keyedBy: AnyJSONCodingKeys.self) {
43
+ result.append(decode(fromObject: nestedContainer))
44
+ } else if var nestedArray = try? container.nestedUnkeyedContainer() {
45
+ result.append(decode(fromArray: &nestedArray))
46
+ } else if (try? container.decodeNil()) == true {
47
+ result.append(Any?(nil) as Any)
48
+ }
49
+ }
50
+
51
+ return result
52
+ }
53
+
54
+ func encodeValue(
55
+ fromObjectContainer container: inout KeyedEncodingContainer<AnyJSONCodingKeys>, map: [String: Any]
56
+ ) throws {
57
+ for k in map.keys {
58
+ let value = map[k]
59
+ let encodingKey = AnyJSONCodingKeys(stringValue: k)
60
+
61
+ if let value = value as? String {
62
+ try container.encode(value, forKey: encodingKey)
63
+ } else if let value = value as? Int {
64
+ try container.encode(value, forKey: encodingKey)
65
+ } else if let value = value as? Double {
66
+ try container.encode(value, forKey: encodingKey)
67
+ } else if let value = value as? Bool {
68
+ try container.encode(value, forKey: encodingKey)
69
+ } else if let value = value as? [String: Any] {
70
+ var keyedContainer = container.nestedContainer(
71
+ keyedBy: AnyJSONCodingKeys.self, forKey: encodingKey)
72
+ try encodeValue(fromObjectContainer: &keyedContainer, map: value)
73
+ } else if let value = value as? [Any] {
74
+ var unkeyedContainer = container.nestedUnkeyedContainer(forKey: encodingKey)
75
+ try encodeValue(fromArrayContainer: &unkeyedContainer, arr: value)
76
+ } else {
77
+ try container.encodeNil(forKey: encodingKey)
78
+ }
79
+ }
80
+ }
81
+
82
+ func encodeValue(fromArrayContainer container: inout UnkeyedEncodingContainer, arr: [Any]) throws {
83
+ for value in arr {
84
+ if let value = value as? String {
85
+ try container.encode(value)
86
+ } else if let value = value as? Int {
87
+ try container.encode(value)
88
+ } else if let value = value as? Double {
89
+ try container.encode(value)
90
+ } else if let value = value as? Bool {
91
+ try container.encode(value)
92
+ } else if let value = value as? [String: Any] {
93
+ var keyedContainer = container.nestedContainer(keyedBy: AnyJSONCodingKeys.self)
94
+ try encodeValue(fromObjectContainer: &keyedContainer, map: value)
95
+ } else if let value = value as? [Any] {
96
+ var unkeyedContainer = container.nestedUnkeyedContainer()
97
+ try encodeValue(fromArrayContainer: &unkeyedContainer, arr: value)
98
+ } else {
99
+ try container.encodeNil()
100
+ }
101
+ }
102
+ }
103
+
104
+
105
+
106
+ struct AnyJSONCodingKeys: CodingKey {
107
+ var stringValue: String
108
+
109
+ init(stringValue: String) {
110
+ self.stringValue = stringValue
111
+ }
112
+
113
+ var intValue: Int?
114
+
115
+ init?(intValue: Int) {
116
+ self.init(stringValue: "\(intValue)")
117
+ self.intValue = intValue
118
+ }
119
+ }
120
+
121
+ struct AnyJSON: Codable {
122
+ var value: Any?
123
+
124
+ init(value: Any?) {
125
+ self.value = value
126
+ }
127
+ init(from decoder: Decoder) throws {
128
+ if let container = try? decoder.container(keyedBy: AnyJSONCodingKeys.self) {
129
+ self.value = decode(fromObject: container)
130
+ } else if var array = try? decoder.unkeyedContainer() {
131
+ self.value = decode(fromArray: &array)
132
+ } else if let value = try? decoder.singleValueContainer() {
133
+ if value.decodeNil() {
134
+ self.value = nil
135
+ } else {
136
+ if let result = try? value.decode(Int.self) { self.value = result }
137
+ if let result = try? value.decode(Double.self) { self.value = result }
138
+ if let result = try? value.decode(String.self) { self.value = result }
139
+ if let result = try? value.decode(Bool.self) { self.value = result }
140
+ }
141
+ }
142
+ }
143
+
144
+ func encode(to encoder: Encoder) throws {
145
+ if let map = self.value as? [String: Any] {
146
+ var container = encoder.container(keyedBy: AnyJSONCodingKeys.self)
147
+ try encodeValue(fromObjectContainer: &container, map: map)
148
+ } else if let arr = self.value as? [Any] {
149
+ var container = encoder.unkeyedContainer()
150
+ try encodeValue(fromArrayContainer: &container, arr: arr)
151
+ } else {
152
+ var container = encoder.singleValueContainer()
153
+
154
+ if let value = self.value as? String {
155
+ try! container.encode(value)
156
+ } else if let value = self.value as? Int {
157
+ try! container.encode(value)
158
+ } else if let value = self.value as? Double {
159
+ try! container.encode(value)
160
+ } else if let value = self.value as? Bool {
161
+ try! container.encode(value)
162
+ } else {
163
+ try! container.encodeNil()
164
+ }
165
+ }
166
+ }
167
+ }`;
168
+ //# sourceMappingURL=anyjson.swift.template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anyjson.swift.template.js","sourceRoot":"","sources":["../../../src/lib/generate-swift-sdk/templates/anyjson.swift.template.ts"],"names":[],"mappings":"AAAA,eAAe,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsKnB,CAAA"}
@@ -0,0 +1,2 @@
1
+ declare const _default: () => string;
2
+ export default _default;
@@ -0,0 +1,28 @@
1
+ export default () => `// swift-tools-version: 5.7
2
+ // The swift-tools-version declares the minimum version of Swift required to build this package.
3
+
4
+ import PackageDescription
5
+
6
+ let package = Package(
7
+ name: "SeamAPI",
8
+ platforms: [
9
+ .macOS(.v12)
10
+ ],
11
+ products: [
12
+ // Products define the executables and libraries a package produces, making them visible to other packages.
13
+ .library(
14
+ name: "SeamAPI",
15
+ targets: ["SeamAPI"]),
16
+ ],
17
+ targets: [
18
+ // Targets are the basic building blocks of a package, defining a module or a test suite.
19
+ // Targets can depend on other targets in this package and products from dependencies.
20
+ .target(
21
+ name: "SeamAPI"),
22
+ .testTarget(
23
+ name: "SeamAPITests",
24
+ dependencies: ["SeamAPI"]),
25
+ ]
26
+ )
27
+ `;
28
+ //# sourceMappingURL=package.swift.template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.swift.template.js","sourceRoot":"","sources":["../../../src/lib/generate-swift-sdk/templates/package.swift.template.ts"],"names":[],"mappings":"AAAA,eAAe,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BpB,CAAA"}
@@ -0,0 +1,2 @@
1
+ declare const _default: () => string;
2
+ export default _default;
@@ -0,0 +1,48 @@
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
+ `;
48
+ //# sourceMappingURL=readme.md.template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readme.md.template.js","sourceRoot":"","sources":["../../../src/lib/generate-swift-sdk/templates/readme.md.template.ts"],"names":[],"mappings":"AAAA,eAAe,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CpB,CAAA"}
@@ -0,0 +1,5 @@
1
+ type SeamClientTemplateOptions = {
2
+ namespaceToRouteGroupClassName: Map<string, string>;
3
+ };
4
+ declare const _default: ({ namespaceToRouteGroupClassName, }: SeamClientTemplateOptions) => string;
5
+ export default _default;