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,483 @@
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 FrontEndReactApiHelper {
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}/reactConfig.json`));
24
+ rnSectionList.forEach(rnSection => {
25
+ const rnFolderPath = path_1.default.join(this.folderPath, `module/${rnSection.name}/react`);
26
+ rnSection.reactModuleList.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/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
+ const apiUrl = import.meta.env.VITE_API_URL;
43
+ ${currentApiSection.expressSectionList.reduce((acc, curVal) => {
44
+ acc = acc + `export const ${curVal.name}Api = axios.create({
45
+ baseURL: apiUrl||'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 reactSectionList = JSON.parse(fileHelper_1.FileHelper.readFile(`${this.configPath}/reactConfig.json`));
60
+ reactSectionList.forEach(reactSection => {
61
+ const rnFolderPath = path_1.default.join(this.folderPath, `module/${reactSection.name}/react`);
62
+ let currentApiSection = apiMainSectionList.find(item => item.name === reactSection.name);
63
+ reactSection.reactModuleList.forEach(rnModule => {
64
+ const rnProjectPath = path_1.default.join(rnFolderPath, rnModule.name);
65
+ currentApiSection.expressSectionList.forEach(expressSection => {
66
+ const rnApiPath = path_1.default.join(rnProjectPath, `src/src-gen/redux/${expressSection.name}`);
67
+ const rnReducerPath = path_1.default.join(rnProjectPath, `src/src-gen/redux/gen-reducers.ts`);
68
+ const reducerCode = this.generateReducersCode(expressSection.apiSectionList, expressSection.name);
69
+ const rnSagaPath = path_1.default.join(rnProjectPath, `src/src-gen/redux/gen-root-saga.ts`);
70
+ const rootSagaCode = this.generateRootSagaCode(expressSection.apiSectionList, expressSection.name);
71
+ fileHelper_1.FileHelper.writeFile(rnReducerPath, reducerCode);
72
+ fileHelper_1.FileHelper.writeFile(rnSagaPath, rootSagaCode);
73
+ expressSection.apiSectionList.forEach(apiSection => {
74
+ const apiSectionSlicePath = path_1.default.join(rnApiPath, apiSection.name, `${apiSection.name}Slice.ts`);
75
+ const apiSectionDataPath = path_1.default.join(rnApiPath, apiSection.name, `data.ts`);
76
+ const apiSectionActionPath = path_1.default.join(rnApiPath, apiSection.name, `action.ts`);
77
+ const apiSectionSagaPath = path_1.default.join(rnApiPath, apiSection.name, `${apiSection.name}Saga.ts`);
78
+ const sliceCode = this.generateSliceCode(apiSection);
79
+ const dataCode = this.generateApiDatacode(apiSection);
80
+ const actionCode = this.generateApiActioncode(apiSection, expressSection);
81
+ const sagaCode = this.generateSagaCode(apiSection);
82
+ fileHelper_1.FileHelper.writeFile(apiSectionSlicePath, sliceCode);
83
+ if (!this.isEmptyOrWhitespace(dataCode)) {
84
+ fileHelper_1.FileHelper.writeFile(apiSectionDataPath, dataCode);
85
+ }
86
+ fileHelper_1.FileHelper.writeFile(apiSectionActionPath, actionCode);
87
+ fileHelper_1.FileHelper.writeFile(apiSectionSagaPath, sagaCode);
88
+ });
89
+ });
90
+ });
91
+ });
92
+ }
93
+ isEmptyOrWhitespace(str) {
94
+ return str.trim().length === 0;
95
+ }
96
+ generateSliceCode(apiSection) {
97
+ const filteredApiListForData = apiSection.apiList.filter(api => {
98
+ const inputKeyList = Object.keys(api.input);
99
+ const outputKeyList = Object.keys(api.output);
100
+ return inputKeyList.length > 0 || outputKeyList.length > 0;
101
+ });
102
+ const code = `
103
+ import { createSlice, PayloadAction } from "@reduxjs/toolkit";
104
+
105
+
106
+ ${filteredApiListForData.length > 0 ? `import { ${filteredApiListForData.reduce((acc, curVal) => {
107
+ const inputKeyList = Object.keys(curVal.input);
108
+ const outputKeyList = Object.keys(curVal.output);
109
+ const inputDataTypeName = (`${apiSection.name}_${curVal.name}_Input`).toUpperCase();
110
+ const outputDataTypeName = (`${apiSection.name}_${curVal.name}_Output`).toUpperCase();
111
+ acc = acc + `${inputKeyList.length > 0 ? inputDataTypeName + ',' : ''}`;
112
+ acc = acc + `${outputKeyList.length > 0 ? outputDataTypeName + ',' : ''}`;
113
+ return acc;
114
+ }, '')} } from "./data";` : ''}
115
+
116
+ ${apiSection.apiList.reduce((acc, curVal) => {
117
+ var _a, _b, _c;
118
+ if ((_a = curVal === null || curVal === void 0 ? void 0 : curVal.directOutput) === null || _a === void 0 ? void 0 : _a.name) {
119
+ 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("->");
120
+ console.log(dataName, moduleName, "DataName...........");
121
+ if (dataName) {
122
+ acc = acc + `import {${dataName === null || dataName === void 0 ? void 0 : dataName.replace("[]", "")}} from "../../../data/${moduleName}";`;
123
+ }
124
+ }
125
+ return acc;
126
+ }, '')}
127
+
128
+
129
+ import { ApiStatus } from "../../../data/common";
130
+ interface ${apiSection.name}State {
131
+ ${apiSection.apiList.reduce((acc, curVal) => {
132
+ var _a, _b;
133
+ 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("->")) || [];
134
+ acc = acc + `${curVal.name}: {
135
+ data: ${Object.keys(curVal.output).length > 0 ? `${apiSection.name.toUpperCase()}_${curVal.name.toUpperCase()}_OUTPUT` : dataName ? dataName : "any"},\n
136
+ status: ApiStatus,
137
+ error:string|null
138
+ }
139
+ `;
140
+ return acc;
141
+ }, "")}
142
+ }
143
+
144
+ const initialState: ${apiSection.name}State = {
145
+ ${apiSection.apiList.reduce((acc, curVal) => {
146
+ var _a, _b;
147
+ 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("->")) || [];
148
+ const isOutputDataArray = (dataName || "").includes("[]");
149
+ acc = acc + `${curVal.name}:{
150
+ data: ${Object.keys(curVal.output).length > 0 ? `new ${apiSection.name.toUpperCase()}_${curVal.name.toUpperCase()}_OUTPUT()` : (dataName && !isOutputDataArray) ? `new ${dataName}()` : (dataName && isOutputDataArray) ? '[]' : "null"},
151
+ status: ApiStatus.Idle,
152
+ error: null
153
+ },\n`;
154
+ return acc;
155
+ }, "")}
156
+ }
157
+
158
+ export const ${apiSection.name}Slice = createSlice({
159
+ name: "${apiSection.name}",
160
+ initialState,
161
+ reducers: {
162
+ reset${apiSection.name}Reducer: () => initialState,
163
+ ${apiSection.apiList.reduce((acc, curVal, currentIndex) => {
164
+ const inputKeyList = Object.keys(curVal.input);
165
+ const inputDataTypeName = (`${apiSection.name}_${curVal.name}_Input`).toUpperCase();
166
+ acc = acc + `
167
+ ${curVal.name}Action:(state:any, ${inputKeyList.length > 0 ? `payload:PayloadAction<${inputDataTypeName}>` : ``}) => {
168
+ state.${curVal.name}.status = ApiStatus.Loading;
169
+ state.${curVal.name}.error = '';
170
+ },
171
+ ${curVal.name}SuccessAction:(state:any, payload:any) => {
172
+ state.${curVal.name}.status = ApiStatus.Success;
173
+ state.${curVal.name}.data = payload.payload;
174
+ },
175
+ ${curVal.name}ErrorAction:(state:any, payload:any) => {
176
+ state.${curVal.name}.status = ApiStatus.Failed;
177
+ state.${curVal.name}.error = payload.error;
178
+ },
179
+ `;
180
+ return acc;
181
+ }, '')}
182
+ }
183
+
184
+ });
185
+
186
+ export const {reset${apiSection.name}Reducer,${apiSection.apiList.reduce((acc, curVal, currentIndex) => {
187
+ acc = acc + `
188
+ ${curVal.name}Action,${curVal.name}SuccessAction,${curVal.name}ErrorAction,
189
+ `;
190
+ return acc;
191
+ }, '')}} = ${apiSection.name}Slice.actions;
192
+ export default ${apiSection.name}Slice.reducer;
193
+ `;
194
+ return code;
195
+ }
196
+ generateSagaCode(apiSection) {
197
+ const code = `
198
+ import { put, takeLatest } from "redux-saga/effects";
199
+ import { PayloadAction } from "@reduxjs/toolkit";
200
+
201
+
202
+ import { ${apiSection.apiList.reduce((acc, curVal) => {
203
+ acc = acc + `${curVal.name}Api,`;
204
+ return acc;
205
+ }, '')} }from './action';
206
+
207
+ import { ${apiSection.apiList.reduce((acc, curVal) => {
208
+ acc = acc + `${curVal.name}SuccessAction,${curVal.name}ErrorAction,`;
209
+ return acc;
210
+ }, '')} } from "./${apiSection.name}Slice";
211
+
212
+ ${apiSection.apiList.reduce((acc, curVal) => {
213
+ const inputKeyList = Object.keys(curVal.input);
214
+ acc = acc + `
215
+ function* ${curVal.name}Saga(action: PayloadAction<any>): any {
216
+ try {
217
+ const response: any = yield ${curVal.name}Api(${inputKeyList.length > 0 ? `action.payload` : ``})
218
+ yield put(${curVal.name}SuccessAction(response.data))
219
+ } catch(e: any) {
220
+ yield put(${curVal.name}ErrorAction(e));
221
+ }
222
+ }
223
+
224
+ export function* watch${apiSection.name}${curVal.name}() {
225
+ yield takeLatest("${apiSection.name}/${curVal.name}Action", ${curVal.name}Saga);
226
+ }
227
+ `;
228
+ return acc;
229
+ }, '')}
230
+
231
+ `;
232
+ return code;
233
+ }
234
+ generateReducersCode(apiSectionList, sectionName) {
235
+ const code = `
236
+ ${apiSectionList.reduce((acc, curVal) => {
237
+ acc = acc + `
238
+ import ${curVal.name}Reducer from './${sectionName}/${curVal.name}/${curVal.name}Slice';\n`;
239
+ return acc;
240
+ }, '')}
241
+
242
+ export const GeneratedReducers = {
243
+ ${apiSectionList.reduce((acc, curVal) => {
244
+ acc = acc + `${curVal.name.toLowerCase()}: ${curVal.name}Reducer,`;
245
+ return acc;
246
+ }, '')}
247
+ }
248
+ `;
249
+ return code;
250
+ }
251
+ generateApiActioncode(apiSection, expressSection) {
252
+ const filteredApiListForData = apiSection.apiList.filter(api => {
253
+ const inputKeyList = Object.keys(api.input);
254
+ const outputKeyList = Object.keys(api.output);
255
+ return inputKeyList.length > 0 || outputKeyList.length > 0;
256
+ });
257
+ const code = `
258
+ import { createAsyncThunk } from "@reduxjs/toolkit";
259
+ import axios, { AxiosError } from 'axios';
260
+ import {${expressSection.name}Api} from "../../../../remote-api-point";
261
+ ${filteredApiListForData.length > 0 ? `import { ${filteredApiListForData.reduce((acc, curVal) => {
262
+ const inputKeyList = Object.keys(curVal.input);
263
+ const outputKeyList = Object.keys(curVal.output);
264
+ const inputDataTypeName = (`${apiSection.name}_${curVal.name}_Input`).toUpperCase();
265
+ const outputDataTypeName = (`${apiSection.name}_${curVal.name}_Output`).toUpperCase();
266
+ acc = acc + `${inputKeyList.length > 0 ? inputDataTypeName + ',' : ''}`;
267
+ acc = acc + `${outputKeyList.length > 0 ? outputDataTypeName + ',' : ''}`;
268
+ return acc;
269
+ }, '')} } from "./data";` : ''}
270
+
271
+ ${apiSection.apiList.reduce((acc, curVal) => {
272
+ var _a, _b, _c;
273
+ if ((_a = curVal === null || curVal === void 0 ? void 0 : curVal.directOutput) === null || _a === void 0 ? void 0 : _a.name) {
274
+ 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("->");
275
+ console.log(dataName, moduleName, "DataName...........");
276
+ if (dataName) {
277
+ acc = acc + `import {${dataName === null || dataName === void 0 ? void 0 : dataName.replace("[]", "")}} from "../../../data/${moduleName}";`;
278
+ }
279
+ }
280
+ return acc;
281
+ }, '')}
282
+
283
+
284
+
285
+
286
+
287
+ const showError = (err: AxiosError) => {
288
+ const errorResponse: any = err.response?.data || {};
289
+ if (err.response?.data) {
290
+ if (typeof (err.response?.data) == "string") {
291
+ return err.response?.data
292
+ } else {
293
+ return Object.keys(err.response?.data).reduce((acc, currVal) => {
294
+ acc = acc + errorResponse[currVal];
295
+ return acc;
296
+ }, "")
297
+ }
298
+ }
299
+ else {
300
+ return err.message
301
+ }
302
+ }
303
+
304
+
305
+ ${apiSection.apiList.reduce((acc, curVal) => {
306
+ var _a, _b;
307
+ const inputKeyList = Object.keys(curVal.input);
308
+ const outputKeyList = Object.keys(curVal.output);
309
+ const inputDataTypeName = (`${apiSection.name}_${curVal.name}_Input`).toUpperCase();
310
+ const outputDataTypeName = (`${apiSection.name}_${curVal.name}_Output`).toUpperCase();
311
+ 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("->")) || [];
312
+ acc = acc + `
313
+
314
+
315
+ export const ${curVal.name}Api = async (${inputKeyList.length > 0 ? `input: ${inputDataTypeName},` : ``} ) => {
316
+ 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()}'}` : ''});
317
+ }
318
+
319
+ 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) => {
320
+ try {
321
+ //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()}'}` : ''});
322
+ const { data } = await ${curVal.name}Api(${inputKeyList.length > 0 ? `${curVal.type == 'post' ? 'input' : 'input'}` : ''});
323
+ return output(data);
324
+ } catch (err: any) {
325
+ return error(showError(err));
326
+ }
327
+ }
328
+ `;
329
+ return acc;
330
+ }, '')}
331
+
332
+ `;
333
+ return code;
334
+ }
335
+ generateRootSagaCode(apiSectionList, expressSectionName) {
336
+ const code = `
337
+ import { all, fork } from "redux-saga/effects";
338
+ ${apiSectionList.reduce((acc, curVal) => {
339
+ acc = acc + `
340
+ import{
341
+ ${curVal.apiList.reduce((apiAcc, apiCurVal) => {
342
+ apiAcc = apiAcc + `
343
+ watch${curVal.name}${apiCurVal.name},
344
+ `;
345
+ return apiAcc;
346
+ }, '')}
347
+ } from './${expressSectionName}/${curVal.name}/${curVal.name}Saga';\n
348
+ `;
349
+ return acc;
350
+ }, '')}
351
+
352
+
353
+
354
+
355
+ const genRootSaga = [
356
+
357
+ ${apiSectionList.reduce((acc, curVal) => {
358
+ acc = acc + `
359
+
360
+ ${curVal.apiList.reduce((apiAcc, apiCurVal) => {
361
+ apiAcc = apiAcc + `
362
+ watch${curVal.name}${apiCurVal.name}()
363
+ ,
364
+ `;
365
+ return apiAcc;
366
+ }, '')}
367
+
368
+ `;
369
+ return acc;
370
+ }, '')}
371
+
372
+ ];
373
+
374
+ export default genRootSaga;
375
+ `;
376
+ return code;
377
+ }
378
+ getApiName(apiName) {
379
+ return apiName.replace(/[A-Z]/g, m => "-" + m.toLowerCase()).replace(/^-/, '');
380
+ }
381
+ capitalizeFirstLetter(val) {
382
+ return val.charAt(0).toUpperCase() + val.slice(1);
383
+ }
384
+ generateApiDatacode(apiSection) {
385
+ const expressHelper = new ExpressHelper_1.default();
386
+ return expressHelper.generateSampleApiDataCode(apiSection, "react-native");
387
+ }
388
+ }
389
+ exports.default = FrontEndReactApiHelper;
390
+ const commonApiDataCode = `
391
+ export enum ApiStatus {
392
+ Success="Success",
393
+ Loading="Loading",
394
+ Failed="Failed",
395
+ Idle="Idle"
396
+ }
397
+ `;
398
+ const snackbarSliceCode = `
399
+ import { createAsyncThunk, createSlice } from "@reduxjs/toolkit";
400
+
401
+
402
+ export interface SnackbarRequest {
403
+ type: SnackbarType,
404
+ message: string,
405
+ timing: number
406
+ }
407
+
408
+ export enum SnackbarType {
409
+ Success="success",
410
+ Error="error",
411
+ }
412
+
413
+
414
+ interface SnackbarState {
415
+ snackbarRequestList: SnackbarRequest[]
416
+ }
417
+
418
+ const initialState:SnackbarState = {
419
+ snackbarRequestList: []
420
+ }
421
+
422
+
423
+ export const snackbarSlice= createSlice({
424
+ name: "Snackbar",
425
+ initialState: initialState,
426
+ reducers: {
427
+ addSnackbar: (state, action: {type:String,payload: SnackbarRequest}) => {
428
+ state.snackbarRequestList.push(action.payload);
429
+ },
430
+ removeLastSnackbar: (state) => {
431
+ state.snackbarRequestList.pop();
432
+ },
433
+ }
434
+ });
435
+
436
+
437
+ export const {addSnackbar,removeLastSnackbar} = snackbarSlice.actions;
438
+
439
+ export default snackbarSlice.reducer;
440
+ `;
441
+ const mainStoreCode = `
442
+
443
+ import { configureStore } from '@reduxjs/toolkit'
444
+ import { GeneratedReducers } from '../../src-gen/redux/gen-reducers'
445
+ import SnackbarReducer from './snackbar/snackbarSlice'
446
+ import createSagaMiddleware from 'redux-saga';
447
+ import rootSaga from '../../src-gen/redux/gen-root-saga';
448
+ import { mySaga } from './saga';
449
+ const reduxSagaMiddleWareOptions = {};
450
+ const sagaMiddleWare = createSagaMiddleware(reduxSagaMiddleWareOptions);
451
+ export const store = configureStore({
452
+ reducer: {
453
+ ...GeneratedReducers,
454
+ snackbar: SnackbarReducer,
455
+ },
456
+ middleware: (getDefaultMiddleware) =>
457
+ getDefaultMiddleware().concat([sagaMiddleWare]),
458
+
459
+ })
460
+ sagaMiddleWare.run(mySaga)
461
+
462
+ export type RootState = ReturnType<typeof store.getState>
463
+
464
+ export type AppDispatch = typeof store.dispatch;
465
+
466
+ `;
467
+ const mainSagaCode = `
468
+ import { all, takeEvery } from "redux-saga/effects";
469
+ import genRootSaga from "../../src-gen/redux/gen-root-saga";
470
+
471
+ export function* mySaga() {
472
+ yield all([...genRootSaga])
473
+ }
474
+ `;
475
+ const hooksCode = `
476
+ import { useDispatch, useSelector } from 'react-redux'
477
+ import type { TypedUseSelectorHook } from 'react-redux'
478
+ import type { RootState, AppDispatch } from './store/store'
479
+
480
+ // Use throughout your app instead of plain useDispatch and useSelector
481
+ export const useAppDispatch: () => AppDispatch = useDispatch
482
+ export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector
483
+ `;
@@ -0,0 +1,143 @@
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 path_1 = __importDefault(require("path"));
7
+ const fileHelper_1 = require("./fileHelper");
8
+ const CommonHelper_1 = require("./CommonHelper");
9
+ const BlendMongoGrammarHelper_1 = __importDefault(require("./grammarHelper/BlendMongoGrammarHelper"));
10
+ class MongoHelper {
11
+ constructor() {
12
+ this.baseRoute = 'api';
13
+ this.folderPath = path_1.default.join(process.cwd());
14
+ this.folderName = path_1.default.basename(this.folderPath);
15
+ this.basicFilePath = path_1.default.join(this.folderPath, `${this.folderName}.basic`);
16
+ this.configPath = path_1.default.join(this.folderPath, '.basicConfig');
17
+ this.basicProjectContent = JSON.parse(fileHelper_1.FileHelper.readFile(`${this.configPath}/basicConfig.json`) || "{}");
18
+ }
19
+ doMongoOperations(basicFileContent) {
20
+ // Normalize and trim the content to handle extra spaces
21
+ this.basicFileContent = basicFileContent.replace(/\s+/g, ' ').trim();
22
+ this.createMongoSpec();
23
+ this.parseSpec();
24
+ }
25
+ createMongoSpec() {
26
+ this.basicProjectContent.sectionList.forEach(section => {
27
+ const sectionName = section.name;
28
+ const sectionFolderPath = path_1.default.join(this.folderPath, 'spec', sectionName);
29
+ const mongoFolderPath = path_1.default.join(sectionFolderPath, 'mongo');
30
+ fileHelper_1.FileHelper.ensureDir(mongoFolderPath);
31
+ section.mongoModuleList.forEach(module => {
32
+ const mongoFilePath = path_1.default.join(mongoFolderPath, `${module.name}.mongo`);
33
+ if (!fileHelper_1.FileHelper.exists(mongoFilePath)) {
34
+ fileHelper_1.FileHelper.writeFile(mongoFilePath, `module ${module.name}`);
35
+ console.log(`Created mongo file: ${mongoFilePath}`);
36
+ }
37
+ else {
38
+ }
39
+ });
40
+ });
41
+ }
42
+ parseSpec() {
43
+ let sectionMongoObjList = [];
44
+ this.basicProjectContent.sectionList.forEach(section => {
45
+ const sectionName = section.name;
46
+ const sectionFolderPath = path_1.default.join(this.folderPath, 'spec', sectionName);
47
+ let mainMongoObjList = [];
48
+ const mongoFolderPath = path_1.default.join(sectionFolderPath, 'mongo');
49
+ console.log(mongoFolderPath, "mongo");
50
+ section.mongoModuleList.forEach(module => {
51
+ const filePath = path_1.default.join(mongoFolderPath, `${module.name}.mongo`);
52
+ const specCode = fileHelper_1.FileHelper.readFile(filePath);
53
+ const mongoHelper = new BlendMongoGrammarHelper_1.default();
54
+ const json = mongoHelper.parseBlendMongo(specCode);
55
+ mainMongoObjList.push(json.json);
56
+ });
57
+ let sectionObj = {
58
+ name: sectionName,
59
+ sectionDbList: mainMongoObjList
60
+ };
61
+ sectionMongoObjList.push(sectionObj);
62
+ });
63
+ fileHelper_1.FileHelper.writeFile(`${this.configPath}/mongoConfig.json`, JSON.stringify(sectionMongoObjList));
64
+ }
65
+ parseJSONAndGenerateFiles() {
66
+ try {
67
+ const sectionMongoList = JSON.parse(fileHelper_1.FileHelper.readFile(`${this.configPath}/mongoConfig.json`));
68
+ sectionMongoList.map(sectionMongo => {
69
+ const sectionPath = path_1.default.join(this.folderPath, `module/${sectionMongo.name}`);
70
+ sectionMongo.sectionDbList.forEach(moduleDb => {
71
+ this.basicProjectContent.sectionList.forEach(section => {
72
+ section.expressModuleList.forEach(expressModule => {
73
+ if (section.name == sectionMongo.name) {
74
+ const expressDbPath = `${this.folderPath}/module/${section.name}/express/${section.name}-api/src-gen/models/${expressModule.name}/${moduleDb.dbName}`;
75
+ moduleDb.collectionList.forEach(collection => {
76
+ const expressCollectionPath = `${expressDbPath}/${collection.name}.ts`;
77
+ const finalCode = this.generateCollectionCode(collection, moduleDb.dbName);
78
+ fileHelper_1.FileHelper.writeFile(expressCollectionPath, finalCode);
79
+ });
80
+ const dbFilePath = `${this.folderPath}/module/${section.name}/express/${section.name}-api/src-gen/models/${expressModule.name}/Database.ts`;
81
+ const dbCode = this.generateDatabaseCodeFile(sectionMongo.sectionDbList);
82
+ fileHelper_1.FileHelper.writeFile(dbFilePath, dbCode);
83
+ const dbInterfaceFilePath = `${this.folderPath}/module/${section.name}/express/${section.name}-api/src-gen/models/${expressModule.name}/${moduleDb.dbName}/interfaces.ts`;
84
+ const interfaceCode = this.generateCollectionInterfaceCode(moduleDb.collectionList, moduleDb.dbName);
85
+ fileHelper_1.FileHelper.writeFile(dbInterfaceFilePath, interfaceCode);
86
+ }
87
+ });
88
+ });
89
+ });
90
+ });
91
+ }
92
+ catch (e) {
93
+ }
94
+ }
95
+ generateCollectionCode(collection, dbName) {
96
+ const interfaceName = `I${collection.name}_${dbName}`;
97
+ const code = `
98
+ import Database from '../Database';
99
+ import { Schema, model, connect, Types } from 'mongoose';\n
100
+ import {${interfaceName}} from './interfaces';
101
+ const ${collection.name}Schema = new Schema<${interfaceName}>({
102
+ ${collection.fields.reduce((acc, currVal) => {
103
+ acc = acc + `${currVal.name}: {type: ${currVal.type} ${currVal.required ? ',required:true' : ''} ${currVal.index ? ",index:true" : ""}${currVal.unique ? ',unique:true' : ''}${currVal.ref ? `,ref:"${currVal.ref}"` : ''}},\n\t`;
104
+ return acc;
105
+ }, "")}
106
+ });
107
+
108
+ const ${collection.name} = Database.${dbName}Db.model<${interfaceName}>('${collection.name}', ${collection.name}Schema);
109
+
110
+ export default ${collection.name};
111
+ `;
112
+ return code;
113
+ }
114
+ generateCollectionInterfaceCode(collectionList, dbName) {
115
+ const code = 'import { ObjectId } from "mongoose";\n' + collectionList.reduce((acc, collection) => {
116
+ acc = acc +
117
+ `
118
+ export interface I${collection.name}_${dbName} {
119
+ ${collection.fields.reduce((acc, currVal) => {
120
+ acc = acc + `${currVal.name}: ${currVal.type.replace("Types.", "")},\n\t\t\t`;
121
+ return acc;
122
+ }, "")}
123
+ };\n
124
+ `;
125
+ return acc;
126
+ }, "");
127
+ return code;
128
+ }
129
+ generateDatabaseCodeFile(dbList) {
130
+ const code = `
131
+ import mongoose from "mongoose";
132
+
133
+ export default class Database {
134
+ ${dbList.reduce((acc, db) => {
135
+ acc = acc + `static ${db.dbName}Db = mongoose.connection.useDb('${CommonHelper_1.CommonHelper.hyphenSepratedString(db.dbName)}'); \n`;
136
+ return acc;
137
+ }, '')}
138
+ }
139
+ `;
140
+ return code;
141
+ }
142
+ }
143
+ exports.default = MongoHelper;