react-query-lightbase-codegen 1.3.3 → 1.4.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/dist/importSpecs.d.ts +6 -2
- package/dist/importSpecs.js +99 -64
- package/dist/importSpecs.js.map +1 -1
- package/package.json +1 -1
- package/src/importSpecs.ts +123 -72
package/dist/importSpecs.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
export declare function importSpecs({ sourceDirectory, exportDirectory, apiDirectory, headerFilters, }: {
|
|
2
|
-
|
|
1
|
+
export declare function importSpecs({ sourceUrls, sourceDirectory, exportDirectory, apiDirectory, headerFilters, }: {
|
|
2
|
+
sourceUrls?: {
|
|
3
|
+
name: string;
|
|
4
|
+
url: string;
|
|
5
|
+
}[];
|
|
6
|
+
sourceDirectory?: string;
|
|
3
7
|
exportDirectory: string;
|
|
4
8
|
apiDirectory: string;
|
|
5
9
|
headerFilters?: string[];
|
package/dist/importSpecs.js
CHANGED
|
@@ -6,76 +6,111 @@ import { convertSwaggerFile } from './convertSwaggerFile.js';
|
|
|
6
6
|
import { createHook } from './generateHooks.js';
|
|
7
7
|
import { generateImports } from './generateImports.js';
|
|
8
8
|
import { generateSchemas } from './generateSchemas.js';
|
|
9
|
-
export function importSpecs({ sourceDirectory, exportDirectory, apiDirectory, headerFilters, }) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
filenames.forEach(async (filename) => {
|
|
9
|
+
export function importSpecs({ sourceUrls, sourceDirectory, exportDirectory, apiDirectory, headerFilters, }) {
|
|
10
|
+
if (sourceUrls) {
|
|
11
|
+
sourceUrls.forEach(async (d) => {
|
|
12
|
+
const data = await fetch(d.url).then((res) => res.text());
|
|
13
|
+
// data response is raw text, check if it is yaml or json
|
|
14
|
+
let isYaml = true;
|
|
16
15
|
try {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const format = ['.yaml', '.yml'].includes(ext.toLowerCase()) ? 'yaml' : 'json';
|
|
20
|
-
let spec = await convertSwaggerFile(data, format);
|
|
21
|
-
const formattedFileName = Case.camel(`useQueries, ${filename.split('.')[0]}`);
|
|
22
|
-
const schemaName = `${formattedFileName}.schema`;
|
|
23
|
-
const hooksName = `${formattedFileName}`;
|
|
24
|
-
const name = filename.split('.')[0];
|
|
25
|
-
mkdirSync(join(process.cwd(), `${exportDirectory}/${name}`), { recursive: true });
|
|
26
|
-
const operationIds = [];
|
|
27
|
-
let hooks = '';
|
|
28
|
-
let schemaImportsArray = [];
|
|
29
|
-
let collectedQueryImports = [];
|
|
30
|
-
Object.entries(spec.paths).forEach(([route, verbs]) => {
|
|
31
|
-
Object.entries(verbs).forEach(([verb, operation]) => {
|
|
32
|
-
if (['get', 'post', 'patch', 'put', 'delete'].includes(verb) && !operation.deprecated) {
|
|
33
|
-
const { implementation, imports, queryImports } = createHook({
|
|
34
|
-
operation,
|
|
35
|
-
verb,
|
|
36
|
-
route: (spec.basePath || '') + route,
|
|
37
|
-
operationIds,
|
|
38
|
-
parameters: verbs.parameters,
|
|
39
|
-
schemasComponents: spec.components,
|
|
40
|
-
headerFilters,
|
|
41
|
-
});
|
|
42
|
-
hooks += implementation;
|
|
43
|
-
imports.forEach((element) => {
|
|
44
|
-
const formattedImport = element.replace('[]', '');
|
|
45
|
-
if (!schemaImportsArray.includes(formattedImport) &&
|
|
46
|
-
element !== 'void' &&
|
|
47
|
-
element !== 'string' &&
|
|
48
|
-
!element.includes('{') &&
|
|
49
|
-
!element.includes('unknown')) {
|
|
50
|
-
schemaImportsArray.push(formattedImport);
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
queryImports.forEach((element) => {
|
|
54
|
-
if (!schemaImportsArray.includes(element)) {
|
|
55
|
-
collectedQueryImports.push(element);
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
const imports = generateImports({
|
|
62
|
-
apiDirectory,
|
|
63
|
-
schemaName,
|
|
64
|
-
schemaImports: schemaImportsArray,
|
|
65
|
-
queryImports: collectedQueryImports,
|
|
66
|
-
});
|
|
67
|
-
writeFileSync(join(process.cwd(), `${exportDirectory}/${name}/${hooksName}.tsx`), imports + hooks);
|
|
68
|
-
writeFileSync(join(process.cwd(), `${exportDirectory}/${name}/${schemaName}.tsx`), generateSchemas({ spec }));
|
|
69
|
-
console.log(chalk.green(`🎉 [${filename}] Your OpenAPI spec has been converted into react query hooks`));
|
|
16
|
+
JSON.parse(data);
|
|
17
|
+
isYaml = false;
|
|
70
18
|
}
|
|
71
19
|
catch (error) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
const format = isYaml ? 'yaml' : 'json';
|
|
23
|
+
make({
|
|
24
|
+
data,
|
|
25
|
+
format,
|
|
26
|
+
filename: d.name,
|
|
27
|
+
exportDirectory,
|
|
28
|
+
headerFilters,
|
|
29
|
+
apiDirectory,
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
if (sourceDirectory) {
|
|
34
|
+
readdir(sourceDirectory, async (err, filenames) => {
|
|
35
|
+
if (err) {
|
|
36
|
+
console.log(err);
|
|
37
|
+
throw err;
|
|
38
|
+
}
|
|
39
|
+
filenames.forEach(async (filename) => {
|
|
40
|
+
try {
|
|
41
|
+
const data = readFileSync(join(process.cwd(), sourceDirectory + '/' + filename), 'utf-8');
|
|
42
|
+
const { ext } = parse(sourceDirectory + '/' + filename);
|
|
43
|
+
const format = ['.yaml', '.yml'].includes(ext.toLowerCase()) ? 'yaml' : 'json';
|
|
44
|
+
make({
|
|
45
|
+
data,
|
|
46
|
+
format,
|
|
47
|
+
filename,
|
|
48
|
+
exportDirectory,
|
|
49
|
+
headerFilters,
|
|
50
|
+
apiDirectory,
|
|
51
|
+
});
|
|
75
52
|
}
|
|
76
|
-
|
|
53
|
+
catch (error) {
|
|
54
|
+
if (error.code === 'EISDIR') {
|
|
55
|
+
console.log(chalk.red('nested folder structure not supported'));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
console.log(chalk.red(`[${filename}]:`), chalk.red(error));
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async function make({ data, format, filename, exportDirectory, headerFilters, apiDirectory, }) {
|
|
65
|
+
let spec = await convertSwaggerFile(data, format);
|
|
66
|
+
const formattedFileName = Case.camel(`useQueries, ${filename.split('.')[0]}`);
|
|
67
|
+
const schemaName = `${formattedFileName}.schema`;
|
|
68
|
+
const hooksName = `${formattedFileName}`;
|
|
69
|
+
const name = filename.split('.')[0];
|
|
70
|
+
mkdirSync(join(process.cwd(), `${exportDirectory}/${name}`), { recursive: true });
|
|
71
|
+
const operationIds = [];
|
|
72
|
+
let hooks = '';
|
|
73
|
+
let schemaImportsArray = [];
|
|
74
|
+
let collectedQueryImports = [];
|
|
75
|
+
Object.entries(spec.paths).forEach(([route, verbs]) => {
|
|
76
|
+
Object.entries(verbs).forEach(([verb, operation]) => {
|
|
77
|
+
if (['get', 'post', 'patch', 'put', 'delete'].includes(verb) && !operation.deprecated) {
|
|
78
|
+
const { implementation, imports, queryImports } = createHook({
|
|
79
|
+
operation,
|
|
80
|
+
verb,
|
|
81
|
+
route: (spec.basePath || '') + route,
|
|
82
|
+
operationIds,
|
|
83
|
+
parameters: verbs.parameters,
|
|
84
|
+
schemasComponents: spec.components,
|
|
85
|
+
headerFilters,
|
|
86
|
+
});
|
|
87
|
+
hooks += implementation;
|
|
88
|
+
imports.forEach((element) => {
|
|
89
|
+
const formattedImport = element.replace('[]', '');
|
|
90
|
+
if (!schemaImportsArray.includes(formattedImport) &&
|
|
91
|
+
element !== 'void' &&
|
|
92
|
+
element !== 'string' &&
|
|
93
|
+
!element.includes('{') &&
|
|
94
|
+
!element.includes('unknown')) {
|
|
95
|
+
schemaImportsArray.push(formattedImport);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
queryImports.forEach((element) => {
|
|
99
|
+
if (!schemaImportsArray.includes(element)) {
|
|
100
|
+
collectedQueryImports.push(element);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
77
103
|
}
|
|
78
104
|
});
|
|
79
105
|
});
|
|
106
|
+
const imports = generateImports({
|
|
107
|
+
apiDirectory,
|
|
108
|
+
schemaName,
|
|
109
|
+
schemaImports: schemaImportsArray,
|
|
110
|
+
queryImports: collectedQueryImports,
|
|
111
|
+
});
|
|
112
|
+
writeFileSync(join(process.cwd(), `${exportDirectory}/${name}/${hooksName}.tsx`), imports + hooks);
|
|
113
|
+
writeFileSync(join(process.cwd(), `${exportDirectory}/${name}/${schemaName}.tsx`), generateSchemas({ spec }));
|
|
114
|
+
console.log(chalk.green(`🎉 [${filename}] Your OpenAPI spec has been converted into react query hooks`));
|
|
80
115
|
}
|
|
81
116
|
//# sourceMappingURL=importSpecs.js.map
|
package/dist/importSpecs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importSpecs.js","sourceRoot":"","sources":["../src/importSpecs.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAErE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,UAAU,WAAW,CAAC,EAC1B,eAAe,EACf,eAAe,EACf,YAAY,EACZ,aAAa,
|
|
1
|
+
{"version":3,"file":"importSpecs.js","sourceRoot":"","sources":["../src/importSpecs.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/importSpecs.ts
CHANGED
|
@@ -9,98 +9,149 @@ import { generateImports } from './generateImports.js';
|
|
|
9
9
|
import { generateSchemas } from './generateSchemas.js';
|
|
10
10
|
|
|
11
11
|
export function importSpecs({
|
|
12
|
+
sourceUrls,
|
|
12
13
|
sourceDirectory,
|
|
13
14
|
exportDirectory,
|
|
14
15
|
apiDirectory,
|
|
15
16
|
headerFilters,
|
|
16
17
|
}: {
|
|
17
|
-
|
|
18
|
+
sourceUrls?: { name: string; url: string }[];
|
|
19
|
+
sourceDirectory?: string;
|
|
18
20
|
exportDirectory: string;
|
|
19
21
|
apiDirectory: string;
|
|
20
22
|
headerFilters?: string[];
|
|
21
23
|
}) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
filenames.forEach(async (filename) => {
|
|
24
|
+
if (sourceUrls) {
|
|
25
|
+
sourceUrls.forEach(async (d) => {
|
|
26
|
+
const data = await fetch(d.url).then((res) => res.text());
|
|
27
|
+
// data response is raw text, check if it is yaml or json
|
|
28
|
+
let isYaml = true;
|
|
28
29
|
try {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
JSON.parse(data);
|
|
31
|
+
isYaml = false;
|
|
32
|
+
} catch (error) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
33
35
|
|
|
34
|
-
|
|
35
|
-
const schemaName = `${formattedFileName}.schema`;
|
|
36
|
-
const hooksName = `${formattedFileName}`;
|
|
37
|
-
const name = filename.split('.')[0];
|
|
38
|
-
mkdirSync(join(process.cwd(), `${exportDirectory}/${name}`), { recursive: true });
|
|
36
|
+
const format = isYaml ? 'yaml' : 'json';
|
|
39
37
|
|
|
40
|
-
|
|
38
|
+
make({
|
|
39
|
+
data,
|
|
40
|
+
format,
|
|
41
|
+
filename: d.name,
|
|
42
|
+
exportDirectory,
|
|
43
|
+
headerFilters,
|
|
44
|
+
apiDirectory,
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
if (sourceDirectory) {
|
|
49
|
+
readdir(sourceDirectory, async (err, filenames) => {
|
|
50
|
+
if (err) {
|
|
51
|
+
console.log(err);
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
54
|
+
filenames.forEach(async (filename) => {
|
|
55
|
+
try {
|
|
56
|
+
const data = readFileSync(join(process.cwd(), sourceDirectory + '/' + filename), 'utf-8');
|
|
57
|
+
const { ext } = parse(sourceDirectory + '/' + filename);
|
|
58
|
+
const format = ['.yaml', '.yml'].includes(ext.toLowerCase()) ? 'yaml' : 'json';
|
|
59
|
+
make({
|
|
60
|
+
data,
|
|
61
|
+
format,
|
|
62
|
+
filename,
|
|
63
|
+
exportDirectory,
|
|
64
|
+
headerFilters,
|
|
65
|
+
apiDirectory,
|
|
66
|
+
});
|
|
67
|
+
} catch (error) {
|
|
68
|
+
if ((error as any).code === 'EISDIR') {
|
|
69
|
+
console.log(chalk.red('nested folder structure not supported'));
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
console.log(chalk.red(`[${filename}]:`), chalk.red(error));
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
41
78
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
79
|
+
async function make({
|
|
80
|
+
data,
|
|
81
|
+
format,
|
|
82
|
+
filename,
|
|
83
|
+
exportDirectory,
|
|
84
|
+
headerFilters,
|
|
85
|
+
apiDirectory,
|
|
86
|
+
}: {
|
|
87
|
+
data: string;
|
|
88
|
+
format: 'yaml' | 'json';
|
|
89
|
+
filename: string;
|
|
90
|
+
exportDirectory: string;
|
|
91
|
+
headerFilters?: string[];
|
|
92
|
+
apiDirectory: string;
|
|
93
|
+
}) {
|
|
94
|
+
let spec = await convertSwaggerFile(data, format);
|
|
57
95
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
96
|
+
const formattedFileName = Case.camel(`useQueries, ${filename.split('.')[0]}`);
|
|
97
|
+
const schemaName = `${formattedFileName}.schema`;
|
|
98
|
+
const hooksName = `${formattedFileName}`;
|
|
99
|
+
const name = filename.split('.')[0];
|
|
100
|
+
mkdirSync(join(process.cwd(), `${exportDirectory}/${name}`), { recursive: true });
|
|
61
101
|
|
|
62
|
-
|
|
63
|
-
!schemaImportsArray.includes(formattedImport) &&
|
|
64
|
-
element !== 'void' &&
|
|
65
|
-
element !== 'string' &&
|
|
66
|
-
!element.includes('{') &&
|
|
67
|
-
!element.includes('unknown')
|
|
68
|
-
) {
|
|
69
|
-
schemaImportsArray.push(formattedImport);
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
queryImports.forEach((element) => {
|
|
73
|
-
if (!schemaImportsArray.includes(element)) {
|
|
74
|
-
collectedQueryImports.push(element);
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
});
|
|
102
|
+
const operationIds: string[] = [];
|
|
80
103
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
104
|
+
let hooks = '';
|
|
105
|
+
let schemaImportsArray = [] as string[];
|
|
106
|
+
let collectedQueryImports = [] as ('query' | 'mutation' | 'infiniteQuery')[];
|
|
107
|
+
Object.entries(spec.paths).forEach(([route, verbs]: [string, PathItemObject]) => {
|
|
108
|
+
Object.entries(verbs).forEach(([verb, operation]: [string, OperationObject]) => {
|
|
109
|
+
if (['get', 'post', 'patch', 'put', 'delete'].includes(verb) && !operation.deprecated) {
|
|
110
|
+
const { implementation, imports, queryImports } = createHook({
|
|
111
|
+
operation,
|
|
112
|
+
verb,
|
|
113
|
+
route: (spec.basePath || '') + route,
|
|
114
|
+
operationIds,
|
|
115
|
+
parameters: verbs.parameters,
|
|
116
|
+
schemasComponents: spec.components,
|
|
117
|
+
headerFilters,
|
|
86
118
|
});
|
|
87
119
|
|
|
88
|
-
|
|
120
|
+
hooks += implementation;
|
|
121
|
+
imports.forEach((element) => {
|
|
122
|
+
const formattedImport = element.replace('[]', '');
|
|
89
123
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
124
|
+
if (
|
|
125
|
+
!schemaImportsArray.includes(formattedImport) &&
|
|
126
|
+
element !== 'void' &&
|
|
127
|
+
element !== 'string' &&
|
|
128
|
+
!element.includes('{') &&
|
|
129
|
+
!element.includes('unknown')
|
|
130
|
+
) {
|
|
131
|
+
schemaImportsArray.push(formattedImport);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
queryImports.forEach((element) => {
|
|
135
|
+
if (!schemaImportsArray.includes(element)) {
|
|
136
|
+
collectedQueryImports.push(element);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
103
139
|
}
|
|
104
140
|
});
|
|
105
141
|
});
|
|
142
|
+
|
|
143
|
+
const imports = generateImports({
|
|
144
|
+
apiDirectory,
|
|
145
|
+
schemaName,
|
|
146
|
+
schemaImports: schemaImportsArray,
|
|
147
|
+
queryImports: collectedQueryImports,
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
writeFileSync(join(process.cwd(), `${exportDirectory}/${name}/${hooksName}.tsx`), imports + hooks);
|
|
151
|
+
|
|
152
|
+
writeFileSync(
|
|
153
|
+
join(process.cwd(), `${exportDirectory}/${name}/${schemaName}.tsx`),
|
|
154
|
+
generateSchemas({ spec })
|
|
155
|
+
);
|
|
156
|
+
console.log(chalk.green(`🎉 [${filename}] Your OpenAPI spec has been converted into react query hooks`));
|
|
106
157
|
}
|