Skip to content

Commit fe18f76

Browse files
committed
Adds cool react hooks generators
1 parent 3331563 commit fe18f76

20 files changed

+344
-33
lines changed

.editorconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ charset = utf-8
66
trim_trailing_whitespace = true
77
insert_final_newline = true
88
indent_style = space
9-
indent_size = 4
9+
indent_size = 2

.prettierrc.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"semi": true,
33
"singleQuote": true,
4-
"trailingComma": "es5",
4+
"trailingComma": "all",
55
"arrowParens": "avoid",
66
"printWidth": 120,
7-
"tabWidth": 4
7+
"tabWidth": 2
88
}

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,9 @@
6666
"form-data": "^4.0.0",
6767
"handlebars": "^4.7.6",
6868
"json-schema-ref-parser": "^9.0.7",
69-
"node-fetch": "^2.6.6"
69+
"node-fetch": "^2.6.6",
70+
"react": "^17.0.2",
71+
"react-query": "^3.34.8"
7072
},
7173
"devDependencies": {
7274
"@babel/cli": "7.16.7",
@@ -81,6 +83,7 @@
8183
"@types/jest": "27.4.0",
8284
"@types/node": "17.0.8",
8385
"@types/qs": "6.9.7",
86+
"@types/react": "^17.0.38",
8487
"@typescript-eslint/eslint-plugin": "5.9.0",
8588
"@typescript-eslint/parser": "5.9.0",
8689
"codecov": "3.8.3",

rollup.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ const handlebarsPlugin = () => ({
2828
preventIndent: true,
2929
knownHelpersOnly: true,
3030
knownHelpers: {
31+
capitalize: true,
3132
equals: true,
3233
notEquals: true,
3334
containsSpaces: true,

samples/codegen.sh

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
#!/bin/sh
22

33
rm -rf dist
4-
rm swagger-codegen-cli-v2.jar
5-
rm swagger-codegen-cli-v3.jar
4+
#rm swagger-codegen-cli-v2.jar
5+
#rm swagger-codegen-cli-v3.jar
6+
#
7+
#curl https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/2.4.15/swagger-codegen-cli-2.4.15.jar -o swagger-codegen-cli-v2.jar
8+
#curl https://repo1.maven.org/maven2/io/swagger/codegen/v3/swagger-codegen-cli/3.0.21/swagger-codegen-cli-3.0.21.jar -o swagger-codegen-cli-v3.jar
9+
#
10+
#java -jar ./swagger-codegen-cli-v2.jar generate -i spec/v2.json -l typescript-aurelia -o generated/v2/typescript-aurelia/
11+
#java -jar ./swagger-codegen-cli-v2.jar generate -i spec/v2.json -l typescript-angular -o generated/v2/typescript-angular/
12+
#java -jar ./swagger-codegen-cli-v2.jar generate -i spec/v2.json -l typescript-inversify -o generated/v2/typescript-inversify/
13+
#java -jar ./swagger-codegen-cli-v2.jar generate -i spec/v2.json -l typescript-fetch -o generated/v2/typescript-fetch/
14+
#java -jar ./swagger-codegen-cli-v2.jar generate -i spec/v2.json -l typescript-jquery -o generated/v2/typescript-jquery/
15+
#java -jar ./swagger-codegen-cli-v2.jar generate -i spec/v2.json -l typescript-node -o generated/v2/typescript-node/
16+
#
17+
#java -jar ./swagger-codegen-cli-v3.jar generate -i spec/v3.json -l typescript-angular -o generated/v3/typescript-angular/
18+
#java -jar ./swagger-codegen-cli-v3.jar generate -i spec/v3.json -l typescript-fetch -o generated/v3/typescript-fetch/
619

7-
curl https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/2.4.15/swagger-codegen-cli-2.4.15.jar -o swagger-codegen-cli-v2.jar
8-
curl https://repo1.maven.org/maven2/io/swagger/codegen/v3/swagger-codegen-cli/3.0.21/swagger-codegen-cli-3.0.21.jar -o swagger-codegen-cli-v3.jar
9-
10-
java -jar ./swagger-codegen-cli-v2.jar generate -i spec/v2.json -l typescript-aurelia -o generated/v2/typescript-aurelia/
11-
java -jar ./swagger-codegen-cli-v2.jar generate -i spec/v2.json -l typescript-angular -o generated/v2/typescript-angular/
12-
java -jar ./swagger-codegen-cli-v2.jar generate -i spec/v2.json -l typescript-inversify -o generated/v2/typescript-inversify/
13-
java -jar ./swagger-codegen-cli-v2.jar generate -i spec/v2.json -l typescript-fetch -o generated/v2/typescript-fetch/
14-
java -jar ./swagger-codegen-cli-v2.jar generate -i spec/v2.json -l typescript-jquery -o generated/v2/typescript-jquery/
15-
java -jar ./swagger-codegen-cli-v2.jar generate -i spec/v2.json -l typescript-node -o generated/v2/typescript-node/
16-
17-
java -jar ./swagger-codegen-cli-v3.jar generate -i spec/v3.json -l typescript-angular -o generated/v3/typescript-angular/
18-
java -jar ./swagger-codegen-cli-v3.jar generate -i spec/v3.json -l typescript-fetch -o generated/v3/typescript-fetch/
19-
20-
node ../bin/index.js --input spec/v2.json --output generated/v2/openapi-typescript-codegen/
21-
node ../bin/index.js --input spec/v3.json --output generated/v3/openapi-typescript-codegen/
20+
#node ../bin/index.js --input spec/v2.json --output generated/v2/openapi-typescript-codegen/
21+
node ../bin/index.js --input spec/v3.json --output generated/v3/openapi-typescript-codegen/ -c axios --exportClient true --name TestClient --useOptions --exportModels true --exportSchemas true

src/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export type Options = {
1717
useOptions?: boolean;
1818
useUnionTypes?: boolean;
1919
exportCore?: boolean;
20+
exportHooks?: boolean;
2021
exportServices?: boolean;
2122
exportModels?: boolean;
2223
exportSchemas?: boolean;
@@ -56,6 +57,7 @@ export async function generate({
5657
exportServices = true,
5758
exportModels = true,
5859
exportSchemas = false,
60+
exportHooks = false,
5961
postfix = 'Service',
6062
exportClient = false,
6163
clientName = 'AppClient',
@@ -83,6 +85,7 @@ export async function generate({
8385
useOptions,
8486
useUnionTypes,
8587
exportCore,
88+
exportHooks,
8689
exportServices,
8790
exportModels,
8891
exportSchemas,
@@ -109,6 +112,7 @@ export async function generate({
109112
exportServices,
110113
exportModels,
111114
exportSchemas,
115+
exportHooks,
112116
postfix,
113117
exportClient,
114118
clientName,

src/openApi/v3/parser/getContent.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export interface Content {
1212
const BASIC_MEDIA_TYPES = [
1313
'application/json-patch+json',
1414
'application/json',
15+
'application/octet-stream',
1516
'application/x-www-form-urlencoded',
1617
'text/json',
1718
'text/plain',

src/templates/exportContext.hbs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{{>header}}
2+
3+
import {
4+
createContext,
5+
useContext,
6+
createElement,
7+
ReactElement,
8+
} from 'react';
9+
import { {{{clientName}}} } from '../client';
10+
11+
type ProviderProps<T> = {
12+
children: ReactElement;
13+
client: T;
14+
};
15+
16+
const {{{clientName}}}Context = createContext<{{{clientName}}} | null>(null);
17+
{{{clientName}}}Context.displayName = '{{{clientName}}}Context';
18+
19+
export const {{{clientName}}}Provider = ({ children, client }: ProviderProps<{{{clientName}}} | null>) =>
20+
createElement({{{clientName}}}Context.Provider, { children, value: client });
21+
22+
export const use{{{clientName}}} = () => useContext({{{clientName}}}Context);

src/templates/exportHooks.hbs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{{>header}}
2+
3+
4+
import { ApiError } from '../core/ApiError';
5+
{{#if imports}}
6+
{{#each imports}}
7+
import type { {{{this}}} } from '../models/{{{this}}}';
8+
{{/each}}
9+
{{/if}}
10+
import { {{{@root.clientName}}} } from '../client';
11+
import { use{{{clientName}}} } from './context';
12+
import { useQuery } from 'react-query';
13+
{{#each operations}}
14+
{{~#equals method "GET"}}
15+
16+
export function use{{{capitalize name}}}({{>parameters}}): {{>result}} {
17+
const client = use{{{../clientName}}}() as {{{@root.clientName}}};
18+
return useQuery<{{>result}}, ApiError>([
19+
{{#each ../imports}}
20+
'{{{this}}}',
21+
{{/each}}
22+
'{{{name}}}', {{>passParameters}}],
23+
async () => await client?.{{{../shortName}}}.{{{name}}}({{>passParameters}}) ?? null,
24+
{ suspense: true, useErrorBoundary: true }
25+
).data as {{>result}};
26+
}
27+
{{~#equals 1 1}}
28+
29+
{{/equals}}
30+
{{~/equals~}}
31+
{{/each}}

src/templates/index.hbs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,19 @@ export { {{{name}}}{{{@root.postfix}}} } from './services/{{{name}}}{{{@root.pos
4646
{{/if}}
4747
{{/if}}
4848

49+
{{#if @root.exportHooks}}
50+
export { {{{clientName}}}Provider, use{{{clientName}}} } from './react/context';
51+
{{#each services}}
52+
export {
53+
{{#each operations}}
54+
{{~#equals method 'GET'}}
55+
use{{{capitalize name}}},
56+
{{/equals}}
57+
{{/each}}
58+
} from './react/use{{{capitalize name}}}{{{@root.postfix}}}';
59+
{{/each}}
60+
{{/if}}
61+
4962
{{#if @root.exportClient}}
5063
export { {{{clientName}}} } from './client';
5164
{{/if}}

0 commit comments

Comments
 (0)