elysia-openapi-codegen 0.1.0 → 0.1.1

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/README.md CHANGED
@@ -318,14 +318,26 @@ your-project/
318
318
  ```bash
319
319
  # Install dependencies
320
320
  bun install
321
+ ```
322
+
323
+ ### Local Development
321
324
 
322
- # Run the generator locally
325
+ ```bash
326
+ # Run directly with Bun during development
323
327
  bun index.ts -i ./example/openapi.json -o ./output
324
328
  ```
325
329
 
326
- ### Building
330
+ ### Building for Production
331
+
332
+ ```bash
333
+ # Compile TypeScript to JavaScript
334
+ npm run build
335
+
336
+ # Test the compiled version
337
+ node dist/index.js --help
338
+ ```
327
339
 
328
- This project uses Bun as the runtime. No build step is necessary for development.
340
+ The build outputs JavaScript files to the `dist/` folder, which is what gets published to npm.
329
341
 
330
342
  ## How It Works
331
343
 
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Elysia OpenAPI Code Generator
4
+ * Generates typed React Query hooks from OpenAPI specifications.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
@@ -1,227 +1,125 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Elysia OpenAPI Code Generator
5
- * Generates typed React Query hooks from OpenAPI specifications.
6
- */
7
-
8
- import fs from 'fs';
9
- import path from 'path';
10
- import https from 'https';
11
- import http from 'http';
12
-
13
- interface OpenAPISpec {
14
- openapi: string;
15
- info: {
16
- title: string;
17
- version: string;
18
- [key: string]: unknown;
19
- };
20
- servers?: Array<{
21
- url: string;
22
- description?: string;
23
- }>;
24
- paths: Record<string, OpenAPIPathItem>;
25
- components?: {
26
- schemas?: Record<string, OpenAPISchema>;
27
- [key: string]: unknown;
28
- };
29
- [key: string]: unknown;
30
- }
31
-
32
- interface OpenAPIPathItem {
33
- get?: OpenAPIOperation;
34
- post?: OpenAPIOperation;
35
- put?: OpenAPIOperation;
36
- delete?: OpenAPIOperation;
37
- patch?: OpenAPIOperation;
38
- [key: string]: unknown;
39
- }
40
-
41
- interface OpenAPIOperation {
42
- operationId?: string;
43
- summary?: string;
44
- description?: string;
45
- parameters?: OpenAPIParameter[];
46
- responses?: Record<string, OpenAPIResponse>;
47
- requestBody?: {
48
- content: {
49
- [contentType: string]: {
50
- schema: OpenAPISchema;
51
- };
52
- };
53
- };
54
- [key: string]: unknown;
55
- }
56
-
57
- interface OpenAPIParameter {
58
- name: string;
59
- in: 'query' | 'header' | 'path' | 'cookie';
60
- description?: string;
61
- required?: boolean;
62
- schema?: OpenAPISchema;
63
- [key: string]: unknown;
64
- }
65
-
66
- interface OpenAPIResponse {
67
- description: string;
68
- content?: {
69
- [contentType: string]: {
70
- schema: OpenAPISchema;
71
- };
72
- };
73
- [key: string]: unknown;
74
- }
75
-
76
- interface OpenAPISchema {
77
- type?: string;
78
- items?: OpenAPISchema;
79
- properties?: Record<string, OpenAPISchema>;
80
- required?: string[];
81
- $ref?: string;
82
- nullable?: boolean;
83
- anyOf?: OpenAPISchema[];
84
- oneOf?: OpenAPISchema[];
85
- allOf?: OpenAPISchema[];
86
- [key: string]: unknown;
87
- }
88
-
89
- async function fetchSpec(source: string): Promise<OpenAPISpec> {
90
- if (source.startsWith('http://') || source.startsWith('https://')) {
91
- return new Promise((resolve, reject) => {
92
- const client = source.startsWith('https://') ? https : http;
93
- client.get(source, (res) => {
94
- let data = '';
95
- res.on('data', (chunk) => data += chunk);
96
- res.on('end', () => {
97
- try {
98
- resolve(JSON.parse(data) as OpenAPISpec);
99
- } catch (e) {
100
- reject(new Error(`Failed to parse OpenAPI spec: ${(e as Error).message}`));
101
- }
102
- });
103
- res.on('error', reject);
104
- });
105
- });
106
- }
107
-
108
- return JSON.parse(fs.readFileSync(source, 'utf8')) as OpenAPISpec;
109
- }
110
-
111
- function resolveType(schema?: OpenAPISchema): string {
112
- if (!schema) return 'any';
113
-
114
- if (schema.$ref) {
115
- return schema.$ref.split('/').pop() || 'any';
116
- }
117
-
118
- if (schema.type === 'array' && schema.items) {
119
- return `Array<${resolveType(schema.items)}>`;
120
- }
121
-
122
- if (schema.type === 'object') {
123
- if (!schema.properties) return 'Record<string, any>';
124
-
125
- const props = Object.entries(schema.properties).map(([key, prop]) => {
126
- const isRequired = schema.required?.includes(key);
127
- const optional = isRequired ? '' : '?';
128
- return ` ${key}${optional}: ${resolveType(prop)};`;
129
- });
130
-
131
- return `{\n${props.join('\n')}\n}`;
132
- }
133
-
134
- if (schema.anyOf || schema.oneOf) {
135
- return (schema.anyOf || schema.oneOf || []).map(resolveType).join(' | ');
136
- }
137
-
138
- if (schema.allOf) {
139
- return schema.allOf.map(resolveType).join(' & ');
140
- }
141
-
142
- if (schema.nullable) {
143
- return `${resolveType({ ...schema, nullable: false })} | null`;
144
- }
145
-
146
- const typeMap: Record<string, string> = {
147
- string: 'string',
148
- number: 'number',
149
- integer: 'number',
150
- boolean: 'boolean',
151
- null: 'null',
152
- };
153
-
154
- return (schema.type && typeMap[schema.type]) || 'any';
155
- }
156
-
157
- function generateTypes(spec: OpenAPISpec): string {
158
- const definitions: string[] = [];
159
-
160
- if (spec.components?.schemas) {
161
- for (const [name, schema] of Object.entries(spec.components.schemas)) {
162
- definitions.push(`export type ${name} = ${resolveType(schema)};`);
163
- }
164
- }
165
-
166
- for (const [pathUrl, pathItem] of Object.entries(spec.paths)) {
167
- for (const [method, operation] of Object.entries(pathItem)) {
168
- if (!['get', 'post', 'put', 'patch', 'delete'].includes(method)) continue;
169
-
170
- const op = operation as OpenAPIOperation;
171
- const opId = op.operationId || `${method}${pathUrl.replace(/[^a-zA-Z0-9]/g, '')}`;
172
- const response = op.responses?.['200'];
173
-
174
- if (response?.content?.['application/json']?.schema) {
175
- const responseType = resolveType(response.content['application/json'].schema);
176
- definitions.push(`export type ${capitalize(opId)}Response = ${responseType};`);
177
- }
178
-
179
- const params = op.parameters || [];
180
- if (params.length > 0) {
181
- const paramProps = params.map(param => {
182
- const required = param.required ? '' : '?';
183
- return ` ${param.name}${required}: ${resolveType(param.schema)};`;
184
- });
185
- definitions.push(`export type ${capitalize(opId)}Params = {\n${paramProps.join('\n')}\n};`);
186
- }
187
-
188
- if (op.requestBody?.content?.['application/json']?.schema) {
189
- const bodyType = resolveType(op.requestBody.content['application/json'].schema);
190
- definitions.push(`export type ${capitalize(opId)}Body = ${bodyType};`);
191
- }
192
- }
193
- }
194
-
195
- return definitions.join('\n\n');
196
- }
197
-
198
- function generateHooks(spec: OpenAPISpec): string {
199
- const hooks: string[] = [];
200
- const baseUrl = spec.servers?.[0]?.url || '';
201
-
202
- for (const [pathUrl, pathItem] of Object.entries(spec.paths)) {
203
- for (const [method, operation] of Object.entries(pathItem)) {
204
- if (!['get', 'post', 'put', 'patch', 'delete'].includes(method)) continue;
205
-
206
- const op = operation as OpenAPIOperation;
207
- const opId = op.operationId || `${method}${pathUrl.replace(/[^a-zA-Z0-9]/g, '')}`;
208
-
209
- const hasResponse = !!op.responses?.['200']?.content?.['application/json']?.schema;
210
- const responseType = hasResponse ? `${capitalize(opId)}Response` : 'any';
211
-
212
- const params = op.parameters || [];
213
- const hasParams = params.length > 0;
214
- const paramsType = hasParams ? `${capitalize(opId)}Params` : 'void';
215
-
216
- const hasBody = !!op.requestBody?.content?.['application/json']?.schema;
217
- const bodyType = hasBody ? `${capitalize(opId)}Body` : 'void';
218
-
219
- if (method === 'get') {
220
- const queryParams = params.map(p => p.name);
221
- const queryString = queryParams.length > 0
222
- ? `?${queryParams.map((p: string) => `\${params?.${p} !== undefined ? '${p}=' + params.${p} : ''}`).join('&')}`
223
- : '';
224
-
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Elysia OpenAPI Code Generator
4
+ * Generates typed React Query hooks from OpenAPI specifications.
5
+ */
6
+ import fs from 'fs';
7
+ import path from 'path';
8
+ import https from 'https';
9
+ import http from 'http';
10
+ async function fetchSpec(source) {
11
+ if (source.startsWith('http://') || source.startsWith('https://')) {
12
+ return new Promise((resolve, reject) => {
13
+ const client = source.startsWith('https://') ? https : http;
14
+ client.get(source, (res) => {
15
+ let data = '';
16
+ res.on('data', (chunk) => data += chunk.toString());
17
+ res.on('end', () => {
18
+ try {
19
+ resolve(JSON.parse(data));
20
+ }
21
+ catch (e) {
22
+ reject(new Error(`Failed to parse OpenAPI spec: ${e.message}`));
23
+ }
24
+ });
25
+ res.on('error', reject);
26
+ });
27
+ });
28
+ }
29
+ return JSON.parse(fs.readFileSync(source, 'utf8'));
30
+ }
31
+ function resolveType(schema) {
32
+ if (!schema)
33
+ return 'any';
34
+ if (schema.$ref) {
35
+ return schema.$ref.split('/').pop() || 'any';
36
+ }
37
+ if (schema.type === 'array' && schema.items) {
38
+ return `Array<${resolveType(schema.items)}>`;
39
+ }
40
+ if (schema.type === 'object') {
41
+ if (!schema.properties)
42
+ return 'Record<string, any>';
43
+ const props = Object.entries(schema.properties).map(([key, prop]) => {
44
+ const isRequired = schema.required?.includes(key);
45
+ const optional = isRequired ? '' : '?';
46
+ return ` ${key}${optional}: ${resolveType(prop)};`;
47
+ });
48
+ return `{\n${props.join('\n')}\n}`;
49
+ }
50
+ if (schema.anyOf || schema.oneOf) {
51
+ return (schema.anyOf || schema.oneOf || []).map(resolveType).join(' | ');
52
+ }
53
+ if (schema.allOf) {
54
+ return schema.allOf.map(resolveType).join(' & ');
55
+ }
56
+ if (schema.nullable) {
57
+ return `${resolveType({ ...schema, nullable: false })} | null`;
58
+ }
59
+ const typeMap = {
60
+ string: 'string',
61
+ number: 'number',
62
+ integer: 'number',
63
+ boolean: 'boolean',
64
+ null: 'null',
65
+ };
66
+ return (schema.type && typeMap[schema.type]) || 'any';
67
+ }
68
+ function generateTypes(spec) {
69
+ const definitions = [];
70
+ if (spec.components?.schemas) {
71
+ for (const [name, schema] of Object.entries(spec.components.schemas)) {
72
+ definitions.push(`export type ${name} = ${resolveType(schema)};`);
73
+ }
74
+ }
75
+ for (const [pathUrl, pathItem] of Object.entries(spec.paths)) {
76
+ for (const [method, operation] of Object.entries(pathItem)) {
77
+ if (!['get', 'post', 'put', 'patch', 'delete'].includes(method))
78
+ continue;
79
+ const op = operation;
80
+ const opId = op.operationId || `${method}${pathUrl.replace(/[^a-zA-Z0-9]/g, '')}`;
81
+ const response = op.responses?.['200'];
82
+ if (response?.content?.['application/json']?.schema) {
83
+ const responseType = resolveType(response.content['application/json'].schema);
84
+ definitions.push(`export type ${capitalize(opId)}Response = ${responseType};`);
85
+ }
86
+ const params = op.parameters || [];
87
+ if (params.length > 0) {
88
+ const paramProps = params.map(param => {
89
+ const required = param.required ? '' : '?';
90
+ return ` ${param.name}${required}: ${resolveType(param.schema)};`;
91
+ });
92
+ definitions.push(`export type ${capitalize(opId)}Params = {\n${paramProps.join('\n')}\n};`);
93
+ }
94
+ if (op.requestBody?.content?.['application/json']?.schema) {
95
+ const bodyType = resolveType(op.requestBody.content['application/json'].schema);
96
+ definitions.push(`export type ${capitalize(opId)}Body = ${bodyType};`);
97
+ }
98
+ }
99
+ }
100
+ return definitions.join('\n\n');
101
+ }
102
+ function generateHooks(spec) {
103
+ const hooks = [];
104
+ const baseUrl = spec.servers?.[0]?.url || '';
105
+ for (const [pathUrl, pathItem] of Object.entries(spec.paths)) {
106
+ for (const [method, operation] of Object.entries(pathItem)) {
107
+ if (!['get', 'post', 'put', 'patch', 'delete'].includes(method))
108
+ continue;
109
+ const op = operation;
110
+ const opId = op.operationId || `${method}${pathUrl.replace(/[^a-zA-Z0-9]/g, '')}`;
111
+ const hasResponse = !!op.responses?.['200']?.content?.['application/json']?.schema;
112
+ const responseType = hasResponse ? `${capitalize(opId)}Response` : 'any';
113
+ const params = op.parameters || [];
114
+ const hasParams = params.length > 0;
115
+ const paramsType = hasParams ? `${capitalize(opId)}Params` : 'void';
116
+ const hasBody = !!op.requestBody?.content?.['application/json']?.schema;
117
+ const bodyType = hasBody ? `${capitalize(opId)}Body` : 'void';
118
+ if (method === 'get') {
119
+ const queryParams = params.map(p => p.name);
120
+ const queryString = queryParams.length > 0
121
+ ? `?${queryParams.map((p) => `\${params?.${p} !== undefined ? '${p}=' + params.${p} : ''}`).join('&')}`
122
+ : '';
225
123
  hooks.push(`
226
124
  export const use${capitalize(opId)} = (
227
125
  params${hasParams ? '' : '?'}: ${paramsType},
@@ -236,21 +134,20 @@ export const use${capitalize(opId)} = (
236
134
  },
237
135
  ...options,
238
136
  });
239
- };`);
240
- } else {
241
- let inputType = 'void';
242
- let inputArg = '';
243
-
244
- if (hasBody) {
245
- inputType = bodyType;
246
- inputArg = 'body';
247
- } else if (hasParams) {
248
- inputType = paramsType;
249
- inputArg = 'params';
250
- }
251
-
252
- const hasInput = inputType !== 'void';
253
-
137
+ };`);
138
+ }
139
+ else {
140
+ let inputType = 'void';
141
+ let inputArg = '';
142
+ if (hasBody) {
143
+ inputType = bodyType;
144
+ inputArg = 'body';
145
+ }
146
+ else if (hasParams) {
147
+ inputType = paramsType;
148
+ inputArg = 'params';
149
+ }
150
+ const hasInput = inputType !== 'void';
254
151
  hooks.push(`
255
152
  export const use${capitalize(opId)} = (
256
153
  options?: UseMutationOptions<${responseType}, Error, ${inputType}>
@@ -267,53 +164,51 @@ export const use${capitalize(opId)} = (
267
164
  },
268
165
  ...options,
269
166
  });
270
- };`);
271
- }
272
- }
273
- }
274
-
275
- return hooks.join('\n');
276
- }
277
-
278
- function capitalize(str: string): string {
279
- return str.charAt(0).toUpperCase() + str.slice(1);
280
- }
281
-
282
- async function parseArgs() {
283
- const args = process.argv.slice(2);
284
- const config = {
285
- input: '',
286
- output: '',
287
- };
288
-
289
- for (let i = 0; i < args.length; i++) {
290
- const arg = args[i];
291
- if (!arg) continue;
292
-
293
- if (arg === '-i' || arg === '--input') {
294
- const value = args[++i];
295
- if (!value) {
296
- console.error(`Error: ${arg} flag requires a value`);
297
- process.exit(1);
298
- }
299
- config.input = value;
300
- } else if (arg === '-o' || arg === '--output') {
301
- const value = args[++i];
302
- if (!value) {
303
- console.error(`Error: ${arg} flag requires a value`);
304
- process.exit(1);
305
- }
306
- config.output = value;
307
- } else if (!arg.startsWith('-')) {
308
- if (!config.input) config.input = arg;
309
- else if (!config.output) config.output = arg;
310
- }
311
- }
312
-
313
- return config;
314
- }
315
-
316
- function showHelp() {
167
+ };`);
168
+ }
169
+ }
170
+ }
171
+ return hooks.join('\n');
172
+ }
173
+ function capitalize(str) {
174
+ return str.charAt(0).toUpperCase() + str.slice(1);
175
+ }
176
+ async function parseArgs() {
177
+ const args = process.argv.slice(2);
178
+ const config = {
179
+ input: '',
180
+ output: '',
181
+ };
182
+ for (let i = 0; i < args.length; i++) {
183
+ const arg = args[i];
184
+ if (!arg)
185
+ continue;
186
+ if (arg === '-i' || arg === '--input') {
187
+ const value = args[++i];
188
+ if (!value) {
189
+ console.error(`Error: ${arg} flag requires a value`);
190
+ process.exit(1);
191
+ }
192
+ config.input = value;
193
+ }
194
+ else if (arg === '-o' || arg === '--output') {
195
+ const value = args[++i];
196
+ if (!value) {
197
+ console.error(`Error: ${arg} flag requires a value`);
198
+ process.exit(1);
199
+ }
200
+ config.output = value;
201
+ }
202
+ else if (!arg.startsWith('-')) {
203
+ if (!config.input)
204
+ config.input = arg;
205
+ else if (!config.output)
206
+ config.output = arg;
207
+ }
208
+ }
209
+ return config;
210
+ }
211
+ function showHelp() {
317
212
  console.log(`
318
213
  Elysia OpenAPI Code Generator
319
214
  Generate React Query hooks and TypeScript types from OpenAPI specifications.
@@ -335,33 +230,26 @@ Examples:
335
230
  # Using positional arguments
336
231
  elysia-codegen https://api.example.com/openapi.json ./src/api
337
232
  elysia-codegen ./openapi.json ./generated
338
- `);
339
- }
340
-
341
- async function main() {
342
- const args = process.argv.slice(2);
343
-
344
- if (args.includes('-h') || args.includes('--help') || args.length === 0) {
345
- showHelp();
346
- process.exit(0);
347
- }
348
-
349
- const { input, output } = await parseArgs();
350
-
351
- if (!input || !output) {
352
- console.error('Error: Both input source and output directory are required.\n');
353
- showHelp();
354
- process.exit(1);
355
- }
356
-
357
- console.log('Fetching OpenAPI spec...');
358
-
359
- try {
360
- const spec = await fetchSpec(input);
361
- const types = generateTypes(spec);
362
- const hooks = generateHooks(spec);
363
- const baseUrl = spec.servers?.[0]?.url || '';
364
-
233
+ `);
234
+ }
235
+ async function main() {
236
+ const args = process.argv.slice(2);
237
+ if (args.includes('-h') || args.includes('--help') || args.length === 0) {
238
+ showHelp();
239
+ process.exit(0);
240
+ }
241
+ const { input, output } = await parseArgs();
242
+ if (!input || !output) {
243
+ console.error('Error: Both input source and output directory are required.\n');
244
+ showHelp();
245
+ process.exit(1);
246
+ }
247
+ console.log('Fetching OpenAPI spec...');
248
+ try {
249
+ const spec = await fetchSpec(input);
250
+ const types = generateTypes(spec);
251
+ const hooks = generateHooks(spec);
252
+ const baseUrl = spec.servers?.[0]?.url || '';
365
253
  const fileContent = `/* eslint-disable */
366
254
  /**
367
255
  * Auto-generated by Elysia OpenAPI Codegen
@@ -374,20 +262,18 @@ const baseUrl = '${baseUrl}';
374
262
  ${types}
375
263
 
376
264
  ${hooks}
377
- `;
378
-
379
- if (!fs.existsSync(output)) {
380
- fs.mkdirSync(output, { recursive: true });
381
- }
382
-
383
- const outputPath = path.join(output, 'generated.ts');
384
- fs.writeFileSync(outputPath, fileContent);
385
-
386
- console.log(`Successfully generated hooks at ${outputPath}`);
387
- } catch (err) {
388
- console.error('Generation failed:', err instanceof Error ? err.message : String(err));
389
- process.exit(1);
390
- }
391
- }
392
-
393
- main().catch(console.error);
265
+ `;
266
+ if (!fs.existsSync(output)) {
267
+ fs.mkdirSync(output, { recursive: true });
268
+ }
269
+ const outputPath = path.join(output, 'generated.ts');
270
+ fs.writeFileSync(outputPath, fileContent);
271
+ console.log(`Successfully generated hooks at ${outputPath}`);
272
+ }
273
+ catch (err) {
274
+ console.error('Generation failed:', err instanceof Error ? err.message : String(err));
275
+ process.exit(1);
276
+ }
277
+ }
278
+ main().catch(console.error);
279
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,16 +1,22 @@
1
1
  {
2
2
  "name": "elysia-openapi-codegen",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Generate React Query hooks and fully typed TypeScript interfaces from Elysia OpenAPI specs.",
5
- "module": "index.ts",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
6
8
  "type": "module",
7
9
  "bin": {
8
- "elysia-codegen": "./index.ts"
10
+ "elysia-codegen": "./dist/index.js"
9
11
  },
10
12
  "files": [
11
- "index.ts",
13
+ "dist",
12
14
  "README.md"
13
15
  ],
16
+ "scripts": {
17
+ "build": "tsc -p tsconfig.build.json",
18
+ "prepublishOnly": "npm run build"
19
+ },
14
20
  "author": "Khantamir mkhantamir77@gmail.com",
15
21
  "license": "MIT",
16
22
  "repository": {
@@ -30,7 +36,8 @@
30
36
  "tanstack-query"
31
37
  ],
32
38
  "devDependencies": {
33
- "@types/bun": "latest"
39
+ "@types/bun": "latest",
40
+ "typescript": "^5"
34
41
  },
35
42
  "peerDependencies": {
36
43
  "typescript": "^5"