@simitgroup/simpleapp-generator 1.0.32 → 1.0.35

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 (281) hide show
  1. package/.vscode/settings.json +3 -0
  2. package/README.md +185 -16
  3. package/buildinschemas copy/autoincreament.autoinc.jsonschema.json +39 -0
  4. package/buildinschemas copy/branch.branch.jsonschema.json +41 -0
  5. package/buildinschemas copy/docnoformat.docno.jsonschema.json +41 -0
  6. package/buildinschemas copy/organization.org.jsonschema.json +50 -0
  7. package/buildinschemas copy/permission.perm.jsonschema.json +23 -0
  8. package/buildinschemas copy/permission.perm.jsonschema.try.json +25 -0
  9. package/buildinschemas copy/tenant.tenant.jsonschema.json +21 -0
  10. package/buildinschemas copy/tenant.tenant.jsonschema.try.json +27 -0
  11. package/buildinschemas copy/user.user.jsonschema.json +31 -0
  12. package/dist/buildinschemas/autoincreament.d.ts +3 -0
  13. package/dist/buildinschemas/autoincreament.d.ts.map +1 -0
  14. package/dist/buildinschemas/autoincreament.js +36 -0
  15. package/dist/buildinschemas/autoincreament.js.map +1 -0
  16. package/dist/buildinschemas/branch.d.ts +3 -0
  17. package/dist/buildinschemas/branch.d.ts.map +1 -0
  18. package/dist/buildinschemas/branch.js +41 -0
  19. package/dist/buildinschemas/branch.js.map +1 -0
  20. package/dist/buildinschemas/docnoformat.d.ts +3 -0
  21. package/dist/buildinschemas/docnoformat.d.ts.map +1 -0
  22. package/dist/buildinschemas/docnoformat.js +60 -0
  23. package/dist/buildinschemas/docnoformat.js.map +1 -0
  24. package/dist/buildinschemas/index.d.ts +8 -0
  25. package/dist/buildinschemas/index.d.ts.map +1 -0
  26. package/dist/buildinschemas/index.js +18 -0
  27. package/dist/buildinschemas/index.js.map +1 -0
  28. package/dist/buildinschemas/organization.d.ts +3 -0
  29. package/dist/buildinschemas/organization.d.ts.map +1 -0
  30. package/dist/buildinschemas/organization.js +34 -0
  31. package/dist/buildinschemas/organization.js.map +1 -0
  32. package/dist/buildinschemas/permission.d.ts +3 -0
  33. package/dist/buildinschemas/permission.d.ts.map +1 -0
  34. package/dist/buildinschemas/permission.js +34 -0
  35. package/dist/buildinschemas/permission.js.map +1 -0
  36. package/dist/buildinschemas/tenant.d.ts +3 -0
  37. package/dist/buildinschemas/tenant.d.ts.map +1 -0
  38. package/dist/buildinschemas/tenant.js +41 -0
  39. package/dist/buildinschemas/tenant.js.map +1 -0
  40. package/dist/buildinschemas/user.d.ts +3 -0
  41. package/dist/buildinschemas/user.d.ts.map +1 -0
  42. package/dist/buildinschemas/user.js +31 -0
  43. package/dist/buildinschemas/user.js.map +1 -0
  44. package/dist/constant.d.ts +4 -0
  45. package/dist/constant.d.ts.map +1 -0
  46. package/dist/constant.js +2 -1
  47. package/dist/constant.js.map +1 -1
  48. package/dist/framework.d.ts +10 -0
  49. package/dist/framework.d.ts.map +1 -0
  50. package/dist/framework.js +120 -68
  51. package/dist/framework.js.map +1 -1
  52. package/dist/generate-allow-changebackend.js +305 -0
  53. package/dist/generate-allow-changebackend.js.map +1 -0
  54. package/dist/generate.d.ts +2 -0
  55. package/dist/generate.d.ts.map +1 -0
  56. package/dist/generate.js +310 -230
  57. package/dist/generate.js.map +1 -1
  58. package/dist/index.d.ts +3 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +84 -20
  61. package/dist/index.js.map +1 -1
  62. package/dist/libs.d.ts +2 -0
  63. package/dist/libs.d.ts.map +1 -0
  64. package/dist/processors/groupsbuilder.js +2 -0
  65. package/dist/processors/groupsbuilder.js.map +1 -0
  66. package/dist/processors/jsonschemabuilder.d.ts +4 -0
  67. package/dist/processors/jsonschemabuilder.d.ts.map +1 -0
  68. package/dist/processors/jsonschemabuilder.js +146 -172
  69. package/dist/processors/jsonschemabuilder.js.map +1 -1
  70. package/dist/schematype/baseschema.js +25 -0
  71. package/dist/schematype/baseschema.js.map +1 -0
  72. package/dist/schematype/default.js +2 -0
  73. package/dist/schematype/default.js.map +1 -0
  74. package/dist/schematype/index.js +12 -0
  75. package/dist/schematype/index.js.map +1 -0
  76. package/dist/schematype/primarymasterdata.js +38 -0
  77. package/dist/schematype/primarymasterdata.js.map +1 -0
  78. package/dist/schematype/simple.js +24 -0
  79. package/dist/schematype/simple.js.map +1 -0
  80. package/dist/schematype/simplemasterdata.js +31 -0
  81. package/dist/schematype/simplemasterdata.js.map +1 -0
  82. package/dist/schematype/transaction.js +74 -0
  83. package/dist/schematype/transaction.js.map +1 -0
  84. package/dist/storage.d.ts +3 -0
  85. package/dist/storage.d.ts.map +1 -0
  86. package/dist/storage.js +2 -2
  87. package/dist/storage.js.map +1 -1
  88. package/dist/type.d.ts +164 -0
  89. package/dist/type.d.ts.map +1 -0
  90. package/dist/type.js +16 -1
  91. package/dist/type.js.map +1 -1
  92. package/dist/validation.d.ts +1 -0
  93. package/dist/validation.d.ts.map +1 -0
  94. package/documentation/designconcept.bpmn +349 -0
  95. package/documentation/documentation.png +0 -0
  96. package/documentation/infra.drawio +141 -0
  97. package/documentation/infra.png +0 -0
  98. package/documentation/management.drawio +57 -0
  99. package/documentation/stack.drawio +106 -0
  100. package/package.json +3 -1
  101. package/src/buildinschemas/autoincreament.ts +34 -0
  102. package/src/buildinschemas/branch.ts +39 -0
  103. package/src/buildinschemas/docnoformat.ts +58 -0
  104. package/src/buildinschemas/index.ts +7 -0
  105. package/src/buildinschemas/organization.ts +31 -0
  106. package/src/buildinschemas/permission.ts +31 -0
  107. package/src/buildinschemas/tenant.ts +38 -0
  108. package/src/buildinschemas/user.ts +28 -0
  109. package/src/constant.ts +2 -1
  110. package/src/framework.ts +126 -67
  111. package/src/generate.ts +327 -266
  112. package/src/generate.ts.backup +339 -0
  113. package/src/index.ts +93 -18
  114. package/src/processors/jsonschemabuilder.ts +199 -226
  115. package/src/processors/jsonschemabuilder.ts-old +383 -0
  116. package/src/storage.ts +1 -1
  117. package/src/type.ts +94 -27
  118. package/templates/basic/nest/controller.ts.eta +255 -0
  119. package/templates/basic/nest/default.ts.eta +42 -0
  120. package/templates/basic/{model.eta → nest/model.ts.eta} +18 -5
  121. package/templates/basic/nest/processor.ts.eta +129 -0
  122. package/templates/basic/nest/service.ts.eta +64 -0
  123. package/templates/basic/{type.eta → nest/type.ts.eta} +3 -3
  124. package/templates/basic/nuxt/default.ts.eta +42 -0
  125. package/templates/basic/{pageindex.vue.eta → nuxt/pages.crud.vue.eta} +85 -22
  126. package/templates/basic/nuxt/simpleapp.doc.ts.eta +11 -0
  127. package/templates/basic/nuxt/simpleapp.generate.client.ts.eta +212 -0
  128. package/templates/nest/.env.eta +31 -0
  129. package/templates/nest/.gitignore.eta +40 -0
  130. package/templates/nest/src/app.controller.ts.eta +19 -0
  131. package/templates/nest/src/app.module.ts.eta +77 -0
  132. package/templates/nest/src/app.service.ts.eta +9 -0
  133. package/templates/nest/src/main.ts.eta +58 -0
  134. package/templates/nest/src/simpleapp/generate/apischemas/index.ts.eta +16 -0
  135. package/templates/nest/src/simpleapp/generate/commons/decorators/appuser.decorator.ts.eta +8 -0
  136. package/templates/nest/src/simpleapp/generate/commons/dicts/foreignkeys.ts.eta +1 -0
  137. package/templates/nest/src/simpleapp/generate/commons/docnogenerator.service.ts.eta +101 -0
  138. package/templates/nest/src/simpleapp/generate/commons/exceptions/SimpleAppExceptionFilter.ts.eta +39 -0
  139. package/templates/nest/src/simpleapp/generate/commons/interceptors/response.interceptor.ts.eta +38 -0
  140. package/templates/nest/src/simpleapp/generate/commons/middlewares/tenant.middleware.ts.eta +88 -0
  141. package/templates/nest/{Workflow.eta → src/simpleapp/generate/commons/providers/workflow.provider.ts.etax} +20 -14
  142. package/templates/nest/src/simpleapp/generate/commons/roles/roles.decorator.ts.eta +6 -0
  143. package/templates/nest/src/simpleapp/generate/commons/roles/roles.enum.ts.eta +28 -0
  144. package/templates/nest/src/simpleapp/generate/commons/roles/roles.group.ts.eta +10 -0
  145. package/templates/nest/src/simpleapp/generate/commons/roles/roles.guard.ts.eta +34 -0
  146. package/templates/nest/src/simpleapp/generate/commons/user.context.ts.eta +391 -0
  147. package/templates/nest/src/simpleapp/generate/controllers/simpleapp.controller.ts.eta +71 -0
  148. package/templates/nest/src/simpleapp/generate/models/perm.model.ts.eta +53 -0
  149. package/templates/nest/src/simpleapp/generate/models/tenant.model.ts.eta +45 -0
  150. package/templates/nest/src/simpleapp/generate/models/user.model.ts.eta +57 -0
  151. package/templates/nest/src/simpleapp/generate/processors/simpleapp.processor.ts.eta +624 -0
  152. package/templates/nest/src/simpleapp/generate/types/index.ts.eta +19 -0
  153. package/templates/nest/src/simpleapp/profile/profile.apischema.ts.eta +74 -0
  154. package/templates/nest/src/simpleapp/profile/profile.controller.ts.eta +110 -0
  155. package/templates/nest/src/simpleapp/profile/profile.service.ts.eta +195 -0
  156. package/templates/nest/src/simpleapp/profile/profile.types.ts.eta +18 -0
  157. package/templates/nest/src/simpleapp/services/autoinc.service.ts.eta +89 -0
  158. package/templates/nest/src/simpleapp/services/branch.service.ts.eta +66 -0
  159. package/templates/nest/src/simpleapp/services/docno.service.ts.eta +93 -0
  160. package/templates/nest/src/simpleapp/services/org.service.ts.eta +67 -0
  161. package/templates/nest/src/simpleapp/services/perm.service.ts.eta +102 -0
  162. package/templates/nest/src/simpleapp/services/tenant.service.ts.eta +69 -0
  163. package/templates/nest/src/simpleapp/services/user.service.ts.eta +66 -0
  164. package/templates/nest/src/simpleapp/simpleapp.module.ts.eta +43 -0
  165. package/templates/nuxt/.env.eta +21 -0
  166. package/templates/nuxt/.gitignore.eta +28 -0
  167. package/templates/nuxt/app.vue.eta +5 -2
  168. package/templates/nuxt/assets/css/tailwind.css.eta +35 -0
  169. package/templates/nuxt/components/CrudNestedDoc.vue.eta +164 -0
  170. package/templates/nuxt/components/CrudSimple.vue.eta +179 -0
  171. package/templates/nuxt/{components.debugdocdata.vue.eta → components/DebugDocumentData.vue.eta} +4 -1
  172. package/templates/nuxt/{components.eventmonitor.vue.eta → components/EventMonitor.vue.eta} +27 -27
  173. package/templates/nuxt/components/Invitation.vue.eta +50 -0
  174. package/templates/nuxt/components/Menus.vue.eta +58 -0
  175. package/templates/nuxt/components/PermissionInfo.vue.eta +92 -0
  176. package/templates/nuxt/components/SimpleAppAutocomplete.vue.eta +131 -0
  177. package/templates/nuxt/components/SimpleAppAutocompletemulti.vue.eta +73 -0
  178. package/templates/nuxt/components/SimpleAppCalendar.vue.eta +55 -0
  179. package/templates/nuxt/components/SimpleAppCheckbox.vue.eta +29 -0
  180. package/templates/nuxt/components/SimpleAppChip.vue.eta +28 -0
  181. package/templates/nuxt/components/SimpleAppColor.vue.eta +41 -0
  182. package/templates/nuxt/components/SimpleAppDatatable.vue.eta +20 -0
  183. package/templates/nuxt/components/SimpleAppDocumentNo.vue.eta +90 -0
  184. package/templates/nuxt/components/SimpleAppDynamicInput.vue.eta +29 -0
  185. package/templates/nuxt/components/SimpleAppEditor.vue.eta +31 -0
  186. package/templates/nuxt/components/SimpleAppForm.vue.eta +131 -0
  187. package/templates/nuxt/components/SimpleAppInputTable.vue.eta +104 -0
  188. package/templates/nuxt/components/SimpleAppList.vue.eta +38 -0
  189. package/templates/nuxt/components/SimpleAppListmulti.vue.eta +41 -0
  190. package/templates/nuxt/components/SimpleAppNumber.vue.eta +32 -0
  191. package/templates/nuxt/components/SimpleAppPassword.vue.eta +41 -0
  192. package/templates/nuxt/components/SimpleAppRadio.vue.eta +42 -0
  193. package/templates/nuxt/components/SimpleAppRating.vue.eta +41 -0
  194. package/templates/nuxt/components/SimpleAppSelect.vue.eta +38 -0
  195. package/templates/nuxt/components/SimpleAppSelectmulti.vue.eta +39 -0
  196. package/templates/nuxt/components/SimpleAppSlider.vue.eta +42 -0
  197. package/templates/nuxt/components/SimpleAppSwitch.vue.eta +30 -0
  198. package/templates/nuxt/components/SimpleAppText.vue.eta +50 -0
  199. package/templates/nuxt/components/SimpleAppTextarea.vue.eta +30 -0
  200. package/templates/nuxt/components/SimpleAppValue.vue.eta +86 -0
  201. package/templates/nuxt/components/SimpleFieldContainer.vue.eta +102 -0
  202. package/templates/nuxt/components/XorgPicker.vue.eta +66 -0
  203. package/templates/nuxt/components/helper.ts.eta +90 -0
  204. package/templates/nuxt/components/type.ts.eta +32 -0
  205. package/templates/nuxt/composables/docformat.generate.ts.eta +5 -0
  206. package/templates/nuxt/{composables.getautocomplete.ts.eta → composables/getAutocomplete.generate.ts.eta} +4 -5
  207. package/templates/nuxt/{composables.getmenus.ts.eta → composables/getMenus.generate.ts.eta} +22 -7
  208. package/templates/nuxt/composables/getOpenApi.generate.ts.eta +6 -0
  209. package/templates/nuxt/composables/getTenant.generate.ts.eta +4 -0
  210. package/templates/nuxt/composables/getUserStore.generate.ts.eta +22 -0
  211. package/templates/nuxt/composables/logout.generate.ts.eta +22 -0
  212. package/templates/nuxt/composables/roles.generate.ts.eta +48 -0
  213. package/templates/nuxt/composables/stringHelper.generate.ts.eta +5 -0
  214. package/templates/nuxt/{layouts.default.vue.eta → layouts/default.vue.eta} +2 -0
  215. package/templates/nuxt/middleware/10.acl.global.ts.eta +38 -0
  216. package/templates/nuxt/nuxt.config.ts.eta +12 -2
  217. package/templates/nuxt/pages/[xorg]/branch/index.vue.eta +102 -0
  218. package/templates/nuxt/pages/[xorg]/docnoformat/[id].vue.eta +17 -0
  219. package/templates/nuxt/pages/[xorg]/docnoformat/index.vue.eta +269 -0
  220. package/templates/nuxt/pages/[xorg]/index.vue.eta +36 -0
  221. package/templates/nuxt/pages/[xorg]/organization/index.vue.eta +148 -0
  222. package/templates/nuxt/pages/[xorg]/permission/index.vue.eta +280 -0
  223. package/templates/nuxt/pages/[xorg]/tenant/index.vue.eta +93 -0
  224. package/templates/nuxt/pages/[xorg]/user/index.vue.eta +468 -0
  225. package/templates/nuxt/pages/index.vue.eta +191 -0
  226. package/templates/nuxt/pages/login.vue.eta +21 -0
  227. package/templates/nuxt/plugins/10.simpleapp-event.ts.eta +53 -0
  228. package/templates/nuxt/plugins/20.simpleapp-userstore.ts.eta +155 -0
  229. package/templates/nuxt/plugins/50.simpleapp-client.ts.eta +23 -0
  230. package/templates/nuxt/{server.api.ts.eta → server/api/[xorg]/[...].ts.eta} +5 -2
  231. package/templates/nuxt/server/api/auth/[...].ts.eta +68 -0
  232. package/templates/nuxt/{server.api.auth.logout.ts.eta → server/api/auth/logout.ts.eta} +1 -3
  233. package/templates/nuxt/server/api/profile/[...].ts.eta +150 -0
  234. package/templates/nuxt/server/api/profile/index.ts.eta +103 -0
  235. package/templates/nuxt/simpleapp/generate/clients/SimpleAppClient.ts.eta +187 -0
  236. package/templates/nuxt/simpleapp/generate/commons/documents.ts.eta +6 -0
  237. package/templates/nuxt/simpleapp/generate/commons/events.ts.eta +5 -0
  238. package/templates/nuxt/simpleapp/generate/commons/groups.ts.eta +11 -0
  239. package/templates/nuxt/simpleapp/generate/commons/roles.ts.eta +21 -0
  240. package/templates/nuxt/types/index.ts.eta +65 -0
  241. package/templates/project/README.md +11 -0
  242. package/templates/project/build.sh.eta +17 -0
  243. package/templates/project/config.json.eta +2 -0
  244. package/templates/project/generate.ts.eta +10 -0
  245. package/templates/project/schemas/category.ts.eta +26 -0
  246. package/templates/project/schemas/index.ts.eta +5 -0
  247. package/templates/project/schemas/product.ts.eta +59 -0
  248. package/templates/project/shares/hello.ts.eta +1 -0
  249. package/templates/project/shares/index.ts.eta +2 -0
  250. package/tsconfig.json +9 -2
  251. package/tsconfig.tsbuildinfo +1 -0
  252. package/definations/category.cat.jsonschema.json +0 -55
  253. package/definations/level.lvl.jsonschema.json +0 -48
  254. package/definations/product.prd.jsonschema.json +0 -46
  255. package/templates/basic/controller.eta +0 -152
  256. package/templates/basic/module.eta +0 -22
  257. package/templates/basic/service.eta +0 -62
  258. package/templates/basic/simpleappclient.eta +0 -120
  259. package/templates/nest/SimpleAppController.eta +0 -69
  260. package/templates/nest/SimpleAppService.eta +0 -366
  261. package/templates/nest/TenantMiddleware.eta +0 -34
  262. package/templates/nest/UserProvider.eta +0 -127
  263. package/templates/nest/app.controller.eta +0 -12
  264. package/templates/nest/app.module.eta +0 -64
  265. package/templates/nest/app.service.eta +0 -8
  266. package/templates/nest/inputvalidation-exception.eta +0 -6
  267. package/templates/nest/nest.env.eta +0 -28
  268. package/templates/nest/nest.main.eta +0 -31
  269. package/templates/nuxt/components.crudsimple.vue.eta +0 -124
  270. package/templates/nuxt/components.menus.vue.eta +0 -35
  271. package/templates/nuxt/env.eta +0 -17
  272. package/templates/nuxt/pages.[xorg].index.vue.eta +0 -20
  273. package/templates/nuxt/pages.index.vue.eta +0 -72
  274. package/templates/nuxt/pages.login.vue.eta +0 -20
  275. package/templates/nuxt/plugins.simpleapp.ts.eta +0 -88
  276. package/templates/nuxt/server.api.auth[...].ts.eta +0 -233
  277. package/templates/nuxt/tailwind.css.eta +0 -49
  278. /package/templates/basic/{apischema.eta → nest/apischema.ts.eta} +0 -0
  279. /package/templates/basic/{jsonschema.eta → nest/jsonschema.ts.eta} +0 -0
  280. /package/templates/basic/{pageindexwithid.vue.eta → nuxt/pages.[id].vue.eta} +0 -0
  281. /package/templates/nest/{oauth2-redirect.eta → public_html/oauth2-redirect.html.eta} +0 -0
