@seamapi/nextlove-sdk-generator 1.7.12 → 1.8.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.
- package/lib/generate-python-sdk/generate-python-sdk.d.ts +2 -1
- package/lib/generate-python-sdk/generate-python-sdk.js +3 -5
- package/lib/generate-python-sdk/generate-python-sdk.js.map +1 -1
- package/lib/openapi/resolve-openapi-spec.d.ts +4 -0
- package/lib/openapi/resolve-openapi-spec.js +40 -0
- package/lib/openapi/resolve-openapi-spec.js.map +1 -0
- package/lib/types.d.ts +4 -0
- package/package.json +2 -1
- package/src/lib/generate-python-sdk/generate-python-sdk.ts +4 -6
- package/src/lib/openapi/resolve-openapi-spec.ts +57 -0
- package/src/lib/types.ts +5 -0
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import type { SdkGeneratorOptions } from "../../lib/types.js";
|
|
2
|
+
export declare const generatePythonSDK: (options?: SdkGeneratorOptions) => Promise<any>;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import axios from "axios";
|
|
2
1
|
import { ClassFile } from "./class-file.js";
|
|
3
2
|
import { pascalCase } from "change-case";
|
|
4
3
|
import { flattenObjSchema } from "../../lib/openapi/index.js";
|
|
@@ -20,10 +19,9 @@ import { getParameterAndResponseSchema } from "../../lib/openapi/get-parameter-a
|
|
|
20
19
|
import mapParentToChildResources from "../../lib/openapi/map-parent-to-children-resource.js";
|
|
21
20
|
import { deepFlattenOneOfAndAllOfSchema } from "../../lib/generate-php-sdk/utils/deep-flatten-one-of-and-all-of-schema.js";
|
|
22
21
|
import { endpoints_returning_deprecated_action_attempt, ignored_endpoint_paths, } from "../../lib/endpoint-rules.js";
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
.then((res) => res.data);
|
|
22
|
+
import resolveOpenapiSpec from "../../lib/openapi/resolve-openapi-spec.js";
|
|
23
|
+
export const generatePythonSDK = async (options = {}) => {
|
|
24
|
+
const openapi = await resolveOpenapiSpec(options);
|
|
27
25
|
const routes = Object.entries(openapi.paths).map(([path, v]) => ({
|
|
28
26
|
path,
|
|
29
27
|
...v,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-python-sdk.js","sourceRoot":"","sources":["../../src/lib/generate-python-sdk/generate-python-sdk.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate-python-sdk.js","sourceRoot":"","sources":["../../src/lib/generate-python-sdk/generate-python-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
export const resolveOpenapiSpec = async (options = {}) => {
|
|
4
|
+
const { openApiSpecObject, openApiSpecPath } = options;
|
|
5
|
+
if (openApiSpecObject) {
|
|
6
|
+
return openApiSpecObject;
|
|
7
|
+
}
|
|
8
|
+
if (openApiSpecPath) {
|
|
9
|
+
try {
|
|
10
|
+
const specContent = await readFile(openApiSpecPath, { encoding: "utf-8" });
|
|
11
|
+
return JSON.parse(specContent);
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
const errorMessage = error instanceof Error ? error.message : "An unknown error occurred";
|
|
15
|
+
throw new Error(`Failed to read OpenAPI spec from ${openApiSpecPath}: ${errorMessage}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const openapiUrl = "https://connect.getseam.com/openapi.json";
|
|
19
|
+
try {
|
|
20
|
+
const openapi = await axios
|
|
21
|
+
.get(openapiUrl)
|
|
22
|
+
.then((res) => res.data);
|
|
23
|
+
return openapi;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
let errorMessage = "An unknown error occurred";
|
|
27
|
+
if (axios.isAxiosError(error)) {
|
|
28
|
+
errorMessage = error.message;
|
|
29
|
+
if (error.response) {
|
|
30
|
+
errorMessage += `, Response: ${error.response.status}, ${error.response.data}`;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else if (error instanceof Error) {
|
|
34
|
+
errorMessage = error.message;
|
|
35
|
+
}
|
|
36
|
+
throw new Error(`Failed to fetch OpenAPI spec from ${openapiUrl}: ${errorMessage}`);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
export default resolveOpenapiSpec;
|
|
40
|
+
//# sourceMappingURL=resolve-openapi-spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-openapi-spec.js","sourceRoot":"","sources":["../../src/lib/openapi/resolve-openapi-spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAK3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,UAAmB,EAAE,EACG,EAAE;IAC1B,MAAM,EAAE,iBAAiB,EAAE,eAAe,EAAE,GAAG,OAAO,CAAA;IAEtD,IAAI,iBAAiB,EAAE;QACrB,OAAO,iBAAiB,CAAA;KACzB;IACD,IAAI,eAAe,EAAE;QACnB,IAAI;YACF,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;YAE1E,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;SAC/B;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAA;YAEtE,MAAM,IAAI,KAAK,CACb,oCAAoC,eAAe,KAAK,YAAY,EAAE,CACvE,CAAA;SACF;KACF;IAED,MAAM,UAAU,GAAG,0CAA0C,CAAA;IAE7D,IAAI;QACF,MAAM,OAAO,GAAkB,MAAM,KAAK;aACvC,GAAG,CAAC,UAAU,CAAC;aACf,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAE1B,OAAO,OAAO,CAAA;KACf;IAAC,OAAO,KAAK,EAAE;QACd,IAAI,YAAY,GAAG,2BAA2B,CAAA;QAE9C,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;YAC7B,YAAY,GAAG,KAAK,CAAC,OAAO,CAAA;YAE5B,IAAI,KAAK,CAAC,QAAQ,EAAE;gBAClB,YAAY,IAAI,eAAe,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;aAC/E;SACF;aAAM,IAAI,KAAK,YAAY,KAAK,EAAE;YACjC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAA;SAC7B;QAED,MAAM,IAAI,KAAK,CACb,qCAAqC,UAAU,KAAK,YAAY,EAAE,CACnE,CAAA;KACF;AACH,CAAC,CAAA;AAED,eAAe,kBAAkB,CAAA"}
|
package/lib/types.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seamapi/nextlove-sdk-generator",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"description": "Utilities for building NextLove SDK Generators",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.js",
|
|
@@ -89,6 +89,7 @@
|
|
|
89
89
|
"eslint-plugin-simple-import-sort": "^10.0.0",
|
|
90
90
|
"eslint-plugin-unused-imports": "^3.0.0",
|
|
91
91
|
"make-vfs": "^1.0.8",
|
|
92
|
+
"nock": "^13.5.4",
|
|
92
93
|
"prettier": "^3.0.3",
|
|
93
94
|
"shx": "^0.3.4",
|
|
94
95
|
"tsc-alias": "^1.8.2",
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { ObjSchema, OpenAPISchema, Route } from "lib/types.js"
|
|
1
|
+
import type { ObjSchema, Route, SdkGeneratorOptions } from "lib/types.js"
|
|
3
2
|
import { ClassFile } from "./class-file.js"
|
|
4
3
|
import { pascalCase } from "change-case"
|
|
5
4
|
import { flattenObjSchema } from "lib/openapi/index.js"
|
|
@@ -24,11 +23,10 @@ import {
|
|
|
24
23
|
endpoints_returning_deprecated_action_attempt,
|
|
25
24
|
ignored_endpoint_paths,
|
|
26
25
|
} from "lib/endpoint-rules.js"
|
|
26
|
+
import resolveOpenapiSpec from "lib/openapi/resolve-openapi-spec.js"
|
|
27
27
|
|
|
28
|
-
export const generatePythonSDK = async () => {
|
|
29
|
-
const openapi
|
|
30
|
-
.get("https://connect.getseam.com/openapi.json")
|
|
31
|
-
.then((res) => res.data)
|
|
28
|
+
export const generatePythonSDK = async (options: SdkGeneratorOptions = {}) => {
|
|
29
|
+
const openapi = await resolveOpenapiSpec(options)
|
|
32
30
|
const routes: Route[] = Object.entries(openapi.paths).map(([path, v]) => ({
|
|
33
31
|
path,
|
|
34
32
|
...v,
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import axios from "axios"
|
|
2
|
+
import { readFile } from "node:fs/promises"
|
|
3
|
+
import type { OpenAPISchema, SdkGeneratorOptions } from "lib/types.js"
|
|
4
|
+
|
|
5
|
+
type Options = SdkGeneratorOptions
|
|
6
|
+
|
|
7
|
+
export const resolveOpenapiSpec = async (
|
|
8
|
+
options: Options = {}
|
|
9
|
+
): Promise<OpenAPISchema> => {
|
|
10
|
+
const { openApiSpecObject, openApiSpecPath } = options
|
|
11
|
+
|
|
12
|
+
if (openApiSpecObject) {
|
|
13
|
+
return openApiSpecObject
|
|
14
|
+
}
|
|
15
|
+
if (openApiSpecPath) {
|
|
16
|
+
try {
|
|
17
|
+
const specContent = await readFile(openApiSpecPath, { encoding: "utf-8" })
|
|
18
|
+
|
|
19
|
+
return JSON.parse(specContent)
|
|
20
|
+
} catch (error) {
|
|
21
|
+
const errorMessage =
|
|
22
|
+
error instanceof Error ? error.message : "An unknown error occurred"
|
|
23
|
+
|
|
24
|
+
throw new Error(
|
|
25
|
+
`Failed to read OpenAPI spec from ${openApiSpecPath}: ${errorMessage}`
|
|
26
|
+
)
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const openapiUrl = "https://connect.getseam.com/openapi.json"
|
|
31
|
+
|
|
32
|
+
try {
|
|
33
|
+
const openapi: OpenAPISchema = await axios
|
|
34
|
+
.get(openapiUrl)
|
|
35
|
+
.then((res) => res.data)
|
|
36
|
+
|
|
37
|
+
return openapi
|
|
38
|
+
} catch (error) {
|
|
39
|
+
let errorMessage = "An unknown error occurred"
|
|
40
|
+
|
|
41
|
+
if (axios.isAxiosError(error)) {
|
|
42
|
+
errorMessage = error.message
|
|
43
|
+
|
|
44
|
+
if (error.response) {
|
|
45
|
+
errorMessage += `, Response: ${error.response.status}, ${error.response.data}`
|
|
46
|
+
}
|
|
47
|
+
} else if (error instanceof Error) {
|
|
48
|
+
errorMessage = error.message
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
throw new Error(
|
|
52
|
+
`Failed to fetch OpenAPI spec from ${openapiUrl}: ${errorMessage}`
|
|
53
|
+
)
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export default resolveOpenapiSpec
|