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.
@@ -1,5 +1,9 @@
1
- export declare function importSpecs({ sourceDirectory, exportDirectory, apiDirectory, headerFilters, }: {
2
- sourceDirectory: string;
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[];
@@ -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
- readdir(sourceDirectory, async (err, filenames) => {
11
- if (err) {
12
- console.log(err);
13
- throw err;
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
- const data = readFileSync(join(process.cwd(), sourceDirectory + '/' + filename), 'utf-8');
18
- const { ext } = parse(sourceDirectory + '/' + filename);
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
- if (error.code === 'EISDIR') {
73
- console.log(chalk.red('nested folder structure not supported'));
74
- return;
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
- console.log(chalk.red(`[${filename}]:`), chalk.red(error));
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
@@ -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,GAMd;IACC,OAAO,CAAC,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;QAChD,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjB,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YACnC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC1F,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,eAAe,GAAG,GAAG,GAAG,QAAQ,CAAC,CAAC;gBACxD,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC/E,IAAI,IAAI,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAElD,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC9E,MAAM,UAAU,GAAG,GAAG,iBAAiB,SAAS,CAAC;gBACjD,MAAM,SAAS,GAAG,GAAG,iBAAiB,EAAE,CAAC;gBACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,eAAe,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAElF,MAAM,YAAY,GAAa,EAAE,CAAC;gBAElC,IAAI,KAAK,GAAG,EAAE,CAAC;gBACf,IAAI,kBAAkB,GAAG,EAAc,CAAC;gBACxC,IAAI,qBAAqB,GAAG,EAAgD,CAAC;gBAC7E,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAA2B,EAAE,EAAE;oBAC9E,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAA4B,EAAE,EAAE;wBAC7E,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;4BACtF,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,UAAU,CAAC;gCAC3D,SAAS;gCACT,IAAI;gCACJ,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,KAAK;gCACpC,YAAY;gCACZ,UAAU,EAAE,KAAK,CAAC,UAAU;gCAC5B,iBAAiB,EAAE,IAAI,CAAC,UAAU;gCAClC,aAAa;6BACd,CAAC,CAAC;4BAEH,KAAK,IAAI,cAAc,CAAC;4BACxB,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gCAC1B,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gCAElD,IACE,CAAC,kBAAkB,CAAC,QAAQ,CAAC,eAAe,CAAC;oCAC7C,OAAO,KAAK,MAAM;oCAClB,OAAO,KAAK,QAAQ;oCACpB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;oCACtB,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAC5B,CAAC;oCACD,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gCAC3C,CAAC;4BACH,CAAC,CAAC,CAAC;4BACH,YAAY,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gCAC/B,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oCAC1C,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gCACtC,CAAC;4BACH,CAAC,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,MAAM,OAAO,GAAG,eAAe,CAAC;oBAC9B,YAAY;oBACZ,UAAU;oBACV,aAAa,EAAE,kBAAkB;oBACjC,YAAY,EAAE,qBAAqB;iBACpC,CAAC,CAAC;gBAEH,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,eAAe,IAAI,IAAI,IAAI,SAAS,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC;gBAEnG,aAAa,CACX,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,eAAe,IAAI,IAAI,IAAI,UAAU,MAAM,CAAC,EACnE,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,CAC1B,CAAC;gBACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,OAAO,QAAQ,+DAA+D,CAAC,CAC5F,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAK,KAAa,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC,CAAC;oBAChE,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"importSpecs.js","sourceRoot":"","sources":["../src/importSpecs.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-query-lightbase-codegen",
3
3
  "description": "Fully typed react query code generation tool based on openApi specifications",
4
- "version": "1.3.3",
4
+ "version": "1.4.0",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "exports": "./dist/index.js",
@@ -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
- sourceDirectory: string;
18
+ sourceUrls?: { name: string; url: string }[];
19
+ sourceDirectory?: string;
18
20
  exportDirectory: string;
19
21
  apiDirectory: string;
20
22
  headerFilters?: string[];
21
23
  }) {
22
- readdir(sourceDirectory, async (err, filenames) => {
23
- if (err) {
24
- console.log(err);
25
- throw err;
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
- const data = readFileSync(join(process.cwd(), sourceDirectory + '/' + filename), 'utf-8');
30
- const { ext } = parse(sourceDirectory + '/' + filename);
31
- const format = ['.yaml', '.yml'].includes(ext.toLowerCase()) ? 'yaml' : 'json';
32
- let spec = await convertSwaggerFile(data, format);
30
+ JSON.parse(data);
31
+ isYaml = false;
32
+ } catch (error) {
33
+ return false;
34
+ }
33
35
 
34
- const formattedFileName = Case.camel(`useQueries, ${filename.split('.')[0]}`);
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
- const operationIds: string[] = [];
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
- let hooks = '';
43
- let schemaImportsArray = [] as string[];
44
- let collectedQueryImports = [] as ('query' | 'mutation' | 'infiniteQuery')[];
45
- Object.entries(spec.paths).forEach(([route, verbs]: [string, PathItemObject]) => {
46
- Object.entries(verbs).forEach(([verb, operation]: [string, OperationObject]) => {
47
- if (['get', 'post', 'patch', 'put', 'delete'].includes(verb) && !operation.deprecated) {
48
- const { implementation, imports, queryImports } = createHook({
49
- operation,
50
- verb,
51
- route: (spec.basePath || '') + route,
52
- operationIds,
53
- parameters: verbs.parameters,
54
- schemasComponents: spec.components,
55
- headerFilters,
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
- hooks += implementation;
59
- imports.forEach((element) => {
60
- const formattedImport = element.replace('[]', '');
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
- if (
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
- const imports = generateImports({
82
- apiDirectory,
83
- schemaName,
84
- schemaImports: schemaImportsArray,
85
- queryImports: collectedQueryImports,
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
- writeFileSync(join(process.cwd(), `${exportDirectory}/${name}/${hooksName}.tsx`), imports + hooks);
120
+ hooks += implementation;
121
+ imports.forEach((element) => {
122
+ const formattedImport = element.replace('[]', '');
89
123
 
90
- writeFileSync(
91
- join(process.cwd(), `${exportDirectory}/${name}/${schemaName}.tsx`),
92
- generateSchemas({ spec })
93
- );
94
- console.log(
95
- chalk.green(`🎉 [${filename}] Your OpenAPI spec has been converted into react query hooks`)
96
- );
97
- } catch (error) {
98
- if ((error as any).code === 'EISDIR') {
99
- console.log(chalk.red('nested folder structure not supported'));
100
- return;
101
- }
102
- console.log(chalk.red(`[${filename}]:`), chalk.red(error));
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
  }