@@ -0,0 +1,339 @@
1
+ import * as constants from './constant'
2
+ import {readJsonSchemaBuilder} from './processors/jsonschemabuilder'
3
+ import {foreignkeys} from './storage'
4
+ import {TypeGenerateDocumentVariable,ChildModels,ModuleObject } from './type'
5
+ import { Logger, ILogObj } from "tslog";
6
+ const log: Logger<ILogObj> = new Logger();
7
+ const clc = require("cli-color");
8
+ const path = require('path');
9
+ import {mkdirSync, readdir,readFileSync,writeFileSync,existsSync,copyFileSync, readdirSync} from 'fs'
10
+ import _ from 'lodash'
11
+ import * as buildinschemas from './buildinschemas'
12
+ const { Eta } = require('eta');
13
+ const { capitalizeFirstLetter }= require('./libs');
14
+ const X_DOCUMENT_TYPE='x-document-type'
15
+ const X_DOCUMENT_NAME='x-document-name'
16
+ const X_COLLECTION_NAME='x-collection-name'
17
+ const X_PAGE_TYPE='x-page-type'
18
+ const extFb = '.xfb.json';
19
+ const extHfb = '.xhfb.json';
20
+ const extjsonschema = '.jsonschema.json';
21
+ const extgroups = '.group.json';
22
+ let jsonschemas = {};
23
+ let configs:any = {}
24
+ const docs = [];
25
+ let frontendFolder=''
26
+ let backendFolder=''
27
+ let frontendpagefolder=''
28
+ const allroles:any={}
29
+ let activatemodules:ModuleObject[]=[]
30
+ let generateTypes:any = {}
31
+ export const run = async (paraconfigs:any,genFor:string[],callback:Function) => {
32
+ configs = paraconfigs
33
+ frontendFolder=configs.frontendFolder
34
+ backendFolder=configs.backendFolder
35
+ const groupFolder = configs.groupFolder
36
+ if(genFor.includes('nest')){
37
+ generateTypes['nest']=backendFolder
38
+ }
39
+ if(genFor.includes('nuxt')){
40
+ generateTypes['nuxt']=frontendFolder
41
+ }
42
+
43
+ //
44
+ frontendpagefolder = `${frontendFolder}/pages/[xorg]`
45
+ Object.keys(buildinschemas).forEach(schemaname=>{
46
+ await processSchema(schemaname,buildinschemas[schemaname])
47
+ })
48
+
49
+ // const buildinschemas = readdirSync(constants.buildinschemafolder)
50
+ // for(let i = 0; i< buildinschemas.length;i++){
51
+ // const file = buildinschemas[i]
52
+ // await processSchema(file,constants.buildinschemafolder)
53
+ // }
54
+ // load available bpmn into array
55
+ // const files = readdirSync(configs.jsonschemaFolder)
56
+ // for(let j = 0; j< files.length;j++){
57
+ // const file = files[j]
58
+ // await processSchema(file,configs.jsonschemaFolder)
59
+ // }
60
+ // //generate groups
61
+ // const systemgroups = readdirSync(`${groupFolder}`)
62
+ // for(let g = 0; g< systemgroups.length;g++){
63
+ // const groupfile = systemgroups[g]
64
+ // const groupjsonstr = readFileSync(`${groupFolder}/${groupfile}`, 'utf-8');
65
+ // const groupdata = JSON.parse(groupjsonstr);
66
+ // const documentname = groupfile.split('.')[0]
67
+ // const roles = prepareRoles(groupdata)
68
+ // allroles[documentname]=roles
69
+ // }
70
+ // finalize(activatemodules)
71
+ // callback()
72
+ }
73
+
74
+ // const processSchema=async (file:string,defFolder:string)=>{
75
+ const processSchema=async (docname:string,jsondata:any)=>{
76
+
77
+ // console.log(file,defFolder)
78
+ // const filearr = file.split('.');
79
+ // let rendertype = 'basic';
80
+ // let docname = filearr[0].toLowerCase();
81
+ // let doctype = filearr[1].toLowerCase();
82
+
83
+ // const jsonstring = readFileSync(defFolder +path.sep+ file, 'utf-8');
84
+ let allmodels: ChildModels = {} as ChildModels;
85
+
86
+ // if (file.endsWith('.ts')) {
87
+ // log.info(`Load `+clc.green(file))
88
+ // const filepath = `${defFolder}/${file.replace('.ts','')}`
89
+ // console.log(filepath)
90
+ // const jsondata = require(filepath)
91
+ // console.log(jsondata)
92
+ // const jsondata = JSON.parse(jsonstring);
93
+ // rendertype = 'basic';
94
+ jsonschemas[docname] = jsondata;
95
+ allmodels = await readJsonSchemaBuilder(doctype, docname, jsondata,foreignkeys);
96
+ // generateSchema(docname, doctype, rendertype, allmodels);
97
+ // activatemodules.push({
98
+ // doctype:doctype,
99
+ // docname:capitalizeFirstLetter(docname),
100
+ // pagetype: jsonschemas[docname][X_PAGE_TYPE]??'',
101
+ // api:jsondata['x-document-api']
102
+ // })
103
+ // } else {
104
+ // log.warn(`Load `+clc.yellow(file) + ` but it is not supported`)
105
+ // }
106
+ }
107
+
108
+ /**
109
+ * generate frontend nuxt and backend nest codes.
110
+ *
111
+ */
112
+ const generateSchema = async( docname: string,
113
+ doctype: string,
114
+ rendertype: string,
115
+ allmodels: ChildModels)=>{
116
+ const simpleapptemplates = `${constants.templatedir}/basic`
117
+ const finalizefolder = `${constants.templatedir}/nest`
118
+ const currentmodel = allmodels[capitalizeFirstLetter(docname)]
119
+ const variables:TypeGenerateDocumentVariable = {
120
+ name: docname,
121
+ doctype: doctype,
122
+ models: allmodels,
123
+ autocompletecode:currentmodel.codeField,
124
+ autocompletename:currentmodel.nameField,
125
+ moreAutoComplete:currentmodel.moreAutoComplete,
126
+ schema: currentmodel.model,
127
+ apiSchemaName: capitalizeFirstLetter(docname), //capitalizeFirstLetter(doctype) + 'ApiSchema',
128
+ typename: capitalizeFirstLetter(docname),
129
+ fullApiSchemaName:
130
+ doctype + 'apischema.' + capitalizeFirstLetter(docname),
131
+ fullTypeName: doctype + 'type.' + capitalizeFirstLetter(docname),
132
+ jsonschema: jsonschemas[docname],
133
+ bothEndCode: '',
134
+ frontEndCode: '',
135
+ backEndCode: '',
136
+ controllerCode:'',
137
+ apiSchemaCode:'',
138
+ docStatusSettings: currentmodel.docStatusSettings,
139
+ apiSettings: currentmodel.apiSettings,
140
+ requireautocomplete: currentmodel.requireautocomplete,
141
+ isolationtype: currentmodel.isolationtype,
142
+ hasdocformat: currentmodel.hasdocformat,
143
+ foreignkeys: currentmodel.foreignkeys
144
+ };
145
+
146
+ const templatefolder = `${constants.templatedir}/${rendertype}`
147
+ log.info(`- Generate ${docname}, ${doctype}, ${templatefolder}`)
148
+ const eta = new Eta({
149
+ views: '/',
150
+ functionHeader:
151
+ 'const capitalizeFirstLetter = (str) => str.slice(0, 1).toUpperCase() + str.slice(1);' +
152
+ 'const initType=(str)=>{return ["string","number","boolean","array","object"].includes(str) ? capitalizeFirstLetter(str) : str;}',
153
+ });
154
+
155
+ const backendTargetFolder = `${backendFolder}/src/simpleapp/generate`
156
+ const backendServiceFolder = `${backendFolder}/src/simpleapp/services`
157
+
158
+
159
+ Object.getOwnPropertyNames(generateTypes).forEach((foldertype)=>{
160
+
161
+
162
+ //generate code for every schema
163
+ const generateTemplatefolder = `${constants.templatedir}/basic/${foldertype}`
164
+ const allfiles = readdirSync(generateTemplatefolder,{recursive:true})
165
+ for(let j=0; j<allfiles.length;j++){
166
+ const filename:string = String(allfiles[j])
167
+ const templatepath = `${generateTemplatefolder}/${filename}`
168
+
169
+ if(_.last(filename.split('.'))!='eta'){
170
+ log.warn("skip file: ",filename)
171
+ continue;
172
+ }
173
+ if(foldertype=='nest'){
174
+ const arrfilename:string[] = filename.split('.')
175
+ const filecategory = arrfilename[0]
176
+ const filetype = arrfilename[1]
177
+ const autogeneratetypes = ['apischema','controller','jsonschema','model','processor','type','default']
178
+ if(autogeneratetypes.includes(filecategory)){
179
+ //multiple files in folder, append s at folder name
180
+ const storein = `${backendTargetFolder}/${filecategory}s`
181
+ const targetfile = `${storein}/${doctype}.${filecategory}.${filetype}`
182
+ if(!existsSync(storein)){
183
+ mkdirSync(storein,{recursive:true})
184
+ }
185
+ const filecontent = eta.render(templatepath, variables)
186
+ writeFileSync(targetfile,filecontent);
187
+ }else if(filecategory=='service'){ //service file won't override if exists
188
+
189
+ const targetfile = `${backendServiceFolder}/${doctype}.${filecategory}.${filetype}`
190
+ if(!existsSync(backendServiceFolder)){
191
+ mkdirSync(backendServiceFolder,{recursive:true})
192
+ }
193
+ if(!existsSync(targetfile)){
194
+ const filecontent = eta.render(templatepath, variables)
195
+ writeFileSync(targetfile,filecontent);
196
+ }
197
+
198
+ }
199
+ }else if(foldertype=='nuxt'){
200
+ const capname = capitalizeFirstLetter(docname)
201
+ const validateWritePage = (folder:string,isexists:boolean)=>{
202
+ if(!jsonschemas[docname][X_PAGE_TYPE] ){
203
+ return false
204
+ }else if(!isexists){
205
+ return true
206
+ }else if( existsSync(`${folder}/delete-me.txt`)){
207
+ return true
208
+ }else{
209
+ return false
210
+ }
211
+ }
212
+ const mapfiles = {
213
+ 'pages.[id].vue.eta': {
214
+ to:`pages/[xorg]/${docname}`,
215
+ as:'[id].vue',
216
+ validate: validateWritePage
217
+ },
218
+ 'pages.crud.vue.eta': {
219
+ to:`pages/[xorg]/${docname}`,
220
+ as:'index.vue',
221
+ validate: validateWritePage
222
+ },
223
+ 'simpleapp.doc.ts.eta': {
224
+ to:`simpleapp/docs`,
225
+ as:`${capname}Doc.ts`,
226
+ validate: (folder:string,isexists:boolean)=>!isexists
227
+ },
228
+ 'default.ts.eta': {
229
+ to:`simpleapp/generate/defaults`,
230
+ as:`${capname}.default.ts`,
231
+ validate: (folder:string,isexists:boolean)=>{
232
+ return true
233
+ }
234
+ },
235
+
236
+ 'simpleapp.generate.client.ts.eta': {
237
+ to:`simpleapp/generate/clients`,
238
+ as:`${capname}Client.ts`,
239
+ validate: (folder:string,isexists:boolean)=>{
240
+ return true
241
+ }
242
+ },
243
+ }
244
+
245
+ const target = mapfiles[filename]
246
+ const targetfolder = `${generateTypes[foldertype]}/${target.to}`
247
+ const targetfile = `${targetfolder}/${target.as}`
248
+ const isexists = existsSync(targetfile)
249
+ const iswrite:boolean = target.validate(targetfolder,isexists)
250
+ log.warn("process: ",filename,'---->',targetfile)
251
+ if(iswrite && !existsSync(targetfolder)){
252
+ mkdirSync(targetfolder,{recursive:true})
253
+ writeFileSync(`${targetfolder}/delete-me.txt`,"delete this file for keep modified page");
254
+ }
255
+
256
+ // if(
257
+ // target.override=="always" ||
258
+ // !existsSync(targetfile) ||
259
+ // (target.override=="check" && existsSync(`${targetfolder}/delete-me.txt`))
260
+ // ){
261
+ if(iswrite){
262
+ const filecontent = eta.render(templatepath, variables)
263
+ writeFileSync(targetfile,filecontent);
264
+ }
265
+
266
+
267
+
268
+
269
+ }
270
+ }
271
+
272
+
273
+ })
274
+
275
+
276
+
277
+ }
278
+
279
+
280
+ const finalize=(modules:ModuleObject[])=>{
281
+ const renderProperties = {
282
+ configs:configs,
283
+ modules:modules,
284
+ allroles:allroles,
285
+ foreignkeys:foreignkeys,
286
+ }
287
+
288
+
289
+ Object.getOwnPropertyNames(generateTypes).forEach((foldertype)=>{
290
+ const frameworkpath = generateTypes[foldertype]
291
+ log.info("Generate ",foldertype)
292
+ const frameworkfolder = `${constants.templatedir}/${foldertype}`
293
+ const frameworkfiles = readdirSync(frameworkfolder,{recursive:true})
294
+ const eta = new Eta({views:frameworkfolder});
295
+
296
+ //generate code for framework
297
+ for(let index=0; index<frameworkfiles.length; index++){
298
+ const longfilename:string = String(frameworkfiles[index])
299
+ const patharr = longfilename.split('/')
300
+ const filename = _.last(patharr)
301
+ const arrfilename:string[] = filename.split('.')
302
+ // log.info("check longfilename:::",longfilename,"become====",arrfilename)
303
+ //only process .eta
304
+ if(_.last(arrfilename)=='eta'){
305
+ const relativepath = longfilename.includes('/') ? longfilename.replace(`/${filename}`,'') : ''
306
+ const foldername = `${frameworkpath}/${relativepath}`
307
+ const shortfilename = filename.replace('.eta','')
308
+ const targetfilename = `${foldername}/${shortfilename}`
309
+ if(!existsSync(foldername)){
310
+ mkdirSync(foldername,{recursive:true})
311
+ }
312
+ const templatename = `${frameworkfolder}/${longfilename}`.replace(".eta","")
313
+ log.info("Write template:",templatename, '----> ',targetfilename)
314
+ const txt = eta.render(longfilename, renderProperties)
315
+ writeFileSync(targetfilename,txt)
316
+
317
+ }else{
318
+ log.warn("skip: ",longfilename)
319
+ }
320
+
321
+ }
322
+ })
323
+
324
+ }
325
+
326
+ const prepareRoles =(groupsettings) => {
327
+ let roles = []
328
+ const docnames = Object.getOwnPropertyNames(groupsettings)
329
+ for(let i = 0; i< docnames.length; i++){
330
+ let docname = docnames[i]
331
+ let docpermissions:string[] = groupsettings[docname]
332
+ for(let j=0;j<docpermissions.length;j++){
333
+ const perm = docpermissions[j]
334
+ const typename = _.upperFirst(docname)
335
+ roles.push(`${typename}_${perm}`)
336
+ }
337
+ }
338
+ return roles
339
+ }
package/src/index.ts CHANGED
@@ -22,14 +22,23 @@ let version=pj.version
22
22
  program
