@simitgroup/simpleapp-generator 1.0.33 → 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 (274) hide show
  1. package/.vscode/settings.json +3 -0
  2. package/README.md +185 -13
  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 +119 -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 +307 -235
  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 +83 -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/package.json +3 -1
  95. package/src/buildinschemas/autoincreament.ts +34 -0
  96. package/src/buildinschemas/branch.ts +39 -0
  97. package/src/buildinschemas/docnoformat.ts +58 -0
  98. package/src/buildinschemas/index.ts +7 -0
  99. package/src/buildinschemas/organization.ts +31 -0
  100. package/src/buildinschemas/permission.ts +31 -0
  101. package/src/buildinschemas/tenant.ts +38 -0
  102. package/src/buildinschemas/user.ts +28 -0
  103. package/src/constant.ts +2 -1
  104. package/src/framework.ts +125 -67
  105. package/src/generate.ts +323 -274
  106. package/src/generate.ts.backup +339 -0
  107. package/src/index.ts +92 -18
  108. package/src/processors/jsonschemabuilder.ts +199 -226
  109. package/src/processors/jsonschemabuilder.ts-old +383 -0
  110. package/src/storage.ts +1 -1
  111. package/src/type.ts +94 -27
  112. package/templates/basic/nest/controller.ts.eta +255 -0
  113. package/templates/basic/nest/default.ts.eta +42 -0
  114. package/templates/basic/{model.eta → nest/model.ts.eta} +18 -5
  115. package/templates/basic/nest/processor.ts.eta +129 -0
  116. package/templates/basic/nest/service.ts.eta +64 -0
  117. package/templates/basic/{type.eta → nest/type.ts.eta} +3 -3
  118. package/templates/basic/nuxt/default.ts.eta +42 -0
  119. package/templates/basic/{pageindex.vue.eta → nuxt/pages.crud.vue.eta} +82 -20
  120. package/templates/basic/nuxt/simpleapp.doc.ts.eta +11 -0
  121. package/templates/basic/nuxt/simpleapp.generate.client.ts.eta +212 -0
  122. package/templates/nest/.env.eta +31 -0
  123. package/templates/nest/.gitignore.eta +40 -0
  124. package/templates/nest/src/app.controller.ts.eta +19 -0
  125. package/templates/nest/src/app.module.ts.eta +77 -0
  126. package/templates/nest/src/app.service.ts.eta +9 -0
  127. package/templates/nest/src/main.ts.eta +58 -0
  128. package/templates/nest/src/simpleapp/generate/apischemas/index.ts.eta +16 -0
  129. package/templates/nest/src/simpleapp/generate/commons/decorators/appuser.decorator.ts.eta +8 -0
  130. package/templates/nest/src/simpleapp/generate/commons/dicts/foreignkeys.ts.eta +1 -0
  131. package/templates/nest/src/simpleapp/generate/commons/docnogenerator.service.ts.eta +101 -0
  132. package/templates/nest/src/simpleapp/generate/commons/exceptions/SimpleAppExceptionFilter.ts.eta +39 -0
  133. package/templates/nest/src/simpleapp/generate/commons/interceptors/response.interceptor.ts.eta +38 -0
  134. package/templates/nest/src/simpleapp/generate/commons/middlewares/tenant.middleware.ts.eta +88 -0
  135. package/templates/nest/{Workflow.eta → src/simpleapp/generate/commons/providers/workflow.provider.ts.etax} +20 -14
  136. package/templates/nest/src/simpleapp/generate/commons/roles/roles.decorator.ts.eta +6 -0
  137. package/templates/nest/src/simpleapp/generate/commons/roles/roles.enum.ts.eta +28 -0
  138. package/templates/nest/src/simpleapp/generate/commons/roles/roles.group.ts.eta +10 -0
  139. package/templates/nest/src/simpleapp/generate/commons/roles/roles.guard.ts.eta +34 -0
  140. package/templates/nest/src/simpleapp/generate/commons/user.context.ts.eta +391 -0
  141. package/templates/nest/src/simpleapp/generate/controllers/simpleapp.controller.ts.eta +71 -0
  142. package/templates/nest/src/simpleapp/generate/models/perm.model.ts.eta +53 -0
  143. package/templates/nest/src/simpleapp/generate/models/tenant.model.ts.eta +45 -0
  144. package/templates/nest/src/simpleapp/generate/models/user.model.ts.eta +57 -0
  145. package/templates/nest/src/simpleapp/generate/processors/simpleapp.processor.ts.eta +624 -0
  146. package/templates/nest/src/simpleapp/generate/types/index.ts.eta +19 -0
  147. package/templates/nest/src/simpleapp/profile/profile.apischema.ts.eta +74 -0
  148. package/templates/nest/src/simpleapp/profile/profile.controller.ts.eta +110 -0
  149. package/templates/nest/src/simpleapp/profile/profile.service.ts.eta +195 -0
  150. package/templates/nest/src/simpleapp/profile/profile.types.ts.eta +18 -0
  151. package/templates/nest/src/simpleapp/services/autoinc.service.ts.eta +89 -0
  152. package/templates/nest/src/simpleapp/services/branch.service.ts.eta +66 -0
  153. package/templates/nest/src/simpleapp/services/docno.service.ts.eta +93 -0
  154. package/templates/nest/src/simpleapp/services/org.service.ts.eta +67 -0
  155. package/templates/nest/src/simpleapp/services/perm.service.ts.eta +102 -0
  156. package/templates/nest/src/simpleapp/services/tenant.service.ts.eta +69 -0
  157. package/templates/nest/src/simpleapp/services/user.service.ts.eta +66 -0
  158. package/templates/nest/src/simpleapp/simpleapp.module.ts.eta +43 -0
  159. package/templates/nuxt/.env.eta +21 -0
  160. package/templates/nuxt/.gitignore.eta +28 -0
  161. package/templates/nuxt/app.vue.eta +5 -2
  162. package/templates/nuxt/assets/css/tailwind.css.eta +35 -0
  163. package/templates/nuxt/components/CrudNestedDoc.vue.eta +164 -0
  164. package/templates/nuxt/components/CrudSimple.vue.eta +179 -0
  165. package/templates/nuxt/{components.debugdocdata.vue.eta → components/DebugDocumentData.vue.eta} +4 -1
  166. package/templates/nuxt/{components.eventmonitor.vue.eta → components/EventMonitor.vue.eta} +27 -27
  167. package/templates/nuxt/components/Invitation.vue.eta +50 -0
  168. package/templates/nuxt/{components.menus.vue.eta → components/Menus.vue.eta} +17 -15
  169. package/templates/nuxt/components/PermissionInfo.vue.eta +92 -0
  170. package/templates/nuxt/components/SimpleAppAutocomplete.vue.eta +131 -0
  171. package/templates/nuxt/components/SimpleAppAutocompletemulti.vue.eta +73 -0
  172. package/templates/nuxt/components/SimpleAppCalendar.vue.eta +55 -0
  173. package/templates/nuxt/components/SimpleAppCheckbox.vue.eta +29 -0
  174. package/templates/nuxt/components/SimpleAppChip.vue.eta +28 -0
  175. package/templates/nuxt/components/SimpleAppColor.vue.eta +41 -0
  176. package/templates/nuxt/components/SimpleAppDatatable.vue.eta +20 -0
  177. package/templates/nuxt/components/SimpleAppDocumentNo.vue.eta +90 -0
  178. package/templates/nuxt/components/SimpleAppDynamicInput.vue.eta +29 -0
  179. package/templates/nuxt/components/SimpleAppEditor.vue.eta +31 -0
  180. package/templates/nuxt/components/SimpleAppForm.vue.eta +131 -0
  181. package/templates/nuxt/components/SimpleAppInputTable.vue.eta +104 -0
  182. package/templates/nuxt/components/SimpleAppList.vue.eta +38 -0
  183. package/templates/nuxt/components/SimpleAppListmulti.vue.eta +41 -0
  184. package/templates/nuxt/components/SimpleAppNumber.vue.eta +32 -0
  185. package/templates/nuxt/components/SimpleAppPassword.vue.eta +41 -0
  186. package/templates/nuxt/components/SimpleAppRadio.vue.eta +42 -0
  187. package/templates/nuxt/components/SimpleAppRating.vue.eta +41 -0
  188. package/templates/nuxt/components/SimpleAppSelect.vue.eta +38 -0
  189. package/templates/nuxt/components/SimpleAppSelectmulti.vue.eta +39 -0
  190. package/templates/nuxt/components/SimpleAppSlider.vue.eta +42 -0
  191. package/templates/nuxt/components/SimpleAppSwitch.vue.eta +30 -0
  192. package/templates/nuxt/components/SimpleAppText.vue.eta +50 -0
  193. package/templates/nuxt/components/SimpleAppTextarea.vue.eta +30 -0
  194. package/templates/nuxt/components/SimpleAppValue.vue.eta +86 -0
  195. package/templates/nuxt/components/SimpleFieldContainer.vue.eta +102 -0
  196. package/templates/nuxt/components/XorgPicker.vue.eta +66 -0
  197. package/templates/nuxt/components/helper.ts.eta +90 -0
  198. package/templates/nuxt/components/type.ts.eta +32 -0
  199. package/templates/nuxt/composables/docformat.generate.ts.eta +5 -0
  200. package/templates/nuxt/{composables.getautocomplete.ts.eta → composables/getAutocomplete.generate.ts.eta} +4 -5
  201. package/templates/nuxt/{composables.getmenus.ts.eta → composables/getMenus.generate.ts.eta} +22 -7
  202. package/templates/nuxt/composables/getOpenApi.generate.ts.eta +6 -0
  203. package/templates/nuxt/composables/getTenant.generate.ts.eta +4 -0
  204. package/templates/nuxt/composables/getUserStore.generate.ts.eta +22 -0
  205. package/templates/nuxt/composables/logout.generate.ts.eta +22 -0
  206. package/templates/nuxt/composables/roles.generate.ts.eta +48 -0
  207. package/templates/nuxt/{layouts.default.vue.eta → layouts/default.vue.eta} +2 -0
  208. package/templates/nuxt/middleware/10.acl.global.ts.eta +38 -0
  209. package/templates/nuxt/nuxt.config.ts.eta +11 -1
  210. package/templates/nuxt/pages/[xorg]/branch/index.vue.eta +102 -0
  211. package/templates/nuxt/pages/[xorg]/docnoformat/[id].vue.eta +17 -0
  212. package/templates/nuxt/pages/[xorg]/docnoformat/index.vue.eta +269 -0
  213. package/templates/nuxt/pages/[xorg]/index.vue.eta +36 -0
  214. package/templates/nuxt/pages/[xorg]/organization/index.vue.eta +148 -0
  215. package/templates/nuxt/pages/[xorg]/permission/index.vue.eta +280 -0
  216. package/templates/nuxt/pages/[xorg]/tenant/index.vue.eta +93 -0
  217. package/templates/nuxt/pages/[xorg]/user/index.vue.eta +468 -0
  218. package/templates/nuxt/pages/index.vue.eta +191 -0
  219. package/templates/nuxt/pages/login.vue.eta +21 -0
  220. package/templates/nuxt/plugins/10.simpleapp-event.ts.eta +53 -0
  221. package/templates/nuxt/plugins/20.simpleapp-userstore.ts.eta +155 -0
  222. package/templates/nuxt/plugins/50.simpleapp-client.ts.eta +23 -0
  223. package/templates/nuxt/{server.api.ts.eta → server/api/[xorg]/[...].ts.eta} +5 -2
  224. package/templates/nuxt/server/api/auth/[...].ts.eta +68 -0
  225. package/templates/nuxt/{server.api.auth.logout.ts.eta → server/api/auth/logout.ts.eta} +1 -3
  226. package/templates/nuxt/server/api/profile/[...].ts.eta +150 -0
  227. package/templates/nuxt/server/api/profile/index.ts.eta +103 -0
  228. package/templates/nuxt/simpleapp/generate/clients/SimpleAppClient.ts.eta +187 -0
  229. package/templates/nuxt/simpleapp/generate/commons/documents.ts.eta +6 -0
  230. package/templates/nuxt/simpleapp/generate/commons/events.ts.eta +5 -0
  231. package/templates/nuxt/simpleapp/generate/commons/groups.ts.eta +11 -0
  232. package/templates/nuxt/simpleapp/generate/commons/roles.ts.eta +21 -0
  233. package/templates/nuxt/types/index.ts.eta +65 -0
  234. package/templates/project/README.md +11 -0
  235. package/templates/project/build.sh.eta +17 -0
  236. package/templates/project/config.json.eta +2 -0
  237. package/templates/project/generate.ts.eta +10 -0
  238. package/templates/project/schemas/category.ts.eta +26 -0
  239. package/templates/project/schemas/index.ts.eta +5 -0
  240. package/templates/project/schemas/product.ts.eta +59 -0
  241. package/templates/project/shares/hello.ts.eta +1 -0
  242. package/templates/project/shares/index.ts.eta +2 -0
  243. package/tsconfig.json +9 -2
  244. package/tsconfig.tsbuildinfo +1 -0
  245. package/definations/category.cat.jsonschema.json +0 -55
  246. package/definations/level.lvl.jsonschema.json +0 -48
  247. package/definations/product.prd.jsonschema.json +0 -46
  248. package/templates/basic/controller.eta +0 -152
  249. package/templates/basic/module.eta +0 -22
  250. package/templates/basic/service.eta +0 -47
  251. package/templates/basic/simpleappclient.eta +0 -123
  252. package/templates/nest/SimpleAppController.eta +0 -69
  253. package/templates/nest/SimpleAppService.eta +0 -391
  254. package/templates/nest/TenantMiddleware.eta +0 -34
  255. package/templates/nest/UserProvider.eta +0 -127
  256. package/templates/nest/app.controller.eta +0 -12
  257. package/templates/nest/app.module.eta +0 -64
  258. package/templates/nest/app.service.eta +0 -8
  259. package/templates/nest/inputvalidation-exception.eta +0 -6
  260. package/templates/nest/nest.env.eta +0 -28
  261. package/templates/nest/nest.main.eta +0 -31
  262. package/templates/nuxt/components.crudsimple.vue.eta +0 -124
  263. package/templates/nuxt/env.eta +0 -17
  264. package/templates/nuxt/pages.[xorg].index.vue.eta +0 -23
  265. package/templates/nuxt/pages.index.vue.eta +0 -69
  266. package/templates/nuxt/pages.login.vue.eta +0 -20
  267. package/templates/nuxt/plugins.simpleapp.ts.eta +0 -97
  268. package/templates/nuxt/server.api.auth[...].ts.eta +0 -233
  269. package/templates/nuxt/tailwind.css.eta +0 -49
  270. /package/templates/basic/{apischema.eta → nest/apischema.ts.eta} +0 -0
  271. /package/templates/basic/{jsonschema.eta → nest/jsonschema.ts.eta} +0 -0
  272. /package/templates/basic/{pageindexwithid.vue.eta → nuxt/pages.[id].vue.eta} +0 -0
  273. /package/templates/nest/{oauth2-redirect.eta → public_html/oauth2-redirect.html.eta} +0 -0
  274. /package/templates/nuxt/{composables.stringHelper.ts.eta → composables/stringHelper.generate.ts.eta} +0 -0
