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 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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -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
@@ -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"}
@@ -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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"}
@@ -0,0 +1,3 @@
1
+ export { generate } from "./generate.js";
2
+ export type { GenerateOptions } from "./generate.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export { generate } from "./generate.js";
2
+ //# sourceMappingURL=index.js.map
@@ -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
+ }