openapi-typescript-generate 0.1.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/LICENSE +27 -0
- package/README.md +77 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +41 -0
- package/dist/cli.js.map +1 -0
- package/dist/generate.d.ts +22 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +368 -0
- package/dist/generate.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/package.json +59 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
Copyright (c) 2026. All rights reserved.
|
|
2
|
+
|
|
3
|
+
This software and associated documentation files (the "Software") are the
|
|
4
|
+
exclusive property of the copyright holder.
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this Software, to use the Software solely for its intended purpose
|
|
8
|
+
(generating TypeScript types and API clients from OpenAPI specifications).
|
|
9
|
+
|
|
10
|
+
The following actions are expressly prohibited without prior written consent
|
|
11
|
+
from the copyright holder:
|
|
12
|
+
|
|
13
|
+
1. Modifying, adapting, or creating derivative works based on the Software.
|
|
14
|
+
2. Redistributing, sublicensing, selling, or otherwise transferring the
|
|
15
|
+
Software or any portion thereof to any third party.
|
|
16
|
+
3. Publishing, uploading, or making the Software available on any package
|
|
17
|
+
registry, repository, or distribution channel other than the official
|
|
18
|
+
release by the copyright holder.
|
|
19
|
+
4. Reverse-engineering, decompiling, or disassembling the Software.
|
|
20
|
+
|
|
21
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
22
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
23
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
24
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
25
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
26
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
27
|
+
|
package/README.md
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# @jobify/connect-generate
|
|
2
|
+
|
|
3
|
+
CLI tool and library to generate TypeScript types and API clients from OpenAPI specs.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
bun add -g @jobify/connect-generate
|
|
9
|
+
# or add as a dev dependency
|
|
10
|
+
bun add -d @jobify/connect-generate
|
|
11
|
+
# or use directly
|
|
12
|
+
bunx @jobify/connect-generate
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## CLI Usage
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
connect-generate \
|
|
19
|
+
--api-urls "user-service@http://localhost:8081,company-service@http://localhost:8082" \
|
|
20
|
+
--api-docs-path /api-docs \
|
|
21
|
+
--output-dir ./generated
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Options
|
|
25
|
+
|
|
26
|
+
| Option | Env Variable | Default | Description |
|
|
27
|
+
|------------------------------|-------------------------|---------------|--------------------------------------------------------------------------|
|
|
28
|
+
| `-u, --api-urls <urls>` | `API_URLS` or `API_URL` | *(required)* | Comma-separated service entries (`name@url` or `name=url` or just `url`) |
|
|
29
|
+
| `-p, --api-docs-path <path>` | `API_DOCS_URL_PATH` | `/api-docs` | Path appended to each service URL to fetch the OpenAPI spec |
|
|
30
|
+
| `-o, --output-dir <dir>` | — | `./generated` | Directory where generated files will be written |
|
|
31
|
+
|
|
32
|
+
### Environment Variables
|
|
33
|
+
|
|
34
|
+
CLI options take precedence over environment variables. If `dotenv` is installed, a `.env` file in the current working
|
|
35
|
+
directory will be loaded automatically.
|
|
36
|
+
|
|
37
|
+
### Service Entry Formats
|
|
38
|
+
|
|
39
|
+
The `--api-urls` value is a comma-separated list. Each entry can be:
|
|
40
|
+
|
|
41
|
+
- `name@url` — e.g. `user-service@http://localhost:8081`
|
|
42
|
+
- `name=url` — e.g. `user-service=http://localhost:8081`
|
|
43
|
+
- `url` — the name is derived from the hostname
|
|
44
|
+
|
|
45
|
+
## Programmatic Usage
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
import { generate } from "@jobify/connect-generate"
|
|
49
|
+
|
|
50
|
+
await generate({
|
|
51
|
+
apiUrls: "user-service@http://localhost:8081",
|
|
52
|
+
apiDocsPath: "/api-docs",
|
|
53
|
+
outputDir: "./generated",
|
|
54
|
+
})
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Output Structure
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
generated/
|
|
61
|
+
index.ts # Top-level re-exports
|
|
62
|
+
<service-name>.ts # Per-service client factory
|
|
63
|
+
api/
|
|
64
|
+
index.ts # API index
|
|
65
|
+
<service-name>/
|
|
66
|
+
index.ts # Service group index
|
|
67
|
+
<group>.json # Filtered OpenAPI schema
|
|
68
|
+
<group>.ts # Generated TypeScript types
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Development
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
bun install
|
|
75
|
+
bun run build
|
|
76
|
+
```
|
|
77
|
+
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Attempt to load dotenv if available (optional peer dependency)
|
|
3
|
+
try {
|
|
4
|
+
await import("dotenv/config");
|
|
5
|
+
}
|
|
6
|
+
catch {
|
|
7
|
+
// dotenv not installed — that's fine, env vars can be passed directly
|
|
8
|
+
}
|
|
9
|
+
import { resolve } from "path";
|
|
10
|
+
import { Command } from "commander";
|
|
11
|
+
import { generate } from "./generate.js";
|
|
12
|
+
const program = new Command();
|
|
13
|
+
program
|
|
14
|
+
.name("openapi-generate")
|
|
15
|
+
.description("Generate TypeScript types and API clients from OpenAPI specs")
|
|
16
|
+
.version("0.1.0")
|
|
17
|
+
.option("-u, --api-urls <urls>", "Comma-separated service entries: name@url,name@url (env: API_URLS or API_URL)")
|
|
18
|
+
.option("-p, --api-docs-path <path>", "Path appended to each service URL to fetch the spec (env: API_DOCS_URL_PATH)", "/api-docs")
|
|
19
|
+
.option("-o, --output-dir <dir>", "Directory where generated files will be written (default: ./generated)", "./generated")
|
|
20
|
+
.action(async (opts) => {
|
|
21
|
+
const apiUrls = opts.apiUrls ||
|
|
22
|
+
process.env.API_URLS ||
|
|
23
|
+
process.env.API_URL;
|
|
24
|
+
if (!apiUrls) {
|
|
25
|
+
console.error("Error: No API URLs provided. Use --api-urls or set API_URLS / API_URL environment variable.");
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
const apiDocsPath = opts.apiDocsPath ||
|
|
29
|
+
process.env.API_DOCS_URL_PATH ||
|
|
30
|
+
"/api-docs";
|
|
31
|
+
const outputDir = resolve(process.cwd(), opts.outputDir);
|
|
32
|
+
try {
|
|
33
|
+
await generate({ apiUrls, apiDocsPath, outputDir });
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
console.error("[connect-generate] Fatal error:", err);
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
program.parse();
|
|
41
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,iEAAiE;AACjE,IAAI,CAAC;IACH,MAAM,MAAM,CAAC,eAAe,CAAC,CAAA;AAC/B,CAAC;AAAC,MAAM,CAAC;IACP,sEAAsE;AACxE,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,kBAAkB,CAAC;KACxB,WAAW,CACV,8DAA8D,CAC/D;KACA,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CACL,uBAAuB,EACvB,+EAA+E,CAChF;KACA,MAAM,CACL,4BAA4B,EAC5B,8EAA8E,EAC9E,WAAW,CACZ;KACA,MAAM,CACL,wBAAwB,EACxB,wEAAwE,EACxE,aAAa,CACd;KACA,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,OAAO,GACX,IAAI,CAAC,OAAO;QACZ,OAAO,CAAC,GAAG,CAAC,QAAQ;QACpB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAA;IAErB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,6FAA6F,CAC9F,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,WAAW,GACf,IAAI,CAAC,WAAW;QAChB,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7B,WAAW,CAAA;IAEb,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IAExD,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAA;IACrD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAA;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC,CAAC,CAAA;AAEJ,OAAO,CAAC,KAAK,EAAE,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface GenerateOptions {
|
|
2
|
+
/**
|
|
3
|
+
* Comma-separated list of service entries.
|
|
4
|
+
* Format: `name@url` or `name=url` or just `url`
|
|
5
|
+
* Multiple entries separated by commas.
|
|
6
|
+
*/
|
|
7
|
+
apiUrls: string;
|
|
8
|
+
/**
|
|
9
|
+
* Path appended to each service URL to fetch the OpenAPI spec.
|
|
10
|
+
* @default "/api-docs"
|
|
11
|
+
*/
|
|
12
|
+
apiDocsPath: string;
|
|
13
|
+
/**
|
|
14
|
+
* Absolute or relative directory where generated files will be written.
|
|
15
|
+
*/
|
|
16
|
+
outputDir: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Main generation function. Call this programmatically or from the CLI.
|
|
20
|
+
*/
|
|
21
|
+
export declare function generate(options: GenerateOptions): Promise<void>;
|
|
22
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;CAClB;AA+UD;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA+JtE"}
|
package/dist/generate.js
ADDED
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync } from "fs";
|
|
2
|
+
import openapiTS, { astToString } from "openapi-typescript";
|
|
3
|
+
import { dirname, join } from "path";
|
|
4
|
+
function parseServices(apiUrls) {
|
|
5
|
+
if (!apiUrls) {
|
|
6
|
+
throw new Error("No API URLs provided");
|
|
7
|
+
}
|
|
8
|
+
return apiUrls.split(",").map((entry) => {
|
|
9
|
+
let name;
|
|
10
|
+
let url;
|
|
11
|
+
if (entry.includes("@")) {
|
|
12
|
+
const parts = entry.split("@");
|
|
13
|
+
name = parts[0];
|
|
14
|
+
url = parts.slice(1).join("@");
|
|
15
|
+
}
|
|
16
|
+
else if (entry.includes("=")) {
|
|
17
|
+
const parts = entry.split("=");
|
|
18
|
+
name = parts[0];
|
|
19
|
+
url = parts.slice(1).join("=");
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
url = entry;
|
|
23
|
+
}
|
|
24
|
+
url = (url ?? "").trim();
|
|
25
|
+
if (!url)
|
|
26
|
+
throw new Error(`Invalid service entry: ${entry}`);
|
|
27
|
+
if (!name) {
|
|
28
|
+
try {
|
|
29
|
+
const u = new URL(url);
|
|
30
|
+
name = u.hostname
|
|
31
|
+
.replace(/[^a-z0-9]+/gi, "-")
|
|
32
|
+
.replace(/(^-|-$)/g, "");
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
name = url
|
|
36
|
+
.replace(/https?:\/\//, "")
|
|
37
|
+
.replace(/[^a-z0-9]+/gi, "-")
|
|
38
|
+
.replace(/(^-|-$)/g, "");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return { name: name, url };
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
async function fetchSpec(serviceName, serviceUrl, apiDocsPath) {
|
|
45
|
+
console.log(`[connect-generate] fetching OpenAPI spec for "${serviceName}" from ${serviceUrl}${apiDocsPath}`);
|
|
46
|
+
const response = await fetch(serviceUrl + apiDocsPath);
|
|
47
|
+
if (!response.ok)
|
|
48
|
+
throw new Error(`Failed fetching ${serviceUrl + apiDocsPath}: ${response.status} ${response.statusText}`);
|
|
49
|
+
return await response.json();
|
|
50
|
+
}
|
|
51
|
+
function collectRefs(obj, refs = new Set()) {
|
|
52
|
+
if (!obj || typeof obj !== "object")
|
|
53
|
+
return refs;
|
|
54
|
+
if (obj.$ref && typeof obj.$ref === "string") {
|
|
55
|
+
refs.add(obj.$ref);
|
|
56
|
+
}
|
|
57
|
+
for (const value of Object.values(obj)) {
|
|
58
|
+
collectRefs(value, refs);
|
|
59
|
+
}
|
|
60
|
+
return refs;
|
|
61
|
+
}
|
|
62
|
+
function collectSchemas(refs, allSchemas) {
|
|
63
|
+
const collected = {};
|
|
64
|
+
const queue = [...refs];
|
|
65
|
+
while (queue.length) {
|
|
66
|
+
const ref = queue.pop();
|
|
67
|
+
const match = ref?.match(/^#\/components\/schemas\/(.+)$/);
|
|
68
|
+
if (!match)
|
|
69
|
+
continue;
|
|
70
|
+
const name = match[1];
|
|
71
|
+
if (collected[name])
|
|
72
|
+
continue;
|
|
73
|
+
const schema = allSchemas[name];
|
|
74
|
+
if (!schema)
|
|
75
|
+
continue;
|
|
76
|
+
collected[name] = schema;
|
|
77
|
+
const nestedRefs = collectRefs(schema);
|
|
78
|
+
for (const r of nestedRefs) {
|
|
79
|
+
const nestedName = r.match(/^#\/components\/schemas\/(.+)$/)?.[1];
|
|
80
|
+
if (nestedName && !collected[nestedName]) {
|
|
81
|
+
queue.push(r);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return collected;
|
|
86
|
+
}
|
|
87
|
+
function toSafeIdent(name) {
|
|
88
|
+
let id = name.replace(/[^a-zA-Z0-9_$]/g, "_");
|
|
89
|
+
if (/^[0-9]/.test(id))
|
|
90
|
+
id = "_" + id;
|
|
91
|
+
if (!id)
|
|
92
|
+
id = "_";
|
|
93
|
+
return id;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Transform generated d.ts content to replace JsDoc @enum string unions with
|
|
97
|
+
* exported TypeScript enums.
|
|
98
|
+
*/
|
|
99
|
+
function transformEnums(dts) {
|
|
100
|
+
const enumMatches = [];
|
|
101
|
+
const lines = dts.split(/\r?\n/);
|
|
102
|
+
for (let i = 0; i < lines.length; i++) {
|
|
103
|
+
const line = lines[i];
|
|
104
|
+
if (line.includes("@enum") && line.includes("{string}")) {
|
|
105
|
+
let j = i + 1;
|
|
106
|
+
while (j < lines.length && lines[j].trim() === "")
|
|
107
|
+
j++;
|
|
108
|
+
if (j >= lines.length)
|
|
109
|
+
break;
|
|
110
|
+
const propLine = lines[j];
|
|
111
|
+
const propMatch = propLine.match(/^(\s*)([A-Za-z0-9_$]+):\s*((?:"[^"]+"\s*\|\s*)*"[^"]+")\s*;\s*$/);
|
|
112
|
+
if (propMatch) {
|
|
113
|
+
const indent = propMatch[1];
|
|
114
|
+
const name = propMatch[2];
|
|
115
|
+
const union = propMatch[3];
|
|
116
|
+
const values = [...union.matchAll(/"([^"]+)"/g)].map((m) => m[1]);
|
|
117
|
+
if (values.length) {
|
|
118
|
+
enumMatches.push({ name, values, fullLine: propLine, indent });
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (enumMatches.length === 0)
|
|
124
|
+
return dts;
|
|
125
|
+
const enumsText = enumMatches
|
|
126
|
+
.map((e) => {
|
|
127
|
+
const members = e.values
|
|
128
|
+
.map((v) => {
|
|
129
|
+
let member = v;
|
|
130
|
+
if (!/^[$A-Z_][0-9A-Z_$]*$/i.test(member)) {
|
|
131
|
+
member = member.replace(/[^a-zA-Z0-9_$]/g, "_");
|
|
132
|
+
if (/^[0-9]/.test(member))
|
|
133
|
+
member = "_" + member;
|
|
134
|
+
}
|
|
135
|
+
if (/^[0-9]/.test(member))
|
|
136
|
+
member = "_" + member;
|
|
137
|
+
return ` ${member}: ${JSON.stringify(v)}`;
|
|
138
|
+
})
|
|
139
|
+
.join(",\n");
|
|
140
|
+
const constName = e.name;
|
|
141
|
+
const typeName = e.name;
|
|
142
|
+
return `export const ${constName} = {\n${members}\n} as const;\n\nexport type ${typeName} = typeof ${constName}[keyof typeof ${constName}];\n`;
|
|
143
|
+
})
|
|
144
|
+
.join("\n");
|
|
145
|
+
let newDts = dts;
|
|
146
|
+
for (const e of enumMatches) {
|
|
147
|
+
const escaped = e.fullLine.replace(/[\\\-\/^$*+?.()|[\]{}]/g, "\\$&");
|
|
148
|
+
const propRegex = new RegExp("^" + escaped + "$", "m");
|
|
149
|
+
newDts = newDts.replace(propRegex, `${e.indent}${e.name}: ${e.name};`);
|
|
150
|
+
}
|
|
151
|
+
const insertPoint = newDts.indexOf("\nexport interface components {");
|
|
152
|
+
if (insertPoint !== -1) {
|
|
153
|
+
newDts =
|
|
154
|
+
newDts.slice(0, insertPoint + 1) +
|
|
155
|
+
enumsText +
|
|
156
|
+
"\n" +
|
|
157
|
+
newDts.slice(insertPoint + 1);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
newDts = enumsText + "\n" + newDts;
|
|
161
|
+
}
|
|
162
|
+
return newDts;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Append `export type X = components["schemas"]["X"]` for every schema that
|
|
166
|
+
* is not already exported at the top level.
|
|
167
|
+
*/
|
|
168
|
+
function generateSchemaTypeAliases(dts, schemaNames) {
|
|
169
|
+
const alreadyExported = new Set();
|
|
170
|
+
for (const line of dts.split(/\r?\n/)) {
|
|
171
|
+
const match = line.match(/^export (?:type|const|interface) ([A-Za-z0-9_$]+)[\s=<{]/);
|
|
172
|
+
if (match) {
|
|
173
|
+
alreadyExported.add(match[1]);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
const aliases = schemaNames
|
|
177
|
+
.filter((name) => !alreadyExported.has(name))
|
|
178
|
+
.map((name) => `export type ${name} = components["schemas"]["${name}"];`);
|
|
179
|
+
if (aliases.length === 0)
|
|
180
|
+
return dts;
|
|
181
|
+
return (dts +
|
|
182
|
+
"\n// Schema type aliases for convenient imports\n" +
|
|
183
|
+
aliases.join("\n") +
|
|
184
|
+
"\n");
|
|
185
|
+
}
|
|
186
|
+
function toPascal(s) {
|
|
187
|
+
return s
|
|
188
|
+
.replace(/[^a-zA-Z0-9]+/g, "_")
|
|
189
|
+
.replace(/(^|_)(\w)/g, (_, __, c) => (c || "").toUpperCase());
|
|
190
|
+
}
|
|
191
|
+
async function generateForService(service, apiDocsPath, outputDir) {
|
|
192
|
+
const json = await fetchSpec(service.name, service.url, apiDocsPath);
|
|
193
|
+
const { paths, components = {}, ...schema } = json;
|
|
194
|
+
console.log(`[connect-generate] fetched OpenAPI spec: paths=${Object.keys(paths ?? {}).length}, schemas=${Object.keys(components.schemas ?? {}).length}`);
|
|
195
|
+
const grouped = Object.entries(paths).reduce((acc, [path, def]) => {
|
|
196
|
+
const shared = (path.includes("/api/")
|
|
197
|
+
? path.split("/")[2]
|
|
198
|
+
: path.split("/")[1]) || "root";
|
|
199
|
+
if (shared.startsWith("."))
|
|
200
|
+
return acc;
|
|
201
|
+
if (!acc[shared])
|
|
202
|
+
acc[shared] = [];
|
|
203
|
+
acc[shared].push([path, def]);
|
|
204
|
+
return acc;
|
|
205
|
+
}, {});
|
|
206
|
+
console.log(`[connect-generate] grouped paths into ${Object.keys(grouped).length} groups for service ${service.name}`);
|
|
207
|
+
const serviceOutputDir = join(outputDir, "api", service.name);
|
|
208
|
+
for (const [key, groupPaths] of Object.entries(grouped)) {
|
|
209
|
+
const path = join(serviceOutputDir, key + ".json");
|
|
210
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
211
|
+
console.log(`[connect-generate] generating group "${key}" with ${groupPaths.length} paths -> ${path}`);
|
|
212
|
+
const refs = new Set();
|
|
213
|
+
for (const [, def] of groupPaths) {
|
|
214
|
+
collectRefs(def, refs);
|
|
215
|
+
}
|
|
216
|
+
const usedSchemas = collectSchemas(refs, components.schemas ?? {});
|
|
217
|
+
const _schema = JSON.stringify({
|
|
218
|
+
...schema,
|
|
219
|
+
paths: Object.fromEntries(groupPaths),
|
|
220
|
+
components: {
|
|
221
|
+
...components,
|
|
222
|
+
schemas: usedSchemas
|
|
223
|
+
}
|
|
224
|
+
}, null, 2);
|
|
225
|
+
writeFileSync(path, _schema);
|
|
226
|
+
console.log(`[connect-generate] wrote filtered schema to ${path}`);
|
|
227
|
+
try {
|
|
228
|
+
const ts = await openapiTS(_schema);
|
|
229
|
+
const out = path.replace(".json", ".ts");
|
|
230
|
+
let dts = astToString(ts);
|
|
231
|
+
dts = transformEnums(dts);
|
|
232
|
+
dts = generateSchemaTypeAliases(dts, Object.keys(usedSchemas));
|
|
233
|
+
writeFileSync(out, dts);
|
|
234
|
+
console.log(`[connect-generate] wrote types to ${out}`);
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
console.error(`[connect-generate] failed to generate types for group "${key}" of service ${service.name}:`, err);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// Write service-level index.ts
|
|
241
|
+
const indexLines = Object.keys(grouped).map((key) => {
|
|
242
|
+
const ident = toSafeIdent(key);
|
|
243
|
+
return `export * as ${ident} from "./${key}"`;
|
|
244
|
+
});
|
|
245
|
+
const allGroups = `export const allApiGroups = [${Object.keys(grouped)
|
|
246
|
+
.map((g) => `"${g}"`)
|
|
247
|
+
.join(", ")}] as const`;
|
|
248
|
+
indexLines.push("", allGroups, "");
|
|
249
|
+
const indexPath = join(serviceOutputDir, "./index.ts");
|
|
250
|
+
mkdirSync(dirname(indexPath), { recursive: true });
|
|
251
|
+
writeFileSync(indexPath, indexLines.join("\n") + "\n");
|
|
252
|
+
console.log(`[connect-generate] wrote service index to ${indexPath}`);
|
|
253
|
+
return Object.keys(grouped);
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Main generation function. Call this programmatically or from the CLI.
|
|
257
|
+
*/
|
|
258
|
+
export async function generate(options) {
|
|
259
|
+
const { apiUrls, apiDocsPath, outputDir } = options;
|
|
260
|
+
const services = parseServices(apiUrls);
|
|
261
|
+
const servicesWithGroups = [];
|
|
262
|
+
for (const s of services) {
|
|
263
|
+
try {
|
|
264
|
+
const groups = await generateForService(s, apiDocsPath, outputDir);
|
|
265
|
+
servicesWithGroups.push({ ...s, groups });
|
|
266
|
+
}
|
|
267
|
+
catch (err) {
|
|
268
|
+
console.error(`[connect-generate] failed for service ${s.name}:`, err);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// Write top-level api index
|
|
272
|
+
const apiRoot = join(outputDir, "api");
|
|
273
|
+
const topLevelLines = services.map((s) => {
|
|
274
|
+
const ident = toSafeIdent(s.name);
|
|
275
|
+
return `export * as ${ident} from "./${s.name}"`;
|
|
276
|
+
});
|
|
277
|
+
const topAllGroups = `export const allApiServices = [${services
|
|
278
|
+
.map((s) => `"${s.name}"`)
|
|
279
|
+
.join(", ")}] as const`;
|
|
280
|
+
topLevelLines.push("", topAllGroups, "");
|
|
281
|
+
const topIndexPath = join(apiRoot, "./index.ts");
|
|
282
|
+
mkdirSync(dirname(topIndexPath), { recursive: true });
|
|
283
|
+
writeFileSync(topIndexPath, topLevelLines.join("\n") + "\n");
|
|
284
|
+
console.log(`[connect-generate] wrote top-level api index to ${topIndexPath}`);
|
|
285
|
+
// Write per-service client files
|
|
286
|
+
for (const svc of servicesWithGroups) {
|
|
287
|
+
const svcIdent = toSafeIdent(svc.name);
|
|
288
|
+
const clientPath = join(outputDir, `${svc.name}.ts`);
|
|
289
|
+
const lines = [];
|
|
290
|
+
lines.push(`import createClient, { ClientOptions, type Middleware } from "openapi-fetch"`);
|
|
291
|
+
for (const group of svc.groups) {
|
|
292
|
+
const grpIdent = toSafeIdent(group);
|
|
293
|
+
const importIdent = `${svcIdent}_${grpIdent}_paths`;
|
|
294
|
+
lines.push(`import type { paths as ${importIdent} } from "./api/${svc.name}/${group}"`);
|
|
295
|
+
}
|
|
296
|
+
lines.push("", "function getCreatePathBasedClient" +
|
|
297
|
+
"<" +
|
|
298
|
+
"P extends {}" +
|
|
299
|
+
">" +
|
|
300
|
+
"(options: ClientOptions, middlewares: Middleware[] = []) {");
|
|
301
|
+
lines.push(" const client = createClient" + "<" + "P" + ">" + "(options)");
|
|
302
|
+
lines.push(" middlewares.forEach(mw => client.use(mw))");
|
|
303
|
+
lines.push(" return client");
|
|
304
|
+
lines.push("}");
|
|
305
|
+
lines.push("");
|
|
306
|
+
lines.push("type ResourceClient" + "<" + "T extends {}" + ">" + " = {");
|
|
307
|
+
lines.push(" resource: ReturnType<typeof getCreatePathBasedClient" +
|
|
308
|
+
"<" +
|
|
309
|
+
"T" +
|
|
310
|
+
">" +
|
|
311
|
+
">,\n}");
|
|
312
|
+
lines.push("");
|
|
313
|
+
lines.push("function getResourceClient" + "<" + "P extends {}" + ">" + "(");
|
|
314
|
+
lines.push(" prefix: string,");
|
|
315
|
+
lines.push(" options: ClientOptions,");
|
|
316
|
+
lines.push(" middlewares: Middleware[] = []");
|
|
317
|
+
lines.push("): ResourceClient" + "<" + "P" + ">" + " {");
|
|
318
|
+
lines.push(" const resource = getCreatePathBasedClient" +
|
|
319
|
+
"<" +
|
|
320
|
+
"P" +
|
|
321
|
+
">" +
|
|
322
|
+
"(options, middlewares)");
|
|
323
|
+
lines.push(" return {");
|
|
324
|
+
lines.push(" resource");
|
|
325
|
+
lines.push(" }");
|
|
326
|
+
lines.push("}");
|
|
327
|
+
lines.push("");
|
|
328
|
+
const svcInterfaceName = `Jobify_${svcIdent}_Client`;
|
|
329
|
+
lines.push(`export interface ${svcInterfaceName} {`);
|
|
330
|
+
for (const group of svc.groups) {
|
|
331
|
+
const grpIdent = toSafeIdent(group);
|
|
332
|
+
const importIdent = `${svcIdent}_${grpIdent}_paths`;
|
|
333
|
+
lines.push(` ${grpIdent}: ResourceClient<${importIdent}>`);
|
|
334
|
+
}
|
|
335
|
+
lines.push(`}`);
|
|
336
|
+
const createFnName = `create${toPascal(svc.name)}Client`;
|
|
337
|
+
lines.push(`\nexport function ${createFnName}(`);
|
|
338
|
+
lines.push(" options: ClientOptions,");
|
|
339
|
+
lines.push(" middlewares: Middleware[] = []");
|
|
340
|
+
lines.push(`): ${svcInterfaceName} {`);
|
|
341
|
+
lines.push(" return ({");
|
|
342
|
+
for (const group of svc.groups) {
|
|
343
|
+
const grpIdent = toSafeIdent(group);
|
|
344
|
+
const importIdent = `${svcIdent}_${grpIdent}_paths`;
|
|
345
|
+
lines.push(` ${grpIdent}: getResourceClient<${importIdent}>("${svc.name}/${group}", options, middlewares),`);
|
|
346
|
+
}
|
|
347
|
+
lines.push(` })\n}`);
|
|
348
|
+
mkdirSync(dirname(clientPath), { recursive: true });
|
|
349
|
+
writeFileSync(clientPath, lines.join("\n") + "\n");
|
|
350
|
+
console.log(`[connect-generate] wrote client for service ${svc.name} -> ${clientPath}`);
|
|
351
|
+
}
|
|
352
|
+
// Write top-level client index
|
|
353
|
+
const clientIndexPath = join(outputDir, "index.ts");
|
|
354
|
+
const idxLines = [];
|
|
355
|
+
for (const svc of servicesWithGroups) {
|
|
356
|
+
const svcIdent = toSafeIdent(svc.name);
|
|
357
|
+
const pascal = toPascal(svc.name);
|
|
358
|
+
idxLines.push(`export { create${pascal}Client } from "./${svc.name}"`);
|
|
359
|
+
idxLines.push(`export type { Jobify_${svcIdent}_Client as ${pascal}Client } from "./${svc.name}"`);
|
|
360
|
+
idxLines.push("");
|
|
361
|
+
}
|
|
362
|
+
idxLines.push('export * from "./api"');
|
|
363
|
+
mkdirSync(dirname(clientIndexPath), { recursive: true });
|
|
364
|
+
writeFileSync(clientIndexPath, idxLines.join("\n") + "\n");
|
|
365
|
+
console.log(`[connect-generate] wrote top-level index to ${clientIndexPath}`);
|
|
366
|
+
console.log("[connect-generate] done!");
|
|
367
|
+
}
|
|
368
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "openapi-typescript-generate",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CLI tool to generate TypeScript types and clients from OpenAPI specs",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"connect-generate": "./dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"LICENSE"
|
|
20
|
+
],
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "bun tsc",
|
|
23
|
+
"dev": "bun tsc --watch",
|
|
24
|
+
"prepublishOnly": "bun run build",
|
|
25
|
+
"clean": "bun rimraf dist"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"commander": "^13.1.0",
|
|
29
|
+
"openapi-typescript": "7.9.1"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@types/node": "^22.15.0",
|
|
33
|
+
"dotenv": "^17.2.1",
|
|
34
|
+
"rimraf": "~5.0.10",
|
|
35
|
+
"typescript": "^5.8.2"
|
|
36
|
+
},
|
|
37
|
+
"peerDependencies": {
|
|
38
|
+
"dotenv": ">=16.0.0"
|
|
39
|
+
},
|
|
40
|
+
"peerDependenciesMeta": {
|
|
41
|
+
"dotenv": {
|
|
42
|
+
"optional": true
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"keywords": [
|
|
46
|
+
"openapi",
|
|
47
|
+
"typescript",
|
|
48
|
+
"codegen",
|
|
49
|
+
"cli"
|
|
50
|
+
],
|
|
51
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
52
|
+
"publishConfig": {
|
|
53
|
+
"access": "public"
|
|
54
|
+
},
|
|
55
|
+
"repository": {
|
|
56
|
+
"type": "git",
|
|
57
|
+
"url": "https://github.com/justAnArthur/openapi-typescript-generate"
|
|
58
|
+
}
|
|
59
|
+
}
|