package/src/generate.ts CHANGED
@@ -1,112 +1,168 @@
1
- // import { readFormBuilder } from './processors/formbuilder.tsa';
2
- // import { readJsonSchemaBuilder } from './processors/jsonschemabuilder';
3
1
  import * as constants from './constant'
4
2
  import {readJsonSchemaBuilder} from './processors/jsonschemabuilder'
5
- import {foreignkeys} from './storage'
6
- // import { compile } from 'json-schema-to-typescript';
7
- // import { Fieldtypes, SchemaModel, ChildModels } from './type';
8
- import { TypeForeignKeyCatalogue, TypeGenerateDocumentVariable,ChildModels,ModuleObject } from './type'
3
+ import {allforeignkeys} from './storage'
4
+ import {TypeGenerateDocumentVariable,ChildModels,ModuleObject, SchemaType, SchemaConfig } from './type'
9
5
  import { Logger, ILogObj } from "tslog";
10
6
  const log: Logger<ILogObj> = new Logger();
11
7
  const clc = require("cli-color");
12
-
13
-
14
8
  const path = require('path');
15
9
  import {mkdirSync, readdir,readFileSync,writeFileSync,existsSync,copyFileSync, readdirSync} from 'fs'
10
+ import _ from 'lodash'
11
+ import * as buildinschemas from './buildinschemas'
12
+ import { JSONSchema7 } from 'json-schema';
16
13
  const { Eta } = require('eta');