23
23
  .version(version)
24
24
  .description("An simpleapp CLI tool for generate frontend (vuejs) and backend(nestjs) codes")
25
- .option("-c, --config-file <value>", 'configuration file content such as:{"definationsFolder":"./definations", "backendFolder":"./nestproject/src/docs", "frontendFolder":"./nuxt/server"}')
25
+ .option("-c, --config-file <value>", 'configuration file')
26
+ .option("-g, --generate-type <value>", 'generate type all, backend, frontend')
26
27
  .parse(process.argv);
27
28
 
28
29
  let path=''
29
30
  const options = program.opts();
30
31
  console.log(figlet.textSync(`SimpleApp Generator`));
31
32
  console.log(figlet.textSync(`${version}`));
32
- if(!options.configFile){
33
+ let continueexecute = true
34
+ if(options.generateType && options.generateType=='init'){
35
+ continueexecute=false
36
+ fw.prepareProject(()=>{
37
+ process.exit(1)
38
+ })
39
+
40
+ }
41
+ else if(!options.configFile){
33
42
  log.error("Config file parameter is required. Example: simpleapp-generator -c ./config.json")
34
43
  throw "Undefine configuration file"
35
44
  }
@@ -42,28 +51,94 @@ if(!options.configFile){
42
51
  log.error("undefine configuration file, use command simpleapp-generator -c <configfilename.json>")
43
52
  throw error
44
53
  }
45
- const configs = require(path)
46
- console.log("configurations: ",configs)
47
- const definationsFolder = configs.definationsFolder
48
- const backendFolder = configs.backendFolder
49
- const frontendFolder = configs.frontendFolder
50
- const openapi3Yaml = configs.openapi3Yaml
51
54
 
52
- const run = async()=>{
55
+ if(continueexecute){
56
+
57
+ const configs = require(path)
58
+ // console.log("configurations: ",configs)
59
+ const jsonschemaFolder = configs.jsonschemaFolder
60
+ const bpmnFolder = configs.bpmnFolder
61
+ const backendFolder = configs.backendFolder
62
+ const frontendFolder = configs.frontendFolder
63
+
64
+
65
+
66
+ const run = async()=>{
67
+ fw.setConfiguration(configs)
68
+ fw.runCreateNuxt(()=>{
69
+ fw.runCreateNest(()=>{
70
+ fw.prepareNest(()=>{
71
+ fw.prepareNuxt(()=>{
72
+ // generate.initialize(jsonschemaFolder,configs.groupFolder,bpmnFolder,backendFolder,frontendFolder,()=>{
73
+ generate.run(configs,['nest','nuxt'],()=>{
74
+ fw.prettyNuxt()
75
+ fw.prettyNest()
76
+ })
77
+ })
78
+ })
79
+ })
80
+ })
81
+ }
82
+ const reGenFrontend = async()=>{
83
+ fw.setConfiguration(configs)
84
+ generate.run(configs,['nuxt'],()=>{
85
+ fw.prettyNuxt()
86
+ })
87
+ }
88
+ const reGenBackend = async()=>{
89
+ fw.setConfiguration(configs)
90
+ generate.run(configs,['nest'],()=>{
91
+ fw.prettyNest()
92
+ })
93
+ }
94
+
95
+ const runbackend = async()=>{
96
+ fw.setConfiguration(configs)
53
97
  fw.setConfiguration(configs)
54
- fw.runCreateNuxt(()=>{
55
98
  fw.runCreateNest(()=>{
56
99
  fw.prepareNest(()=>{
100
+ // generate.run(jsonschemaFolder,configs.groupFolder,bpmnFolder,backendFolder,frontendFolder,()=>{
101
+ generate.run(configs,['nest'],()=>{
102
+ fw.prettyNest()
103
+ })
104
+ })
105
+
106
+ })
107
+ }
108
+
109
+ const runfrontend = async()=>{
110
+ fw.setConfiguration(configs)
111
+ fw.runCreateNuxt(()=>{
57
112
  fw.prepareNuxt(()=>{
58
- generate.initialize(definationsFolder,backendFolder,frontendFolder,()=>{
59
- fw.prepareOpenApiClient()
113
+ // generate.initialize(jsonschemaFolder,configs.groupFolder,bpmnFolder,backendFolder,frontendFolder,()=>{
114
+ generate.run(configs,['nuxt'],()=>{
60
115
  fw.prettyNuxt()
61
- fw.prettyNest()
62
116
  })
63
- })
64
- })
65
117
  })
66
- })
67
- }
118
+ })
119
+ }
120
+
121
+
122
+ switch(options.generateType){
123
+ case 'updatefrontend':
124
+ reGenFrontend()
125
+ break;
126
+ case 'updatebackend':
127
+ reGenBackend()
128
+ break;
129
+ case 'frontend':
130
+ runfrontend()
131
+ break;
132
+ case 'backend':
133
+ runbackend()
134
+ break;
135
+ case 'all':
136
+ run()
137
+ break;
138
+ default:
139
+ log.error("unknown generate type")
140
+ break;
141
+
142
+ }
68
143
 
69
- run()
144
+ }