blend-kit 1.0.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.
Files changed (210) hide show
  1. package/dist/helper/ApiHelper.js +0 -0
  2. package/dist/helper/BasicHelper.js +28 -0
  3. package/dist/helper/CommonHelper.js +10 -0
  4. package/dist/helper/DataHelper.js +241 -0
  5. package/dist/helper/ExpressHelper.js +728 -0
  6. package/dist/helper/FrontEndApiHelper.js +485 -0
  7. package/dist/helper/FrontEndReactApiHelper.js +483 -0
  8. package/dist/helper/MongoHelper.js +143 -0
  9. package/dist/helper/RNHelper.js +560 -0
  10. package/dist/helper/ReactHelper.js +524 -0
  11. package/dist/helper/SectionHelper.js +152 -0
  12. package/dist/helper/fileHelper.js +127 -0
  13. package/dist/helper/grammarHelper/BlendApiGrammarHelper.js +48 -0
  14. package/dist/helper/grammarHelper/BlendBasicGrammarHelper.js +98 -0
  15. package/dist/helper/grammarHelper/BlendDataGrammarHelper.js +47 -0
  16. package/dist/helper/grammarHelper/BlendMDPGrammarHelper.js +29 -0
  17. package/dist/helper/grammarHelper/BlendMongoGrammarHelper.js +51 -0
  18. package/dist/helper/grammarHelper/BlendRNGrammarHelper.js +56 -0
  19. package/dist/helper/grammarHelper/BlendReactGrammarHelper.js +55 -0
  20. package/dist/helper/grammarHelper/GrammarErrorHelper.js +16 -0
  21. package/dist/index.js +159 -0
  22. package/dist/parser/blendApi/src/grammar/BlendApiLexer.js +201 -0
  23. package/dist/parser/blendApi/src/grammar/BlendApiListener.js +3 -0
  24. package/dist/parser/blendApi/src/grammar/BlendApiParser.js +961 -0
  25. package/dist/parser/blendData/src/grammar/BlendDataLexer.js +154 -0
  26. package/dist/parser/blendData/src/grammar/BlendDataListener.js +3 -0
  27. package/dist/parser/blendData/src/grammar/BlendDataParser.js +641 -0
  28. package/dist/parser/blendMDP/src/grammar/BlendMDPLexer.js +151 -0
  29. package/dist/parser/blendMDP/src/grammar/BlendMDPListener.js +3 -0
  30. package/dist/parser/blendMDP/src/grammar/BlendMDPParser.js +490 -0
  31. package/dist/parser/blendMongo/src/grammar/BlendMongoLexer.js +187 -0
  32. package/dist/parser/blendMongo/src/grammar/BlendMongoListener.js +3 -0
  33. package/dist/parser/blendMongo/src/grammar/BlendMongoParser.js +848 -0
  34. package/dist/parser/blendRN/src/grammar/BlendRNLexer.js +172 -0
  35. package/dist/parser/blendRN/src/grammar/BlendRNListener.js +3 -0
  36. package/dist/parser/blendRN/src/grammar/BlendRNParser.js +657 -0
  37. package/dist/parser/blendReact/src/grammar/BlendReactLexer.js +159 -0
  38. package/dist/parser/blendReact/src/grammar/BlendReactListener.js +3 -0
  39. package/dist/parser/blendReact/src/grammar/BlendReactParser.js +644 -0
  40. package/dist/parser/blendbasic/src/grammar/BlendBasicLexer.js +147 -0
  41. package/dist/parser/blendbasic/src/grammar/BlendBasicListener.js +3 -0
  42. package/dist/parser/blendbasic/src/grammar/BlendBasicParser.js +747 -0
  43. package/dist/src/app.js +76 -0
  44. package/dist/src/app.ts +54 -0
  45. package/dist/types/apiOperationTypes.js +13 -0
  46. package/dist/types/basicOperationTypes.js +2 -0
  47. package/dist/types/dataOperationTypes.js +2 -0
  48. package/dist/types/frontendOperationTypes.js +4 -0
  49. package/dist/types/generalTypes.js +0 -0
  50. package/dist/types/mongoOperationTypes.js +12 -0
  51. package/package.json +29 -0
  52. package/src/grammar/.antlr/ApiModuleLexer.interp +71 -0
  53. package/src/grammar/.antlr/ApiModuleLexer.java +194 -0
  54. package/src/grammar/.antlr/ApiModuleLexer.tokens +32 -0
  55. package/src/grammar/.antlr/BlendApi.interp +70 -0
  56. package/src/grammar/.antlr/BlendApi.tokens +44 -0
  57. package/src/grammar/.antlr/BlendApiLexer.interp +89 -0
  58. package/src/grammar/.antlr/BlendApiLexer.java +237 -0
  59. package/src/grammar/.antlr/BlendApiLexer.tokens +44 -0
  60. package/src/grammar/.antlr/BlendApiParser.java +767 -0
  61. package/src/grammar/.antlr/BlendBasic.interp +41 -0
  62. package/src/grammar/.antlr/BlendBasic.tokens +20 -0
  63. package/src/grammar/.antlr/BlendBasicLexer.interp +50 -0
  64. package/src/grammar/.antlr/BlendBasicLexer.java +179 -0
  65. package/src/grammar/.antlr/BlendBasicLexer.tokens +20 -0
  66. package/src/grammar/.antlr/BlendBasicParser.java +599 -0
  67. package/src/grammar/.antlr/BlendData.interp +50 -0
  68. package/src/grammar/.antlr/BlendData.tokens +29 -0
  69. package/src/grammar/.antlr/BlendDataLexer.interp +65 -0
  70. package/src/grammar/.antlr/BlendDataLexer.java +181 -0
  71. package/src/grammar/.antlr/BlendDataLexer.tokens +29 -0
  72. package/src/grammar/.antlr/BlendDataParser.java +520 -0
  73. package/src/grammar/.antlr/BlendMDP.interp +45 -0
  74. package/src/grammar/.antlr/BlendMDP.tokens +25 -0
  75. package/src/grammar/.antlr/BlendMDPLexer.interp +59 -0
  76. package/src/grammar/.antlr/BlendMDPLexer.java +178 -0
  77. package/src/grammar/.antlr/BlendMDPLexer.tokens +25 -0
  78. package/src/grammar/.antlr/BlendMDPParser.java +386 -0
  79. package/src/grammar/.antlr/BlendMongo.interp +65 -0
  80. package/src/grammar/.antlr/BlendMongo.tokens +41 -0
  81. package/src/grammar/.antlr/BlendMongoLexer.interp +83 -0
  82. package/src/grammar/.antlr/BlendMongoLexer.java +219 -0
  83. package/src/grammar/.antlr/BlendMongoLexer.tokens +41 -0
  84. package/src/grammar/.antlr/BlendMongoParser.java +669 -0
  85. package/src/grammar/.antlr/BlendRN.interp +53 -0
  86. package/src/grammar/.antlr/BlendRN.tokens +31 -0
  87. package/src/grammar/.antlr/BlendRNLexer.interp +71 -0
  88. package/src/grammar/.antlr/BlendRNLexer.java +202 -0
  89. package/src/grammar/.antlr/BlendRNLexer.tokens +31 -0
  90. package/src/grammar/.antlr/BlendRNParser.java +542 -0
  91. package/src/grammar/.antlr/BlendReact.interp +49 -0
  92. package/src/grammar/.antlr/BlendReact.tokens +28 -0
  93. package/src/grammar/.antlr/BlendReactLexer.interp +65 -0
  94. package/src/grammar/.antlr/BlendReactLexer.java +188 -0
  95. package/src/grammar/.antlr/BlendReactLexer.tokens +28 -0
  96. package/src/grammar/.antlr/BlendReactParser.java +530 -0
  97. package/src/grammar/BlendApi.g4 +26 -0
  98. package/src/grammar/BlendBasic.g4 +16 -0
  99. package/src/grammar/BlendData.g4 +24 -0
  100. package/src/grammar/BlendMDP.g4 +12 -0
  101. package/src/grammar/BlendMongo.g4 +24 -0
  102. package/src/grammar/BlendRN.g4 +18 -0
  103. package/src/grammar/BlendReact.g4 +16 -0
  104. package/src/helper/BasicHelper.ts +35 -0
  105. package/src/helper/CommonHelper.ts +5 -0
  106. package/src/helper/DataHelper.ts +268 -0
  107. package/src/helper/ExpressHelper.ts +807 -0
  108. package/src/helper/FrontEndApiHelper.ts +526 -0
  109. package/src/helper/FrontEndReactApiHelper.ts +532 -0
  110. package/src/helper/MongoHelper.ts +165 -0
  111. package/src/helper/RNHelper.ts +651 -0
  112. package/src/helper/ReactHelper.ts +597 -0
  113. package/src/helper/SectionHelper.ts +154 -0
  114. package/src/helper/fileHelper.ts +111 -0
  115. package/src/helper/grammarHelper/BlendApiGrammarHelper.ts +45 -0
  116. package/src/helper/grammarHelper/BlendBasicGrammarHelper.ts +101 -0
  117. package/src/helper/grammarHelper/BlendDataGrammarHelper.ts +49 -0
  118. package/src/helper/grammarHelper/BlendMDPGrammarHelper.ts +33 -0
  119. package/src/helper/grammarHelper/BlendMongoGrammarHelper.ts +50 -0
  120. package/src/helper/grammarHelper/BlendRNGrammarHelper.ts +65 -0
  121. package/src/helper/grammarHelper/BlendReactGrammarHelper.ts +65 -0
  122. package/src/helper/grammarHelper/GrammarErrorHelper.ts +13 -0
  123. package/src/index.ts +168 -0
  124. package/src/parser/blendApi/src/grammar/BlendApi.interp +70 -0
  125. package/src/parser/blendApi/src/grammar/BlendApi.tokens +44 -0
  126. package/src/parser/blendApi/src/grammar/BlendApiLexer.interp +89 -0
  127. package/src/parser/blendApi/src/grammar/BlendApiLexer.tokens +44 -0
  128. package/src/parser/blendApi/src/grammar/BlendApiLexer.ts +193 -0
  129. package/src/parser/blendApi/src/grammar/BlendApiListener.ts +145 -0
  130. package/src/parser/blendApi/src/grammar/BlendApiParser.ts +968 -0
  131. package/src/parser/blendData/src/grammar/BlendData.interp +50 -0
  132. package/src/parser/blendData/src/grammar/BlendData.tokens +29 -0
  133. package/src/parser/blendData/src/grammar/BlendDataLexer.interp +65 -0
  134. package/src/parser/blendData/src/grammar/BlendDataLexer.tokens +29 -0
  135. package/src/parser/blendData/src/grammar/BlendDataLexer.ts +146 -0
  136. package/src/parser/blendData/src/grammar/BlendDataListener.ts +97 -0
  137. package/src/parser/blendData/src/grammar/BlendDataParser.ts +641 -0
  138. package/src/parser/blendMDP/src/grammar/BlendMDP.interp +45 -0
  139. package/src/parser/blendMDP/src/grammar/BlendMDP.tokens +25 -0
  140. package/src/parser/blendMDP/src/grammar/BlendMDPLexer.interp +59 -0
  141. package/src/parser/blendMDP/src/grammar/BlendMDPLexer.tokens +25 -0
  142. package/src/parser/blendMDP/src/grammar/BlendMDPLexer.ts +143 -0
  143. package/src/parser/blendMDP/src/grammar/BlendMDPListener.ts +85 -0
  144. package/src/parser/blendMDP/src/grammar/BlendMDPParser.ts +483 -0
  145. package/src/parser/blendMongo/src/grammar/BlendMongo.interp +65 -0
  146. package/src/parser/blendMongo/src/grammar/BlendMongo.tokens +41 -0
  147. package/src/parser/blendMongo/src/grammar/BlendMongoLexer.interp +83 -0
  148. package/src/parser/blendMongo/src/grammar/BlendMongoLexer.tokens +41 -0
  149. package/src/parser/blendMongo/src/grammar/BlendMongoLexer.ts +179 -0
  150. package/src/parser/blendMongo/src/grammar/BlendMongoListener.ts +133 -0
  151. package/src/parser/blendMongo/src/grammar/BlendMongoParser.ts +849 -0
  152. package/src/parser/blendRN/src/grammar/BlendRN.interp +53 -0
  153. package/src/parser/blendRN/src/grammar/BlendRN.tokens +31 -0
  154. package/src/parser/blendRN/src/grammar/BlendRNLexer.interp +71 -0
  155. package/src/parser/blendRN/src/grammar/BlendRNLexer.tokens +31 -0
  156. package/src/parser/blendRN/src/grammar/BlendRNLexer.ts +164 -0
  157. package/src/parser/blendRN/src/grammar/BlendRNListener.ts +85 -0
  158. package/src/parser/blendRN/src/grammar/BlendRNParser.ts +659 -0
  159. package/src/parser/blendReact/src/grammar/BlendReact.interp +49 -0
  160. package/src/parser/blendReact/src/grammar/BlendReact.tokens +28 -0
  161. package/src/parser/blendReact/src/grammar/BlendReactLexer.interp +65 -0
  162. package/src/parser/blendReact/src/grammar/BlendReactLexer.tokens +28 -0
  163. package/src/parser/blendReact/src/grammar/BlendReactLexer.ts +151 -0
  164. package/src/parser/blendReact/src/grammar/BlendReactListener.ts +85 -0
  165. package/src/parser/blendReact/src/grammar/BlendReactParser.ts +646 -0
  166. package/src/parser/blendbasic/src/grammar/BlendBasic.interp +41 -0
  167. package/src/parser/blendbasic/src/grammar/BlendBasic.tokens +20 -0
  168. package/src/parser/blendbasic/src/grammar/BlendBasicLexer.interp +50 -0
  169. package/src/parser/blendbasic/src/grammar/BlendBasicLexer.tokens +20 -0
  170. package/src/parser/blendbasic/src/grammar/BlendBasicLexer.ts +139 -0
  171. package/src/parser/blendbasic/src/grammar/BlendBasicListener.ts +109 -0
  172. package/src/parser/blendbasic/src/grammar/BlendBasicParser.ts +747 -0
  173. package/src/types/apiOperationTypes.ts +43 -0
  174. package/src/types/basicOperationTypes.ts +15 -0
  175. package/src/types/dataOperationTypes.ts +20 -0
  176. package/src/types/frontendOperationTypes.ts +92 -0
  177. package/src/types/generalTypes.ts +0 -0
  178. package/src/types/mongoOperationTypes.ts +36 -0
  179. package/template/.env.dev +1 -0
  180. package/template/package.json +36 -0
  181. package/template/src/app.js +76 -0
  182. package/template/src/app.ts +54 -0
  183. package/template/src/config/app.config.js +0 -0
  184. package/template/src/config/app.config.ts +0 -0
  185. package/template/src/config/database.config.js +6 -0
  186. package/template/src/config/database.config.ts +4 -0
  187. package/template/src/data/interfaces.js +2 -0
  188. package/template/src/data/interfaces.ts +23 -0
  189. package/template/src/middlewares/auth.js +22 -0
  190. package/template/src/middlewares/auth.ts +21 -0
  191. package/template/src/models/Database.js +10 -0
  192. package/template/src/models/Database.ts +8 -0
  193. package/template/src/models/User/Permission.model.js +13 -0
  194. package/template/src/models/User/Permission.model.ts +14 -0
  195. package/template/src/models/User/Role.model.js +13 -0
  196. package/template/src/models/User/Role.model.ts +14 -0
  197. package/template/src/models/User/User.model.js +17 -0
  198. package/template/src/models/User/User.model.ts +18 -0
  199. package/template/src/routes/User.routes.js +47 -0
  200. package/template/src/routes/User.routes.ts +41 -0
  201. package/template/src/routes/common/common.routes.config.js +14 -0
  202. package/template/src/routes/common/common.routes.config.ts +15 -0
  203. package/template/src/services/User/User.service.js +75 -0
  204. package/template/src/services/User/User.service.ts +68 -0
  205. package/template/src/services/User/api.data.js +72 -0
  206. package/template/src/services/User/api.data.ts +79 -0
  207. package/template/src/services/User/api.interface.js +3 -0
  208. package/template/src/services/User/api.interface.ts +10 -0
  209. package/template/tsconfig.json +10 -0
  210. package/tsconfig.json +13 -0