17
14
  const { capitalizeFirstLetter }= require('./libs');
18
15
  const X_DOCUMENT_TYPE='x-document-type'
19
16
  const X_DOCUMENT_NAME='x-document-name'
20
17
  const X_COLLECTION_NAME='x-collection-name'
18
+ const X_PAGE_TYPE='x-page-type'
21
19
  const extFb = '.xfb.json';
22
20
  const extHfb = '.xhfb.json';
23
21
  const extjsonschema = '.jsonschema.json';
22
+ const extgroups = '.group.json';
24
23
  let jsonschemas = {};
24
+ let configs:any = {}
25
25
  const docs = [];
26
-
27
- export const initialize = async (defFolder:string,bpmnFolder:string,backendfolder:string,frontendfolder:string,callback:Function) => {
28
- prepareEnvironments(backendfolder,frontendfolder)
29
- let activatemodules:ModuleObject[]=[]
26
+ let frontendFolder=''
27
+ let backendFolder=''
28
+ let frontendpagefolder=''
29
+ const allroles:any={}
30
+ let activatemodules:ModuleObject[]=[]
31
+ let generateTypes:any = {}
32
+
33
+
34
+ export const run = async (paraconfigs:any,genFor:string[],callback:Function) => {
35
+ configs = paraconfigs
36
+ frontendFolder=configs.frontendFolder
37
+ backendFolder=configs.backendFolder
38
+
39
+ const groupFolder = configs.groupFolder
40
+ if(genFor.includes('nest')){
41
+ generateTypes['nest']=backendFolder
42
+ }
43
+ if(genFor.includes('nuxt')){
44
+ generateTypes['nuxt']=frontendFolder
45
+ }
46
+ // console.log("genForgenForgenForgenFor",genFor,generateTypes)
30
47
  //
31
- /*
32
- load available bpmn into array
33
- */
34
- const files = readdirSync(defFolder)
35
- // log.warn("all schemas:",files)
36
- // readdir(defFolder, (err, files) => {
37
- // files.forEach((file) => {
38
- for(let j = 0; j< files.length;j++){
39
- const file = files[j]
40
- log.info(`Load `+clc.green(file))
41
- const filearr = file.split('.');
42
- let rendertype = 'basic';
43
- let docname = filearr[0].toLowerCase();
44
- let doctype = filearr[1].toLowerCase();
45
-
46
- const jsonstring = readFileSync(defFolder +path.sep+ file, 'utf-8');
47
- let allmodels: ChildModels = {} as ChildModels;
48
-
49
- if (file.endsWith(extjsonschema)) {
50
- const jsondata = JSON.parse(jsonstring);
51
- rendertype = 'basic';
52
- jsonschemas[docname] = jsondata;
53
-
54
- // foreignkeys:
55
- // tmpforeignkeys:TypeForeignKey
56
- allmodels = await readJsonSchemaBuilder(doctype, docname, jsondata,foreignkeys);
57
-
58
- //foreignkeycatalogues
59
- // foreignkeys
60
- generate(docname, doctype, rendertype, allmodels,backendfolder,frontendfolder);
61
- activatemodules.push({doctype:doctype,docname:capitalizeFirstLetter(docname)})
62
- } else {
63
- log.warn(`Load `+clc.yellow(file) + ` but it is not supported`)
64
- }
65
- }
66
- // log.warn("foreignkeys---",foreignkeys)
67
- log.info("Activated backend modules: ",JSON.stringify(activatemodules))
68
- // log.info(activatemodules)
69
- finalize(activatemodules,backendfolder,frontendfolder)
70
- callback()
48
+ frontendpagefolder = `${frontendFolder}/pages/[xorg]`
49
+ const buildinschemanames = Object.keys(buildinschemas)
50
+ for(let i=0; i<buildinschemanames.length;i++){
51
+ const schemaname = buildinschemanames[i]
52
+ // .forEach(async(schemaname)=>{
53
+ const cloneschema:JSONSchema7 = {...buildinschemas[schemaname]}
54
+ // console.log("=====>>>>>",schemaname,cloneschema)
55
+ await processSchema(schemaname,cloneschema)
71
56
  }
72
-
73
-
57
+ // console.log('jsonschemasjsonschemasjsonschemasjsonschemas',jsonschemas)
58
+ // const buildinschemas = readdirSync(constants.buildinschemafolder)
59
+ // for(let i = 0; i< buildinschemas.length;i++){
60
+ // const file = buildinschemas[i]
61
+ // await processSchema(file,constants.buildinschemafolder)
62
+ // }
63
+ // load available bpmn into array
64
+ // const files = readdirSync(configs.jsonschemaFolder)
65
+ // for(let i = 0; i< files.length;i++){
66
+ // const file = files[i]
67
+ // await processSchema(file,constants.buildinschemafolder)
68
+ // }
69
+ // const schemapath = process.cwd()+'/'+ configs.jsonschemaFolder
70
+ // console.log("dynamic import" ,schemapath)
71
+ // const {category} = require(schemapath)
72
+ // const schemas = await import('/Users/kstan/dev/products/simtrain-next/project-design/jsonschemas');
73
+
74
+ // console.log(schemas)
75
+ // const schemanames = Object.keys(schemas)
76
+ // for(let i=0; i<schemanames.length;i++){
77
+ // const schemaname = schemanames[i]
78
+ // .forEach(async(schemaname)=>{
79
+ // const cloneschema:JSONSchema7 = {...buildinschemas[schemaname]}
80
+ // console.log("=====>>>>>",schemaname,cloneschema)
81
+ // await processSchema(schemaname,cloneschema)
82
+ // }
83
+ //
84
+ const files = readdirSync(configs.jsonschemaFolder)
85
+ for(let j = 0; j< files.length;j++){
86
+ const file = files[j]
87
+ const jsoncontent = readFileSync(`${configs.jsonschemaFolder}/${file}`, 'utf-8');
88
+ const jsonschema = JSON.parse(jsoncontent)
89
+ await processSchema(file,jsonschema)
90
+ }
91
+ // //generate groups
92
+ // const systemgroups = readdirSync(`${groupFolder}`)
93
+ // for(let g = 0; g< systemgroups.length;g++){
94
+ // const groupfile = systemgroups[g]
95
+ // const groupjsonstr = readFileSync(`${groupFolder}/${groupfile}`, 'utf-8');
96
+ // const groupdata = JSON.parse(groupjsonstr);
97
+ // const documentname = groupfile.split('.')[0]
98
+ // const roles = prepareRoles(groupdata)
99
+ // allroles[documentname]=roles
100
+ // }
101
+ finalize(activatemodules)
102
+ callback()
103
+ }
74
104
 
75
- const generate = (
76
- docname: string,
105
+ // const processSchema=async (file:string,defFolder:string)=>{
106
+ const processSchema= async (schemaname:string,jsondata:JSONSchema7)=>{
107
+
108
+ // console.log(file,defFolder)
109
+ // const filearr = file.split('.');
110
+ // let rendertype = 'basic';
111
+ // let docname = filearr[0].toLowerCase();
112
+ // let doctype = filearr[1].toLowerCase();
113
+ const config:SchemaConfig = jsondata['x-simpleapp-config']
114
+ let doctype = config.documentType
115
+ let docname = config.documentName
116
+ // const jsonstring = readFileSync(defFolder +path.sep+ file, 'utf-8');
117
+
118
+
119
+ // if (file.endsWith('.ts')) {
120
+ // log.info(`Load `+clc.green(file))
121
+ // const filepath = `${defFolder}/${file.replace('.ts','')}`
122
+ // console.log(filepath)
123
+ // const jsondata = require(filepath)
124
+ // console.log(jsondata)
125
+ // const jsondata = JSON.parse(jsonstring);
126
+ const rendertype = 'basic';
127
+ jsonschemas[docname] = jsondata;
128
+ const allmodels:ChildModels = await readJsonSchemaBuilder(docname, jsondata);
129
+ console.log("allmodels",docname,allmodels)
130
+ generateSchema(docname, doctype, rendertype, allmodels);
131
+ activatemodules.push({
132
+ doctype:doctype,
133
+ docname:capitalizeFirstLetter(docname),
134
+ pagetype: config.pageType??'',
135
+ api:config.additionalApis
136
+ })
137
+ // } else {
138
+ // log.warn(`Load `+clc.yellow(file) + ` but it is not supported`)
139
+ // }
140
+ }
141
+
142
+ /**
143
+ * generate frontend nuxt and backend nest codes.
144
+ *
145
+ */
146
+ const generateSchema = ( docname: string,
77
147
  doctype: string,
78
148
  rendertype: string,
79
- allmodels: ChildModels,
80
- backendfolder:string,
81
- frontendfolder:string
82
- ) => {
83
- const targetfolder = `${backendfolder}/src/docs/${doctype}`;
84
- const frontendpagefolder=`${frontendfolder}/pages/[xorg]`
85
- try {
86
-
87
- mkdirSync(targetfolder,{ recursive: true });
88
- mkdirSync(`${frontendfolder}/simpleapp/simpleappdocs/`,{ recursive: true });
89
- mkdirSync(frontendpagefolder,{recursive:true})
90
- } catch (err) {
91
- //do nothing if folder exists
92
- } finally {
93
- const templatefolder = `${constants.templatedir}/${rendertype}`
94
- log.info(`- Generate ${docname}, ${doctype}, ${templatefolder}`)
95
- const eta = new Eta({
96
- views: templatefolder,
97
- functionHeader:
98
- 'const capitalizeFirstLetter = (str) => str.slice(0, 1).toUpperCase() + str.slice(1);' +
99
- 'const initType=(str)=>{return ["string","number","boolean","array","object"].includes(str) ? capitalizeFirstLetter(str) : str;}',
100
- });
149
+ allmodels: ChildModels)=>{
150
+
101
151
 
152
+ const simpleapptemplates = `${constants.templatedir}/basic`
153
+ const finalizefolder = `${constants.templatedir}/nest`
154
+ const modelname = _.upperFirst(docname)
155
+ const currentmodel = allmodels[modelname]
156
+
157
+ //console.log("---^^^^^------",modelname,docname, doctype, rendertype,currentmodel,allmodels)
102
158
  const variables:TypeGenerateDocumentVariable = {
103
159
  name: docname,
104
160
  doctype: doctype,
105
161
  models: allmodels,
106
- autocompletecode:allmodels[capitalizeFirstLetter(docname)].codeField,
107
- autocompletename:allmodels[capitalizeFirstLetter(docname)].nameField,
108
- moreAutoComplete:allmodels[capitalizeFirstLetter(docname)].moreAutoComplete,
109
- schema: allmodels[capitalizeFirstLetter(docname)].model,
162
+ autocompletecode:currentmodel.codeField??'',
163
+ autocompletename:currentmodel.nameField??'',
164
+ moreAutoComplete:currentmodel.moreAutoComplete ??[],
165
+ schema: currentmodel.model,
110
166
  apiSchemaName: capitalizeFirstLetter(docname), //capitalizeFirstLetter(doctype) + 'ApiSchema',
111
167
  typename: capitalizeFirstLetter(docname),
112
168
  fullApiSchemaName:
@@ -118,211 +174,204 @@ const generate = (
118
174
  backEndCode: '',
119
175
  controllerCode:'',
120
176
  apiSchemaCode:'',
121
- docStatusSettings:allmodels[capitalizeFirstLetter(docname)].docStatusSettings,
122
- apiSettings:allmodels[capitalizeFirstLetter(docname)].apiSettings,
123
- requireautocomplete:allmodels[capitalizeFirstLetter(docname)].requireautocomplete,
124
- isolationtype:allmodels[capitalizeFirstLetter(docname)].isolationtype
177
+ docStatusSettings: currentmodel.docStatusSettings??[],
178
+ apiSettings: currentmodel.apiSettings??[],
179
+ isolationtype: currentmodel.isolationtype,
180
+ hasdocformat: currentmodel.hasdocformat,
181
+ foreignkeys: currentmodel.foreignkeys ?? {}
125
182
  };
126
183
 
127
- // console.log('generate 2', JSON.stringify(variables));
128
-
129
- // // const txtUISchema = eta.render('./uischema', variables);
130
-
131
- // console.log('generate 4');
132
- // console.log('generate 2', variables);
133
- const txtType = eta.render('./type', variables);
134
- writeFileSync(`${targetfolder}/${doctype}.type.ts`, txtType);
135
- // compile(jsonschemas[docname], docname).then((txtType: string) => {
136
- // writeFileSync(`${targetfolder}/${doctype}.type.ts`, txtType);
137
- // });
138
-
139
- // generate jsonschema object, use for data validation
140
- const txtJsonSchema = eta.render('./jsonschema', variables);
141
- writeFileSync(`${targetfolder}/${doctype}.jsonschema.ts`, txtJsonSchema);
142
-
143
- // generate before save source code, wont override after regenerate
144
- // const customizefilename = `${targetfolder}/${doctype}.beforesave.ts`;
145
- // if (!existsSync(customizefilename)) {
146
- // const txtBeforeSave = eta.render('./beforesave', variables);
147
- // writeFileSync(
148
- // `${targetfolder}/${doctype}.beforesave.ts`,
149
- // txtBeforeSave,
150
- // );
151
- // }
152
- // write mongoose model file
153
- const txtModel = eta.render('./model', variables);
154
- writeFileSync(`${targetfolder}/${doctype}.model.ts`, txtModel);
155
-
156
- // prepare openapi schema
157
- const apischemafile=`${targetfolder}/${doctype}.apischema.ts`
158
- if (existsSync(apischemafile)) {
159
- const apischemaCode = readFileSync(apischemafile).toString();
160
- const regexapischema =
161
- /\/\/<begin-apischema-code>([\s\S]*?)\/\/<end-apischema-code>/g;
162
- const apischemaresult = apischemaCode.match(regexapischema);
163
- if (apischemaresult) {
164
- variables.apiSchemaCode = apischemaresult[0];
165
- }else{
166
- variables.apiSchemaCode="//<begin-apischema-code>\n//<end-apischema-code>";
167
- }
168
- }
169
- const txtApiSchema = eta.render('./apischema', variables);
170
- writeFileSync(apischemafile, txtApiSchema);
171
-
172
- // prepare backend classes
173
- // prepare frontend api client
174
-
175
- const servicefile = `${targetfolder}/${doctype}.service.ts`;
176
- let bothEndCode = '';
177
- let backEndCode = '';
178
- if (existsSync(servicefile)) {
179
- const servicecodes = readFileSync(servicefile).toString();
180
-
181
- /* extract string bothend and backend, put in back */
182
- const regex1 =
183
- /\/\/<begin-bothend-code>([\s\S]*?)\/\/<end-bothend-code>/g;
184
- const regex2 =
185
- /\/\/<begin-backend-code>([\s\S]*?)\/\/<end-backend-code>/g;
186
- const bothendresult = servicecodes.match(regex1);
187
- const backendresult = servicecodes.match(regex2);
188
- console.log("bothendresult",bothendresult)
189
- console.log("backendresult",backendresult)
190
- if (bothendresult) {
191
- variables.bothEndCode = bothendresult[0];
192
- }else{
193
- variables.bothEndCode="//<begin-bothend-code>\n//<end-bothend-code>";
194
- }
195
-
196
- if (backendresult) {
197
- variables.backEndCode = backendresult[0];
198
- }else{
199
- variables.backEndCode="//<begin-backend-code>\n//<end-backend-code>";
200
- }
201
- }
202
-
203
-
204
- const txtService = eta.render('./service', variables);
205
- writeFileSync(`${targetfolder}/${doctype}.service.ts`, txtService);
206
-
207
- // prepare api router, allow add more api and wont override after regenerate
208
- const controllerfile = `${targetfolder}/${doctype}.controller.ts`;
209
- let controllerCode = ''
210
- if (existsSync(controllerfile)) {
211
- /* extract customized controller, put in back */
212
- const controllersourcecodes = readFileSync(controllerfile).toString();
213
- const controllerregex = /\/\/<begin-controller-code>([\s\S]*?)\/\/<end-controller-code>/g;
214
- const controllerresult = controllersourcecodes.match(controllerregex);
215
- if (controllerresult) {
216
- controllerCode = controllerresult[0];
217
- }
218
- }
219
- variables.controllerCode = controllerCode!='' ? controllerCode : "\n//<begin-controller-code>\n//<end-controller-code>";
220
- const txtController = eta.render('./controller', variables);
221
- writeFileSync(controllerfile, txtController);
222
-
223
- // prepare module
224
- const txtModule = eta.render('./module', variables);
225
- writeFileSync(`${targetfolder}/${doctype}.module.ts`, txtModule);
226
-
227
- // prepare readme
228
- // const txtReadme = eta.render('./readme', variables);
229
- // writeFileSync(`${targetfolder}/README.md`, txtReadme);
230
-
231
- const frontendfile = `${frontendfolder}/simpleapp/simpleappdocs/${variables.typename}Doc.ts`;
232
- let frontEndCode = '';
233
- if (existsSync(frontendfile)) {
234
- const clientcodes = readFileSync(frontendfile).toString();
235
-
236
- /* extract string frontend code, put in back */
237
- const regex3 =
238
- /\/\/<begin-frontend-code>([\s\S]*?)\/\/<end-frontend-code>/g;
239
-
240
- const frontendresult = clientcodes.match(regex3);
241
-
242
- if (frontendresult) {
243
- frontEndCode = frontendresult[0];
244
- }
245
- }
246
- variables.frontEndCode = frontEndCode ?? '';
247
- const txtDocClient = eta.render('./simpleappclient.eta', variables);
248
- writeFileSync(frontendfile, txtDocClient);
249
-
250
- generateClientPage(variables,eta,frontendpagefolder)
251
-
184
+ const templatefolder = `${constants.templatedir}/${rendertype}`
185
+ log.info(`- Generate ${docname}, ${doctype}, ${templatefolder}`)
186
+ const eta = new Eta({
187
+ views: '/',
188
+ functionHeader:
189
+ 'const capitalizeFirstLetter = (str) => str.slice(0, 1).toUpperCase() + str.slice(1);' +
190
+ 'const initType=(str)=>{return ["string","number","boolean","array","object"].includes(str) ? capitalizeFirstLetter(str) : str;}',
191
+ });
252
192
 
253
- log.info(`- write completed: ${doctype}`)
193
+ const backendTargetFolder = `${backendFolder}/src/simpleapp/generate`
194
+ const backendServiceFolder = `${backendFolder}/src/simpleapp/services`
254
195
 
255
196
 
256
- }
257
- };
258
-
259
- const generateClientPage=(variables:TypeGenerateDocumentVariable,eta,frontendpagefolder:string)=>{
260
- const docname = variables.name
261
- const targetfolder = `${frontendpagefolder}/${docname}`
262
- const overridefilename = `${targetfolder}/delete-me-for-avoid-override`
263
- if(!existsSync(targetfolder)){
264
- mkdirSync(targetfolder)
265
- writeFileSync(overridefilename,'delete this file to prevent override by generator')
266
- }
267
- if(existsSync(overridefilename)){
268
- const txtIndex= eta.render('./pageindex.vue.eta', variables);
269
- const txtIndexwithid= eta.render('./pageindexwithid.vue.eta', variables);
270
- writeFileSync(`${targetfolder}/index.vue`,txtIndex)
271
- writeFileSync(`${targetfolder}/[id].vue`,txtIndexwithid)
272
- }
273
- }
274
- const prepareEnvironments = (backendfolder:string,frontendfolder:string)=>{
275
- const targetfolder = `${backendfolder}/src/class`
276
- const targetfrontendfolder = `${frontendfolder}/server/api`
277
- try{
278
- mkdirSync(targetfolder,{recursive:true});
279
- mkdirSync(targetfrontendfolder,{recursive:true});
280
- }catch(error){
281
- //do nothing
282
- }
283
-
284
- copyFileSync(`${constants.templatedir}/nest/SimpleAppService.eta`,`${targetfolder}/SimpleAppService.ts`)
285
- copyFileSync(`${constants.templatedir}/nest/SimpleAppController.eta`,`${targetfolder}/SimpleAppController.ts`)
286
- copyFileSync(`${constants.templatedir}/nest/Workflow.eta`,`${targetfolder}/Workflow.ts`)
287
- copyFileSync(`${constants.templatedir}/nest/TenantMiddleware.eta`,`${targetfolder}/TenantMiddleware.ts`)
288
- copyFileSync(`${constants.templatedir}/nest/UserProvider.eta`,`${targetfolder}/UserProvider.ts`)
197
+ Object.keys(generateTypes).forEach((foldertype)=>{
198
+
289
199
 
290
- //copy over frontend apiabstract class
291
- // copyFileSync(`${constants.templatedir}/nuxt.apigateway.eta`,`${targetfrontendfolder}/[...].ts`)
200
+ //generate code for every schema
201
+ const generateTemplatefolder = `${constants.templatedir}/basic/${foldertype}`
202
+ const allfiles = readdirSync(generateTemplatefolder,{recursive:true})
203
+ for(let j=0; j<allfiles.length;j++){
204
+ const filename:string = String(allfiles[j])
205
+ const templatepath = `${generateTemplatefolder}/${filename}`
206
+
207
+ if(_.last(filename.split('.'))!='eta'){
208
+ log.warn("skip file: ",filename)
209
+ continue;
210
+ }
211
+ if(foldertype=='nest'){
212
+ const arrfilename:string[] = filename.split('.')
213
+ const filecategory = arrfilename[0]
214
+ const filetype = arrfilename[1]
215
+ const autogeneratetypes = ['apischema','controller','jsonschema','model','processor','type','default']
216
+ if(autogeneratetypes.includes(filecategory)){
217
+ //multiple files in folder, append s at folder name
218
+ const storein = `${backendTargetFolder}/${filecategory}s`
219
+ const targetfile = `${storein}/${doctype}.${filecategory}.${filetype}`
220
+ if(!existsSync(storein)){
221
+ mkdirSync(storein,{recursive:true})
222
+ }
223
+ const filecontent = eta.render(templatepath, variables)
224
+ writeFileSync(targetfile,filecontent);
225
+ }else if(filecategory=='service'){ //service file won't override if exists
226
+
227
+ const targetfile = `${backendServiceFolder}/${doctype}.${filecategory}.${filetype}`
228
+ if(!existsSync(backendServiceFolder)){
229
+ mkdirSync(backendServiceFolder,{recursive:true})
230
+ }
231
+ if(!existsSync(targetfile)){
232
+ const filecontent = eta.render(templatepath, variables)
233
+ writeFileSync(targetfile,filecontent);
234
+ }
235
+
236
+ }
237
+ }else if(foldertype=='nuxt'){
238
+ const capname = capitalizeFirstLetter(docname)
239
+ const validateWritePage = (folder:string,isexists:boolean)=>{
240
+ if(!jsonschemas[docname][X_PAGE_TYPE] ){
241
+ return false
242
+ }else if(!isexists){
243
+ return true
244
+ }else if( existsSync(`${folder}/delete-me.txt`)){
245
+ return true
246
+ }else{
247
+ return false
248
+ }
249
+ }
250
+ const mapfiles = {
251
+ 'pages.[id].vue.eta': {
252
+ to:`pages/[xorg]/${docname}`,
253
+ as:'[id].vue',
254
+ validate: validateWritePage
255
+ },
256
+ 'pages.crud.vue.eta': {
257
+ to:`pages/[xorg]/${docname}`,
258
+ as:'index.vue',
259
+ validate: validateWritePage
260
+ },
261
+ 'simpleapp.doc.ts.eta': {
262
+ to:`simpleapp/docs`,
263
+ as:`${capname}Doc.ts`,
264
+ validate: (folder:string,isexists:boolean)=>!isexists
265
+ },
266
+ 'default.ts.eta': {
267
+ to:`simpleapp/generate/defaults`,
268
+ as:`${capname}.default.ts`,
269
+ validate: (folder:string,isexists:boolean)=>{
270
+ return true
271
+ }
272
+ },
273
+
274
+ 'simpleapp.generate.client.ts.eta': {
275
+ to:`simpleapp/generate/clients`,
276
+ as:`${capname}Client.ts`,
277
+ validate: (folder:string,isexists:boolean)=>{
278
+ return true
279
+ }
280
+ },
281
+ }
282
+
283
+ const target = mapfiles[filename]
284
+ const targetfolder = `${generateTypes[foldertype]}/${target.to}`
285
+ const targetfile = `${targetfolder}/${target.as}`
286
+ const isexists = existsSync(targetfile)
287
+ const iswrite:boolean = target.validate(targetfolder,isexists)
288
+ log.warn("process: ",filename,'---->',targetfile)
289
+ if(iswrite && !existsSync(targetfolder)){
290
+ mkdirSync(targetfolder,{recursive:true})
291
+ writeFileSync(`${targetfolder}/delete-me.txt`,"delete this file for keep modified page");
292
+ }
293
+
294
+ // if(
295
+ // target.override=="always" ||
296
+ // !existsSync(targetfile) ||
297
+ // (target.override=="check" && existsSync(`${targetfolder}/delete-me.txt`))
298
+ // ){
299
+ if(iswrite){
300
+ const filecontent = eta.render(templatepath, variables)
301
+ writeFileSync(targetfile,filecontent);
302
+ }
303
+
304
+
305
+
306
+
307
+ }
308
+ }
309
+
292
310
 
293
- //prepare backend config.ts
311
+ })
312
+
313
+
294
314
 
295
- //copy over frontend config.ts
296
315
  }
297
316
 
298
317
 
299
- const finalize=(modules:ModuleObject[],backendfolder:string,frontendfolder:string)=>{
300
- log.info("Finalizing foreignkey:",JSON.stringify(foreignkeys))
301
- mkdirSync(`${backendfolder}/src/dicts/`,{ recursive: true });
302
- mkdirSync(`${frontendfolder}/composables/`,{ recursive: true });
303
-
304
- const eta = new Eta({views:constants.templatedir});
305
- const txtMainModule = eta.render('./nest/app.module.eta', modules);
306
- writeFileSync(`${backendfolder}/src/app.module.ts`, txtMainModule);
318
+ const finalize=(modules:ModuleObject[])=>{
319
+ const renderProperties = {
320
+ configs:configs,
321
+ modules:modules,
322
+ allroles:allroles,
323
+ foreignkeys:allforeignkeys,
324
+ }
307
325
 
308
- const txtMainService = eta.render('./nest/app.service.eta', modules);
309
- writeFileSync(`${backendfolder}/src/app.service.ts`, txtMainService);
310
-
311
- const txtAppController = eta.render('./nest/app.controller.eta', modules);
312
- writeFileSync(`${backendfolder}/src/app.controller.ts`, txtAppController);
313
-
314
- const foreignkeyfile =`${backendfolder}/src/dicts/foreignkeys.json`
315
- writeFileSync(foreignkeyfile, JSON.stringify(foreignkeys));
316
- log.info("write to foreignkey file ",foreignkeyfile)
317
326
 
318
- const txtCatalogue = eta.render('./nuxt/composables.getautocomplete.ts.eta', modules);
319
- writeFileSync(`${frontendfolder}/composables/getAutocomplete.ts`, txtCatalogue);
327
+ Object.getOwnPropertyNames(generateTypes).forEach((foldertype)=>{
328
+ const frameworkpath = generateTypes[foldertype]
329
+ log.info("Generate ",foldertype)
330
+ const frameworkfolder = `${constants.templatedir}/${foldertype}`
331
+ const frameworkfiles = readdirSync(frameworkfolder,{recursive:true})
332
+ const eta = new Eta({views:frameworkfolder});
333
+
334
+ //generate code for framework
335
+ for(let index=0; index<frameworkfiles.length; index++){
336
+ const longfilename:string = String(frameworkfiles[index])
337
+ const patharr = longfilename.split('/')
338
+ const filename = _.last(patharr)
339
+ const arrfilename:string[] = filename.split('.')
340
+ // log.info("check longfilename:::",longfilename,"become====",arrfilename)
341
+ //only process .eta
342
+ if(_.last(arrfilename)=='eta'){
343
+ const relativepath = longfilename.includes('/') ? longfilename.replace(`/${filename}`,'') : ''
344
+ const foldername = `${frameworkpath}/${relativepath}`
345
+ const shortfilename = filename.replace('.eta','')
346
+ const targetfilename = `${foldername}/${shortfilename}`
347
+ if(!existsSync(foldername)){
348
+ mkdirSync(foldername,{recursive:true})
349
+ }
350
+ const templatename = `${frameworkfolder}/${longfilename}`.replace(".eta","")
351
+ log.info("Write template:",templatename, '----> ',targetfilename)
352
+ const txt = eta.render(longfilename, renderProperties)
353
+ writeFileSync(targetfilename,txt)
354
+
355
+ }else{
356
+ log.warn("skip: ",longfilename)
357
+ }
358
+
359
+ }
360
+ })
320
361
 
321
- const txtMenus = eta.render('./nuxt/composables.getmenus.ts.eta', modules);
322
- writeFileSync(`${frontendfolder}/composables/getMenus.ts`, txtMenus);
362
+ }
323
363
 
324
- const txtStringHelper= eta.render('./nuxt/composables.stringHelper.ts.eta', modules);
325
- writeFileSync(`${frontendfolder}/composables/stringHelper.ts`, txtStringHelper);
326
-
327
-
364
+ const prepareRoles =(groupsettings) => {
365
+ let roles = []
366
+ const docnames = Object.getOwnPropertyNames(groupsettings)
367
+ for(let i = 0; i< docnames.length; i++){
368
+ let docname = docnames[i]
369
+ let docpermissions:string[] = groupsettings[docname]
370
+ for(let j=0;j<docpermissions.length;j++){
371
+ const perm = docpermissions[j]
372
+ const typename = _.upperFirst(docname)
373
+ roles.push(`${typename}_${perm}`)
374
+ }
375
+ }
376
+ return roles
328
377
  }