react-query-lightbase-codegen 1.6.3 → 2.0.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.
Files changed (52) hide show
  1. package/dist/config/loadConfig.d.ts +2 -0
  2. package/dist/config/loadConfig.js +24 -0
  3. package/dist/generator/clientGenerator.d.ts +13 -0
  4. package/dist/generator/clientGenerator.js +199 -0
  5. package/dist/generator/instanceGenerator.d.ts +1 -0
  6. package/dist/generator/instanceGenerator.js +21 -0
  7. package/dist/generator/reactQueryGenerator.d.ts +2 -0
  8. package/dist/generator/reactQueryGenerator.js +82 -0
  9. package/dist/generator/schemaGenerator.d.ts +5 -0
  10. package/dist/generator/schemaGenerator.js +116 -0
  11. package/dist/index.d.ts +5 -3
  12. package/dist/index.js +106 -4
  13. package/dist/types/config.d.ts +11 -0
  14. package/dist/types/config.js +2 -0
  15. package/dist/types.d.ts +5 -0
  16. package/dist/types.js +2 -0
  17. package/dist/utils.d.ts +31 -20
  18. package/dist/utils.js +57 -179
  19. package/package.json +54 -82
  20. package/readme.md +94 -0
  21. package/src/config/loadConfig.ts +25 -0
  22. package/src/generator/clientGenerator.ts +234 -0
  23. package/src/generator/instanceGenerator.ts +20 -0
  24. package/src/generator/reactQueryGenerator.ts +92 -0
  25. package/src/generator/schemaGenerator.ts +139 -0
  26. package/src/index.ts +78 -3
  27. package/src/types/config.ts +12 -0
  28. package/src/types.ts +5 -0
  29. package/src/utils.ts +56 -213
  30. package/README.md +0 -77
  31. package/dist/convertSwaggerFile.d.ts +0 -5
  32. package/dist/convertSwaggerFile.js +0 -26
  33. package/dist/convertSwaggerFile.js.map +0 -1
  34. package/dist/generateHooks.d.ts +0 -18
  35. package/dist/generateHooks.js +0 -444
  36. package/dist/generateHooks.js.map +0 -1
  37. package/dist/generateImports.d.ts +0 -6
  38. package/dist/generateImports.js +0 -21
  39. package/dist/generateImports.js.map +0 -1
  40. package/dist/generateSchemas.d.ts +0 -7
  41. package/dist/generateSchemas.js +0 -100
  42. package/dist/generateSchemas.js.map +0 -1
  43. package/dist/importSpecs.d.ts +0 -10
  44. package/dist/importSpecs.js +0 -127
  45. package/dist/importSpecs.js.map +0 -1
  46. package/dist/index.js.map +0 -1
  47. package/dist/utils.js.map +0 -1
  48. package/src/convertSwaggerFile.ts +0 -25
  49. package/src/generateHooks.ts +0 -538
  50. package/src/generateImports.ts +0 -32
  51. package/src/generateSchemas.ts +0 -117
  52. package/src/importSpecs.ts +0 -168