@@ -0,0 +1,485 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const ExpressHelper_1 = __importDefault(require("./ExpressHelper"));
7
+ const fileHelper_1 = require("./fileHelper");
8
+ const path_1 = __importDefault(require("path"));
9
+ class FrontEndApiHelper {
10
+ constructor() {
11
+ this.folderPath = path_1.default.join(process.cwd());
12
+ this.folderName = path_1.default.basename(this.folderPath);
13
+ this.basicFilePath = path_1.default.join(this.folderPath, `${this.folderName}.basic`);
14
+ this.configPath = path_1.default.join(this.folderPath, '.basicConfig');
15
+ this.basicProjectContent = JSON.parse(fileHelper_1.FileHelper.readFile(`${this.configPath}/basicConfig.json`) || "{}");
16
+ }
17
+ doFrontEndApiGenerations() {
18
+ this.writeStoreFiles();
19
+ this.createRequiredFiles();
20
+ }
21
+ createRequiredFiles() {
22
+ const apiMainSectionList = JSON.parse(fileHelper_1.FileHelper.readFile(`${this.configPath}/apiConfig.json`));
23
+ const rnSectionList = JSON.parse(fileHelper_1.FileHelper.readFile(`${this.configPath}/rnConfig.json`));
24
+ rnSectionList.forEach(rnSection => {
25
+ const rnFolderPath = path_1.default.join(this.folderPath, `module/${rnSection.name}/react-native`);
26
+ rnSection.rnModuleList.forEach(rnModule => {
27
+ let currentApiSection = apiMainSectionList.find(item => item.name === rnSection.name);
28
+ const rnProjectPath = path_1.default.join(rnFolderPath, rnModule.name);
29
+ const rapcode = this.generateRmoteApiPointsCode(currentApiSection);
30
+ fileHelper_1.FileHelper.createFile(`${rnProjectPath}/src/remote-api-point.ts`, rapcode);
31
+ fileHelper_1.FileHelper.createFile(`${rnProjectPath}/src-gen/data/common.ts`, commonApiDataCode);
32
+ fileHelper_1.FileHelper.createFile(`${rnProjectPath}/src/redux/store/store.ts`, mainStoreCode);
33
+ fileHelper_1.FileHelper.createFile(`${rnProjectPath}/src/redux/store/saga.ts`, mainSagaCode);
34
+ fileHelper_1.FileHelper.createFile(`${rnProjectPath}/src/redux/store/snackbar/snackbarSlice.ts`, snackbarSliceCode);
35
+ fileHelper_1.FileHelper.createFile(`${rnProjectPath}/src/redux/hooks.ts`, hooksCode);
36
+ });
37
+ });
38
+ }
39
+ generateRmoteApiPointsCode(currentApiSection) {
40
+ let code = `
41
+ import axios from 'axios';
42
+ import { API_URL } from '@env';
43
+ ${currentApiSection.expressSectionList.reduce((acc, curVal) => {
44
+ acc = acc + `export const ${curVal.name}Api = axios.create({
45
+ baseURL: API_URL||'http://localhost:8000', // Replace with your API base URL
46
+ headers: {
47
+ // Authorization: localStorage.getItem("authToken")||""
48
+ }
49
+ });
50
+ \n
51
+ `;
52
+ return acc;
53
+ }, "")}
54
+ `;
55
+ return code;
56
+ }
57
+ writeStoreFiles() {
58
+ const apiMainSectionList = JSON.parse(fileHelper_1.FileHelper.readFile(`${this.configPath}/apiConfig.json`));
59
+ const rnSectionList = JSON.parse(fileHelper_1.FileHelper.readFile(`${this.configPath}/rnConfig.json`));
60
+ console.log(rnSectionList, "rnSectionList");
61
+ rnSectionList.forEach(rnSection => {
62
+ const rnFolderPath = path_1.default.join(this.folderPath, `module/${rnSection.name}/react-native`);
63
+ let currentApiSection = apiMainSectionList.find(item => item.name === rnSection.name);
64
+ rnSection.rnModuleList.forEach(rnModule => {
65
+ const rnProjectPath = path_1.default.join(rnFolderPath, rnModule.name);
66
+ currentApiSection.expressSectionList.forEach(expressSection => {
67
+ const rnApiPath = path_1.default.join(rnProjectPath, `src-gen/redux/${expressSection.name}`);
68
+ const rnReducerPath = path_1.default.join(rnProjectPath, `src-gen/redux/gen-reducers.ts`);
69
+ const reducerCode = this.generateReducersCode(expressSection.apiSectionList, expressSection.name);
70
+ const rnSagaPath = path_1.default.join(rnProjectPath, `src-gen/redux/gen-root-saga.ts`);
71
+ const rootSagaCode = this.generateRootSagaCode(expressSection.apiSectionList, expressSection.name);
72
+ fileHelper_1.FileHelper.writeFile(rnReducerPath, reducerCode);
73
+ fileHelper_1.FileHelper.writeFile(rnSagaPath, rootSagaCode);
74
+ expressSection.apiSectionList.forEach(apiSection => {
75
+ const apiSectionSlicePath = path_1.default.join(rnApiPath, apiSection.name, `${apiSection.name}Slice.ts`);
76
+ const apiSectionDataPath = path_1.default.join(rnApiPath, apiSection.name, `data.ts`);
77
+ const apiSectionActionPath = path_1.default.join(rnApiPath, apiSection.name, `action.ts`);
78
+ const apiSectionSagaPath = path_1.default.join(rnApiPath, apiSection.name, `${apiSection.name}Saga.ts`);
79
+ const sliceCode = this.generateSliceCode(apiSection);
80
+ const dataCode = this.generateApiDatacode(apiSection);
81
+ const actionCode = this.generateApiActioncode(apiSection, expressSection);
82
+ const sagaCode = this.generateSagaCode(apiSection);
83
+ fileHelper_1.FileHelper.writeFile(apiSectionSlicePath, sliceCode);
84
+ fileHelper_1.FileHelper.writeFile(apiSectionDataPath, dataCode);
85
+ fileHelper_1.FileHelper.writeFile(apiSectionActionPath, actionCode);
86
+ fileHelper_1.FileHelper.writeFile(apiSectionSagaPath, sagaCode);
87
+ });
88
+ });
89
+ });
90
+ });
91
+ }
92
+ generateSliceCode(apiSection) {
93
+ const filteredApiListForData = apiSection.apiList.filter(api => {
94
+ const inputKeyList = Object.keys(api.input);
95
+ const outputKeyList = Object.keys(api.output);
96
+ return inputKeyList.length > 0 || outputKeyList.length > 0;
97
+ });
98
+ const code = `
99
+ import { createSlice, PayloadAction } from "@reduxjs/toolkit";
100
+
101
+
102
+ ${filteredApiListForData.length > 0 ? `import { ${apiSection.apiList.reduce((acc, curVal) => {
103
+ const inputKeyList = Object.keys(curVal.input);
104
+ const outputKeyList = Object.keys(curVal.output);
105
+ const inputDataTypeName = (`${apiSection.name}_${curVal.name}_Input`).toUpperCase();
106
+ const outputDataTypeName = (`${apiSection.name}_${curVal.name}_Output`).toUpperCase();
107
+ acc = acc + `${inputKeyList.length > 0 ? inputDataTypeName + ',' : ''}`;
108
+ acc = acc + `${outputKeyList.length > 0 ? outputDataTypeName + ',' : ''}`;
109
+ return acc;
110
+ }, '')} } from "./data";
111
+
112
+ ${apiSection.apiList.reduce((acc, curVal) => {
113
+ var _a, _b, _c;
114
+ if ((_a = curVal === null || curVal === void 0 ? void 0 : curVal.directOutput) === null || _a === void 0 ? void 0 : _a.name) {
115
+ const [moduleName, dataName] = (_c = (_b = curVal === null || curVal === void 0 ? void 0 : curVal.directOutput) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.split("->");
116
+ acc = acc + `import {${dataName === null || dataName === void 0 ? void 0 : dataName.replace("[]", "")}} from "../../../data/${moduleName}";`;
117
+ }
118
+ return acc;
119
+ }, '')} ` : ''}
120
+
121
+ ${apiSection.apiList.reduce((acc, curVal) => {
122
+ var _a, _b, _c;
123
+ if ((_a = curVal === null || curVal === void 0 ? void 0 : curVal.directOutput) === null || _a === void 0 ? void 0 : _a.name) {
124
+ const [moduleName, dataName] = (_c = (_b = curVal === null || curVal === void 0 ? void 0 : curVal.directOutput) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.split("->");
125
+ acc = acc + `import {${dataName === null || dataName === void 0 ? void 0 : dataName.replace("[]", "")}} from "../../../data/${moduleName}";`;
126
+ }
127
+ return acc;
128
+ }, '')}
129
+
130
+
131
+
132
+ import { ApiStatus } from "../../../data/common";
133
+ interface ${apiSection.name}State {
134
+ ${apiSection.apiList.reduce((acc, curVal) => {
135
+ var _a, _b;
136
+ const [moduleName, dataName] = ((_b = (_a = curVal === null || curVal === void 0 ? void 0 : curVal.directOutput) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.split("->")) || [];
137
+ acc = acc + `${curVal.name}: {
138
+ data: ${Object.keys(curVal.output).length > 0 ? `${apiSection.name.toUpperCase()}_${curVal.name.toUpperCase()}_OUTPUT` : dataName ? dataName : "any"},\n
139
+ status: ApiStatus,
140
+ error:string|null
141
+ }
142
+ `;
143
+ return acc;
144
+ }, "")}
145
+ }
146
+
147
+ const initialState: ${apiSection.name}State = {
148
+ ${apiSection.apiList.reduce((acc, curVal) => {
149
+ var _a, _b;
150
+ const [moduleName, dataName] = ((_b = (_a = curVal === null || curVal === void 0 ? void 0 : curVal.directOutput) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.split("->")) || [];
151
+ const isOutputDataArray = (dataName || "").includes("[]");
152
+ acc = acc + `${curVal.name}:{
153
+ data: ${Object.keys(curVal.output).length > 0 ? `new ${apiSection.name.toUpperCase()}_${curVal.name.toUpperCase()}_OUTPUT()` : (dataName && !isOutputDataArray) ? `new ${dataName}()` : (dataName && isOutputDataArray) ? '[]' : "null"},
154
+ status: ApiStatus.Idle,
155
+ error: null
156
+ },\n`;
157
+ return acc;
158
+ }, "")}
159
+ }
160
+
161
+ export const ${apiSection.name}Slice = createSlice({
162
+ name: "${apiSection.name}",
163
+ initialState,
164
+ reducers: {
165
+ reset${apiSection.name}Reducer: () => initialState,
166
+ ${apiSection.apiList.reduce((acc, curVal, currentIndex) => {
167
+ const inputKeyList = Object.keys(curVal.input);
168
+ const inputDataTypeName = (`${apiSection.name}_${curVal.name}_Input`).toUpperCase();
169
+ acc = acc + `
170
+ ${curVal.name}Action:(state:any, ${inputKeyList.length > 0 ? `payload:PayloadAction<${inputDataTypeName}>` : ``}) => {
171
+ state.${curVal.name}.status = ApiStatus.Loading;
172
+ state.${curVal.name}.error = '';
173
+ },
174
+ ${curVal.name}SuccessAction:(state:any, payload:any) => {
175
+ state.${curVal.name}.status = ApiStatus.Success;
176
+ state.${curVal.name}.data = payload.payload;
177
+ },
178
+ ${curVal.name}ErrorAction:(state:any, payload:any) => {
179
+ state.${curVal.name}.status = ApiStatus.Failed;
180
+ state.${curVal.name}.error = payload.error;
181
+ },
182
+ `;
183
+ return acc;
184
+ }, '')}
185
+ }
186
+
187
+ });
188
+
189
+ export const {reset${apiSection.name}Reducer,${apiSection.apiList.reduce((acc, curVal, currentIndex) => {
190
+ acc = acc + `
191
+ ${curVal.name}Action,${curVal.name}SuccessAction,${curVal.name}ErrorAction,
192
+ `;
193
+ return acc;
194
+ }, '')}} = ${apiSection.name}Slice.actions;
195
+ export default ${apiSection.name}Slice.reducer;
196
+ `;
197
+ return code;
198
+ }
199
+ generateSagaCode(apiSection) {
200
+ const code = `
201
+ import { put, takeLatest } from "redux-saga/effects";
202
+ import { PayloadAction } from "@reduxjs/toolkit";
203
+
204
+
205
+ import { ${apiSection.apiList.reduce((acc, curVal) => {
206
+ acc = acc + `${curVal.name}Api,`;
207
+ return acc;
208
+ }, '')} }from './action';
209
+
210
+ import { ${apiSection.apiList.reduce((acc, curVal) => {
211
+ acc = acc + `${curVal.name}SuccessAction,${curVal.name}ErrorAction,`;
212
+ return acc;
213
+ }, '')} } from "./${apiSection.name}Slice";
214
+
215
+ ${apiSection.apiList.reduce((acc, curVal) => {
216
+ const inputKeyList = Object.keys(curVal.input);
217
+ acc = acc + `
218
+ function* ${curVal.name}Saga(action: PayloadAction<any>): any {
219
+ try {
220
+ const response: any = yield ${curVal.name}Api(${inputKeyList.length > 0 ? `action.payload` : ``})
221
+ yield put(${curVal.name}SuccessAction(response.data))
222
+ } catch(e: any) {
223
+ yield put(${curVal.name}ErrorAction(e));
224
+ }
225
+ }
226
+
227
+ export function* watch${apiSection.name}${curVal.name}() {
228
+ yield takeLatest("${apiSection.name}/${curVal.name}Action", ${curVal.name}Saga);
229
+ }
230
+ `;
231
+ return acc;
232
+ }, '')}
233
+
234
+ `;
235
+ return code;
236
+ }
237
+ generateReducersCode(apiSectionList, sectionName) {
238
+ const code = `
239
+ ${apiSectionList.reduce((acc, curVal) => {
240
+ acc = acc + `
241
+ import ${curVal.name}Reducer from './${sectionName}/${curVal.name}/${curVal.name}Slice';\n`;
242
+ return acc;
243
+ }, '')}
244
+
245
+ export const GeneratedReducers = {
246
+ ${apiSectionList.reduce((acc, curVal) => {
247
+ acc = acc + `${curVal.name.toLowerCase()}: ${curVal.name}Reducer,`;
248
+ return acc;
249
+ }, '')}
250
+ }
251
+ `;
252
+ return code;
253
+ }
254
+ generateApiActioncode(apiSection, expressSection) {
255
+ const filteredApiListForData = apiSection.apiList.filter(api => {
256
+ const inputKeyList = Object.keys(api.input);
257
+ const outputKeyList = Object.keys(api.output);
258
+ return inputKeyList.length > 0 || outputKeyList.length > 0;
259
+ });
260
+ console.log(filteredApiListForData, "filteredApiListForDatafilteredApiListForData");
261
+ const code = `
262
+ import { createAsyncThunk } from "@reduxjs/toolkit";
263
+ import axios, { AxiosError } from 'axios';
264
+ import {${expressSection.name}Api} from "../../../../src/remote-api-point";
265
+ ${filteredApiListForData.length > 0 ? `import { ${filteredApiListForData.reduce((acc, curVal) => {
266
+ const inputKeyList = Object.keys(curVal.input);
267
+ const outputKeyList = Object.keys(curVal.output);
268
+ // const directOutputName = curVal.directOutput?.name;
269
+ const inputDataTypeName = (`${apiSection.name}_${curVal.name}_Input`).toUpperCase();
270
+ const outputDataTypeName = (`${apiSection.name}_${curVal.name}_Output`).toUpperCase();
271
+ // const directOutputDataTypeName: string = (`${apiSection.name}_${curVal.name}_Output`).toUpperCase();
272
+ acc = acc + `${inputKeyList.length > 0 ? inputDataTypeName + ',' : ''}`;
273
+ acc = acc + `${outputKeyList.length > 0 ? outputDataTypeName + ',' : ''}`;
274
+ return acc;
275
+ }, '')} } from "./data";` : ''}
276
+
277
+ ${apiSection.apiList.reduce((acc, curVal) => {
278
+ var _a, _b, _c;
279
+ if ((_a = curVal === null || curVal === void 0 ? void 0 : curVal.directOutput) === null || _a === void 0 ? void 0 : _a.name) {
280
+ const [moduleName, dataName] = (_c = (_b = curVal === null || curVal === void 0 ? void 0 : curVal.directOutput) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.split("->");
281
+ acc = acc + `import {${dataName === null || dataName === void 0 ? void 0 : dataName.replace("[]", "")}} from "../../../data/${moduleName}";`;
282
+ }
283
+ return acc;
284
+ }, '')}
285
+
286
+
287
+
288
+
289
+ const showError = (err: AxiosError) => {
290
+ const errorResponse: any = err.response?.data || {};
291
+ if (err.response?.data) {
292
+ if (typeof (err.response?.data) == "string") {
293
+ return err.response?.data
294
+ } else {
295
+ return Object.keys(err.response?.data).reduce((acc, currVal) => {
296
+ acc = acc + errorResponse[currVal];
297
+ return acc;
298
+ }, "")
299
+ }
300
+ }
301
+ else {
302
+ return err.message
303
+ }
304
+ }
305
+
306
+
307
+ ${apiSection.apiList.reduce((acc, curVal) => {
308
+ var _a, _b;
309
+ const inputKeyList = Object.keys(curVal.input);
310
+ const outputKeyList = Object.keys(curVal.output);
311
+ const inputDataTypeName = (`${apiSection.name}_${curVal.name}_Input`).toUpperCase();
312
+ const outputDataTypeName = (`${apiSection.name}_${curVal.name}_Output`).toUpperCase();
313
+ const [moduleName, dataName] = ((_b = (_a = curVal === null || curVal === void 0 ? void 0 : curVal.directOutput) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.split("->")) || [];
314
+ acc = acc + `
315
+
316
+
317
+ export const ${curVal.name}Api = async (${inputKeyList.length > 0 ? `input: ${inputDataTypeName},` : ``} ) => {
318
+ return ${expressSection.name}Api.${curVal.type.toLowerCase()}('${this.getApiName(expressSection.name)}/${this.getApiName(apiSection.name)}/${this.getApiName(curVal.name)}',${inputKeyList.length > 0 ? `${curVal.type == 'post' ? 'input' : '{params: input.toJSON()}'}` : ''});
319
+ }
320
+
321
+ export const call${this.capitalizeFirstLetter(curVal.name)}Api = async (${inputKeyList.length > 0 ? `input: ${inputDataTypeName},` : ``} output: (output: ${outputKeyList.length > 0 ? outputDataTypeName : dataName ? dataName : 'any'}) => any,error: (errMsg: any) => void) => {
322
+ try {
323
+ //const { data } = await ${expressSection.name}Api.${curVal.type.toLowerCase()}('${this.getApiName(apiSection.name)}/${this.getApiName(curVal.name)}',${inputKeyList.length > 0 ? `${curVal.type == 'post' ? 'input' : '{params: input.toJSON()}'}` : ''});
324
+ const { data } = await ${curVal.name}Api(${inputKeyList.length > 0 ? `${curVal.type == 'post' ? 'input' : 'input'}` : ''});
325
+ return output(data);
326
+ } catch (err: any) {
327
+ return error(showError(err));
328
+ }
329
+ }
330
+ `;
331
+ return acc;
332
+ }, '')}
333
+
334
+ `;
335
+ return code;
336
+ }
337
+ generateRootSagaCode(apiSectionList, expressSectionName) {
338
+ const code = `
339
+ import { all, fork } from "redux-saga/effects";
340
+ ${apiSectionList.reduce((acc, curVal) => {
341
+ acc = acc + `
342
+ import{
343
+ ${curVal.apiList.reduce((apiAcc, apiCurVal) => {
344
+ apiAcc = apiAcc + `
345
+ watch${curVal.name}${apiCurVal.name},
346
+ `;
347
+ return apiAcc;
348
+ }, '')}
349
+ } from './${expressSectionName}/${curVal.name}/${curVal.name}Saga';\n
350
+ `;
351
+ return acc;
352
+ }, '')}
353
+
354
+
355
+
356
+
357
+ const genRootSaga = [
358
+
359
+ ${apiSectionList.reduce((acc, curVal) => {
360
+ acc = acc + `
361
+
362
+ ${curVal.apiList.reduce((apiAcc, apiCurVal) => {
363
+ apiAcc = apiAcc + `
364
+ watch${curVal.name}${apiCurVal.name}()
365
+ ,
366
+ `;
367
+ return apiAcc;
368
+ }, '')}
369
+
370
+ `;
371
+ return acc;
372
+ }, '')}
373
+
374
+ ];
375
+
376
+ export default genRootSaga;
377
+ `;
378
+ return code;
379
+ }
380
+ getApiName(apiName) {
381
+ return apiName.replace(/[A-Z]/g, m => "-" + m.toLowerCase()).replace(/^-/, '');
382
+ }
383
+ capitalizeFirstLetter(val) {
384
+ return val.charAt(0).toUpperCase() + val.slice(1);
385
+ }
386
+ generateApiDatacode(apiSection) {
387
+ const expressHelper = new ExpressHelper_1.default();
388
+ return expressHelper.generateSampleApiDataCode(apiSection, "react-native");
389
+ }
390
+ }
391
+ exports.default = FrontEndApiHelper;
392
+ const commonApiDataCode = `
393
+ export enum ApiStatus {
394
+ Success="Success",
395
+ Loading="Loading",
396
+ Failed="Failed",
397
+ Idle="Idle"
398
+ }
399
+ `;
400
+ const snackbarSliceCode = `
401
+ import { createAsyncThunk, createSlice } from "@reduxjs/toolkit";
402
+
403
+
404
+ export interface SnackbarRequest {
405
+ type: SnackbarType,
406
+ message: string,
407
+ timing: number
408
+ }
409
+
410
+ export enum SnackbarType {
411
+ Success="success",
412
+ Error="error",
413
+ }
414
+
415
+
416
+ interface SnackbarState {
417
+ snackbarRequestList: SnackbarRequest[]
418
+ }
419
+
420
+ const initialState:SnackbarState = {
421
+ snackbarRequestList: []
422
+ }
423
+
424
+
425
+ export const snackbarSlice= createSlice({
426
+ name: "Snackbar",
427
+ initialState: initialState,
428
+ reducers: {
429
+ addSnackbar: (state, action: {type:String,payload: SnackbarRequest}) => {
430
+ state.snackbarRequestList.push(action.payload);
431
+ },
432
+ removeLastSnackbar: (state) => {
433
+ state.snackbarRequestList.pop();
434
+ },
435
+ }
436
+ });
437
+
438
+
439
+ export const {addSnackbar,removeLastSnackbar} = snackbarSlice.actions;
440
+
441
+ export default snackbarSlice.reducer;
442
+ `;
443
+ const mainStoreCode = `
444
+
445
+ import { configureStore } from '@reduxjs/toolkit'
446
+ import { GeneratedReducers } from '../../../src-gen/redux/gen-reducers'
447
+ import SnackbarReducer from './snackbar/snackbarSlice'
448
+ import createSagaMiddleware from 'redux-saga';
449
+ import rootSaga from '../../../src-gen/redux/gen-root-saga';
450
+ import { mySaga } from './saga';
451
+ const reduxSagaMiddleWareOptions = {};
452
+ const sagaMiddleWare = createSagaMiddleware(reduxSagaMiddleWareOptions);
453
+ export const store = configureStore({
454
+ reducer: {
455
+ ...GeneratedReducers,
456
+ snackbar: SnackbarReducer,
457
+ },
458
+ middleware: (getDefaultMiddleware) =>
459
+ getDefaultMiddleware().concat([sagaMiddleWare]),
460
+
461
+ })
462
+ sagaMiddleWare.run(mySaga)
463
+
464
+ export type RootState = ReturnType<typeof store.getState>
465
+
466
+ export type AppDispatch = typeof store.dispatch;
467
+
468
+ `;
469
+ const mainSagaCode = `
470
+ import { all, takeEvery } from "redux-saga/effects";
471
+ import genRootSaga from "../../../src-gen/redux/gen-root-saga";
472
+
473
+ export function* mySaga() {
474
+ yield all([...genRootSaga])
475
+ }
476
+ `;
477
+ const hooksCode = `
478
+ import { useDispatch, useSelector } from 'react-redux'
479
+ import type { TypedUseSelectorHook } from 'react-redux'
480
+ import type { RootState, AppDispatch } from './store/store'
481
+
482
+ // Use throughout your app instead of plain useDispatch and useSelector
483
+ export const useAppDispatch: () => AppDispatch = useDispatch
484
+ export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector
485
+ `;