@@ -1,168 +0,0 @@
1
- import Case from 'case';
2
- import chalk from 'chalk';
3
- import { readFileSync, writeFileSync, readdir, mkdirSync } from 'fs';
4
- import { OperationObject, PathItemObject } from 'openapi3-ts';
5
- import { join, parse } from 'path';
6
- import { convertSwaggerFile } from './convertSwaggerFile.js';
7
- import { createHook } from './generateHooks.js';
8
- import { generateImports } from './generateImports.js';
9
- import { generateSchemas } from './generateSchemas.js';
10
-
11
- export function importSpecs({
12
- sourceUrls,
13
- sourceDirectory,
14
- exportDirectory,
15
- apiDirectory,
16
- headerFilters,
17
- }: {
18
- sourceUrls?: { name: string; url: string }[];
19
- sourceDirectory?: string;
20
- exportDirectory: string;
21
- apiDirectory: string;
22
- headerFilters?: string[];
23
- }) {
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;
29
- try {
30
- JSON.parse(data);
31
- isYaml = false;
32
- } catch (error) {
33
- return false;
34
- }
35
-
36
- const format = isYaml ? 'yaml' : 'json';
37
-
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
- if (!['.yaml', '.yml', '.json'].includes(ext.toLowerCase())) {
59
- console.log(chalk.red(`Skipping ${filename} as it is not a valid openapi/swagger file`));
60
- return;
61
- }
62
- const format = ['.yaml', '.yml'].includes(ext.toLowerCase()) ? 'yaml' : 'json';
63
- make({
64
- data,
65
- format,
66
- filename,
67
- exportDirectory,
68
- headerFilters,
69
- apiDirectory,
70
- });
71
- } catch (error) {
72
- if ((error as any).code === 'EISDIR') {
73
- console.log(chalk.red('nested folder structure not supported'));
74
- return;
75
- }
76
- console.log(chalk.red(`[${filename}]:`), chalk.red(error));
77
- }
78
- });
79
- });
80
- }
81
- }
82
-
83
- async function make({
84
- data,
85
- format,
86
- filename,
87
- exportDirectory,
88
- headerFilters,
89
- apiDirectory,
90
- }: {
91
- data: string;
92
- format: 'yaml' | 'json';
93
- filename: string;
94
- exportDirectory: string;
95
- headerFilters?: string[];
96
- apiDirectory: string;
97
- }) {
98
- let spec = await convertSwaggerFile(data, format);
99
-
100
- const formattedFileName = Case.camel(`useQueries, ${filename.split('.')[0]}`);
101
- const schemaName = `${formattedFileName}.schema`;
102
- const hooksName = `${formattedFileName}`;
103
- const name = filename.split('.')[0];
104
- mkdirSync(join(process.cwd(), `${exportDirectory}/${name}`), { recursive: true });
105
-
106
- const operationIds: string[] = [];
107
-
108
- let hooks = `
109
- function hasDefinedProps<T extends { [P in K]?: any }, K extends PropertyKey>(
110
- obj: T,
111
- ...keys: K[]
112
- ): obj is T & { [P in K]-?: Exclude<T[P], undefined> } {
113
- return keys.every((k) => obj[k] !== undefined);
114
- }
115
- `;
116
- let schemaImportsArray = [] as string[];
117
- let collectedQueryImports = [] as ('query' | 'mutation' | 'infiniteQuery')[];
118
- Object.entries(spec.paths).forEach(([route, verbs]: [string, PathItemObject]) => {
119
- Object.entries(verbs).forEach(([verb, operation]: [string, OperationObject]) => {
120
- if (['get', 'post', 'patch', 'put', 'delete'].includes(verb) && !operation.deprecated) {
121
- const { implementation, imports, queryImports } = createHook({
122
- operation,
123
- verb,
124
- route: (spec.basePath || '') + route,
125
- operationIds,
126
- parameters: verbs.parameters,
127
- schemasComponents: spec.components,
128
- headerFilters,
129
- });
130
-
131
- hooks += implementation;
132
- imports.forEach((element) => {
133
- const formattedImport = element.replace('[]', '');
134
-
135
- if (
136
- !schemaImportsArray.includes(formattedImport) &&
137
- element !== 'void' &&
138
- element !== 'string' &&
139
- !element.includes('{') &&
140
- !element.includes('unknown')
141
- ) {
142
- schemaImportsArray.push(formattedImport);
143
- }
144
- });
145
- queryImports.forEach((element) => {
146
- if (!schemaImportsArray.includes(element)) {
147
- collectedQueryImports.push(element);
148
- }
149
- });
150
- }
151
- });
152
- });
153
-
154
- const imports = generateImports({
155
- apiDirectory,
156
- schemaName,
157
- schemaImports: schemaImportsArray,
158
- queryImports: collectedQueryImports,
159
- });
160
-
161
- writeFileSync(join(process.cwd(), `${exportDirectory}/${name}/${hooksName}.tsx`), imports + hooks);
162
-
163
- writeFileSync(
164
- join(process.cwd(), `${exportDirectory}/${name}/${schemaName}.tsx`),
165
- generateSchemas({ spec })
166
- );
167
- console.log(chalk.green(`🎉 [${filename}] Your OpenAPI spec has been converted into react query hooks`));
168
- }