@simitgroup/simpleapp-generator 1.0.8 → 1.0.14

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 (43) hide show
  1. package/README.md +128 -1
  2. package/dist/createproject.js +39 -18
  3. package/dist/createproject.js.map +1 -1
  4. package/dist/generate.js +49 -20
  5. package/dist/generate.js.map +1 -1
  6. package/dist/index.js +36 -25
  7. package/dist/index.js.map +1 -1
  8. package/dist/processors/jsonschemabuilder.js +60 -9
  9. package/dist/processors/jsonschemabuilder.js.map +1 -1
  10. package/dist/storage.js +5 -0
  11. package/dist/storage.js.map +1 -0
  12. package/package.json +10 -5
  13. package/src/createproject.ts +40 -14
  14. package/src/generate.ts +62 -28
  15. package/src/index.ts +31 -20
  16. package/src/processors/jsonschemabuilder.ts +70 -15
  17. package/src/storage.ts +3 -0
  18. package/src/type.ts +24 -2
  19. package/templates/SimpleAppClient.eta +10 -5
  20. package/templates/SimpleAppController.eta +4 -1
  21. package/templates/SimpleAppService.eta +87 -11
  22. package/templates/basic/controller.eta +17 -1
  23. package/templates/basic/model.eta +1 -1
  24. package/templates/basic/pageindex.vue.eta +50 -0
  25. package/templates/basic/pageindexwithid.vue.eta +1 -0
  26. package/templates/basic/service.eta +2 -0
  27. package/templates/basic/{apiclient.eta → simpleappclient.eta} +15 -7
  28. package/templates/nuxt/app.vue.eta +8 -0
  29. package/templates/nuxt/components.crudsimple.vue.eta +95 -0
  30. package/templates/nuxt/components.debugdocdata.vue.eta +20 -0
  31. package/templates/nuxt/components.eventmonitor.vue.eta +79 -0
  32. package/templates/nuxt/components.menus.vue.eta +8 -0
  33. package/templates/nuxt/composables.getautocomplete.ts.eta +24 -0
  34. package/templates/nuxt/composables.getmenus.ts.eta +8 -0
  35. package/templates/nuxt/env.eta +3 -0
  36. package/templates/nuxt/layouts.default.vue.eta +10 -0
  37. package/templates/{nuxt.config.eta → nuxt/nuxt.config.ts.eta} +6 -3
  38. package/templates/nuxt/pages.index.vue.eta +3 -0
  39. package/templates/{nuxt.plugins.eta → nuxt/plugins.simpleapp.ts.eta} +12 -2
  40. package/templates/nuxt/server.api.ts.eta +131 -0
  41. package/templates/nuxt/tailwind.config.ts.eta +9 -0
  42. package/templates/nuxt/tailwind.css.eta +28 -0
  43. package/templates/nuxt.env.eta +0 -2
@@ -1,14 +1,34 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.readJsonSchemaBuilder = void 0;
4
7
  const libs_1 = require("../libs");
8
+ const tslog_1 = require("tslog");
9
+ const json_schema_ref_parser_1 = __importDefault(require("@apidevtools/json-schema-ref-parser"));
10
+ const storage_1 = require("../storage");
5
11
  // import { ConflictException } from '@nestjs/common';
6
12
  const type_1 = require("../type");
13
+ const log = new tslog_1.Logger();
14
+ const FIELD_AUTOCOMPLETE_CODE = 'field-autocomplete-code';
15
+ const FIELD_AUTOCOMPLETE_NAME = 'field-autocomplete-name';
16
+ const FOREIGNKEY_PROPERTY = 'x-foreignkey';
7
17
  let allmodels = {};
8
- const readJsonSchemaBuilder = (doctype, docname, jsondata) => {
18
+ let fullschema = {};
19
+ let fieldAutoCompleteCode = '';
20
+ let fieldAutoCompleteName = '';
21
+ const readJsonSchemaBuilder = async (doctype, docname, orijsondata, allforeignkeys) => {
22
+ fieldAutoCompleteCode = '';
23
+ fieldAutoCompleteName = '';
9
24
  allmodels = {};
10
- const validateddata = Object.assign({}, jsondata);
25
+ const validateddata = Object.assign({}, orijsondata);
11
26
  let schema;
27
+ const tmpjsondata = await json_schema_ref_parser_1.default.dereference(orijsondata).then((schema) => {
28
+ // console.log("schema",doctype, schema['properties']['category']? schema['properties']['category']:'')
29
+ return schema;
30
+ });
31
+ const jsondata = Object.assign({}, tmpjsondata);
12
32
  if (jsondata && jsondata.type == 'object') {
13
33
  //no _id then need add
14
34
  // console.log(jsondata)
@@ -18,7 +38,15 @@ const readJsonSchemaBuilder = (doctype, docname, jsondata) => {
18
38
  else if (jsondata.type == 'array') {
19
39
  throw (`unsupport array type for ${docname}.${doctype}`);
20
40
  }
21
- return allmodels;
41
+ if (fieldAutoCompleteCode == '') {
42
+ log.error(`you shall define 1 field with format:'${FIELD_AUTOCOMPLETE_CODE}'`);
43
+ throw "missing field format";
44
+ }
45
+ if (fieldAutoCompleteName == '') {
46
+ log.error(`you shall define 1 field with format: '${FIELD_AUTOCOMPLETE_NAME}'}`);
47
+ throw "missing field format";
48
+ }
49
+ return Promise.resolve(allmodels);
22
50
  };
23
51
  exports.readJsonSchemaBuilder = readJsonSchemaBuilder;
24
52
  const processObject = (doctype, docname, jsondata) => {
@@ -50,14 +78,37 @@ requiredlist) => {
50
78
  Object.assign(obj, jsondata[key]);
51
79
  const objectitem = {};
52
80
  Object.assign(objectitem, obj.items);
53
- // Object.assign(objtmp,jsondata?[key]:{});
54
81
  const isrequired = requiredlist && requiredlist.includes(key);
55
- // console.log('----', key, isrequired, obj);
56
82
  const newName = docname + (0, libs_1.capitalizeFirstLetter)(key);
57
- // console.log(key);
58
- //need create sub model
59
- // console.log("----",key,obj.type,objectitem.type)
83
+ if (obj.format && obj.format == FIELD_AUTOCOMPLETE_CODE) {
84
+ fieldAutoCompleteCode = key;
85
+ }
86
+ if (obj.format && obj.format == FIELD_AUTOCOMPLETE_NAME) {
87
+ fieldAutoCompleteName = key;
88
+ }
89
+ // if (obj.type == 'object' && obj.items ){
90
+ // console.log("Refer to another object",docname,': ',key,obj,obj.items)
91
+ // obj,obj.items
92
+ //foreignkeys
93
+ //FOREIGNKEY_PROPERTY
94
+ // newmodel[key] = 'Object';
95
+ // }
96
+ // else
60
97
  if (obj.type == 'object') {
98
+ if (obj[FOREIGNKEY_PROPERTY]) {
99
+ console.warn("FOREIGNKEY_PROPERTY exists", FOREIGNKEY_PROPERTY, obj[FOREIGNKEY_PROPERTY]);
100
+ const masterdatacollection = obj[FOREIGNKEY_PROPERTY];
101
+ const clientdatacollection = docname.toLowerCase();
102
+ const foreignkeyidentity = key + '._id';
103
+ if (!storage_1.foreignkeys[masterdatacollection]) {
104
+ let tmp = {};
105
+ tmp[clientdatacollection] = [foreignkeyidentity];
106
+ storage_1.foreignkeys[masterdatacollection] = tmp;
107
+ }
108
+ else {
109
+ storage_1.foreignkeys[masterdatacollection][clientdatacollection].push(foreignkeyidentity);
110
+ }
111
+ }
61
112
  genSchema(newName, obj.type, obj.properties, obj.required);
62
113
  newmodel[key] = newName;
63
114
  }
@@ -78,7 +129,7 @@ requiredlist) => {
78
129
  // console.log(key,'--------newmodel',obj, newmodel[key]);
79
130
  }
80
131
  }
81
- allmodels[docname] = { type: schematype, model: newmodel };
132
+ allmodels[docname] = { type: schematype, model: newmodel, codeField: fieldAutoCompleteCode, nameField: fieldAutoCompleteName };
82
133
  return newmodel;
83
134
  };
84
135
  const getField = (fieldname, obj, isrequired) => {
@@ -1 +1 @@
1
- {"version":3,"file":"jsonschemabuilder.js","sourceRoot":"","sources":["../../src/processors/jsonschemabuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jsonschemabuilder.js","sourceRoot":"","sources":["../../src/processors/jsonschemabuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.foreignkeys = void 0;
4
+ exports.foreignkeys = {};
5
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":";;;AAEW,QAAA,WAAW,GAA2B,EAAE,CAAA"}
package/package.json CHANGED
@@ -1,21 +1,25 @@
1
1
  {
2
2
  "name": "@simitgroup/simpleapp-generator",
3
- "version": "1.0.8",
4
- "description": "frontend nuxtjs and backend nests code generator using jsonschema",
3
+ "version": "1.0.14",
4
+ "description": "frontend nuxtjs and backend nests code generator using jsonschema",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
7
7
  "generate": "ts-node src/index.ts -c ../sampleconfig.json; pnpm exec prettier ./backend --write;pnpm exec prettier ./frontend --write",
8
8
  "build": "npx tsc",
9
9
  "test": "echo \"Error: no test specified\" && exit 1"
10
- },
10
+ },
11
11
  "keywords": [],
12
- "author": "Ks Tan",
12
+ "author": "Ks Tan",
13
13
  "license": "ISC",
14
- "repository": {"type": "git", "url": "git://github.com/SIMITGROUP/simpleapp-generator.git"},
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git://github.com/SIMITGROUP/simpleapp-generator.git"
17
+ },
15
18
  "publishConfig": {
16
19
  "access": "public"
17
20
  },
18
21
  "dependencies": {
22
+ "@apidevtools/json-schema-ref-parser": "^10.1.0",
19
23
  "@nestjs/config": "^3.0.0",
20
24
  "@nestjs/mongoose": "^10.0.1",
21
25
  "@nestjs/swagger": "^7.1.8",
@@ -29,6 +33,7 @@
29
33
  "figlet": "^1.6.0",
30
34
  "fs": "0.0.1-security",
31
35
  "json-schema": "^0.4.0",
36
+ "json-schema-ref-parser": "^9.0.9",
32
37
  "mongoose": "^7.4.4",
33
38
  "path": "^0.12.7",
34
39
  "tslog": "^4.9.1"
@@ -1,5 +1,5 @@
1
1
  import { exec ,spawn} from "child_process";
2
- import {writeFileSync} from 'fs'
2
+ import {mkdirSync, writeFileSync} from 'fs'
3
3
  import * as constants from './constant'
4
4
  import { Logger, ILogObj } from "tslog";
5
5
  const log: Logger<ILogObj> = new Logger();
@@ -32,24 +32,50 @@ export const createNuxt= (targetfolder:string,callback)=>{
32
32
  log.info("setting up nuxt frontend ${targetfolder}")
33
33
 
34
34
  log.info(`frontend nuxt project "${targetfolder}" created, installing module`)
35
- exec(`cd ${targetfolder};mkdir plugins;pnpm install;pnpm install -D prettier`, (error, stdout, stderr)=>{
35
+ exec(`cd ${targetfolder};pnpm install;pnpm install -D @types/node prettier @nuxtjs/tailwindcss`, (error, stdout, stderr)=>{
36
36
  //;pnpm install
37
- if(!error){
38
- exec(`pnpm install --save ajv ajv-formats primeflex primeicons primevue axios json-schema @simitgroup/simpleapp-vue-component@latest`, (error, stdout, stderr)=>{
39
- const eta = new Eta({views: constants.templatedir});
37
+ console.log(error, stdout, stderr)
38
+ exec(`cd ${targetfolder};pnpm install --save ajv ajv-formats primeflex primeicons prettier primevue axios json-schema mitt @simitgroup/simpleapp-vue-component@latest`, (error, stdout, stderr)=>{
39
+ console.log(error, stdout, stderr)
40
+
41
+ mkdirSync(`${targetfolder}/assets/css/`,{recursive:true})
42
+ mkdirSync(`${targetfolder}/layouts`,{recursive:true})
43
+ mkdirSync(`${targetfolder}/components`,{recursive:true})
44
+ mkdirSync(`${targetfolder}/server/api`,{recursive:true})
45
+ mkdirSync(`${targetfolder}/pages`,{recursive:true})
46
+ mkdirSync(`${targetfolder}/plugins`,{recursive:true})
47
+ const eta = new Eta({views: `${constants.templatedir}/nuxt`});
40
48
  const variables=[]
41
- const txtEnv = eta.render('./nuxt.env.eta', variables);
42
- writeFileSync(`${targetfolder}/.env`, txtEnv);
43
- const txtConfig = eta.render('./nuxt.config.eta', variables);
44
- writeFileSync(`${targetfolder}/nuxt.config.ts`, txtConfig);
45
- const txtPlugins = eta.render('./nuxt.plugins.eta', variables);
46
- writeFileSync(`${targetfolder}/plugins/simpleapp.ts`, txtPlugins);
49
+ const writes = {
50
+ './app.vue.eta':'app.vue',
51
+ './components.eventmonitor.vue.eta':'components/EventMonitor.vue',
52
+ './components.menus.vue.eta':'components/Menus.vue',
53
+ './components.crudsimple.vue.eta':'components/CrudSimple.vue',
54
+ './components.debugdocdata.vue.eta':'components/DebugDocumentData.vue',
55
+ './layouts.default.vue.eta':'layouts/default.vue',
56
+ './server.api.ts.eta':'server/api/[...].ts',
57
+ './nuxt.config.ts.eta':'nuxt.config.ts',
58
+ './pages.index.vue.eta':'pages/index.vue',
59
+ './plugins.simpleapp.ts.eta':'plugins/simpleapp.ts',
60
+ './tailwind.config.ts.eta':'tailwind.config.ts',
61
+ './tailwind.css.eta':'assets/css/tailwind.css',
62
+ './env.eta':'.env',
63
+ }
64
+
65
+ const templates = Object.getOwnPropertyNames(writes)
66
+ for(let i=0; i<templates.length;i++){
67
+ const template = templates[i]
68
+ const filename = writes[template]
69
+ const txt = eta.render(template, variables);
70
+ const file =`${targetfolder}/${filename}`
71
+ log.info("writing ",file)
72
+ writeFileSync(file, txt);
73
+ }
74
+
47
75
  log.info("nuxt project completed")
48
76
  callback()
49
77
  })
50
- }else{
51
- throw error
52
- }
78
+
53
79
  })
54
80
 
55
81
  }
package/src/generate.ts CHANGED
@@ -2,16 +2,17 @@
2
2
  // import { readJsonSchemaBuilder } from './processors/jsonschemabuilder';
3
3
  import * as constants from './constant'
4
4
  import {readJsonSchemaBuilder} from './processors/jsonschemabuilder'
5
+ import {foreignkeys} from './storage'
5
6
  // import { compile } from 'json-schema-to-typescript';
6
7
  // import { Fieldtypes, SchemaModel, ChildModels } from './type';
7
- import { Fieldtypes, SchemaModel, ChildModels,ModuleObject } from './type'
8
+ import { TypeForeignKeyCatalogue, TypeGenerateDocumentVariable,ChildModels,ModuleObject } from './type'
8
9
  import { Logger, ILogObj } from "tslog";
9
10
  const log: Logger<ILogObj> = new Logger();
10
11
  const clc = require("cli-color");
11
12
 
12
13
 
13
14
  const path = require('path');
14
- import {mkdirSync,readdir,readFileSync,writeFileSync,existsSync,copyFileSync, readdirSync} from 'fs'
15
+ import {mkdirSync, readdir,readFileSync,writeFileSync,existsSync,copyFileSync, readdirSync} from 'fs'
15
16
  const { Eta } = require('eta');
16
17
  const { capitalizeFirstLetter }= require('./libs');
17
18
  const extFb = '.xfb.json';
@@ -20,9 +21,10 @@ const extjsonschema = '.jsonschema.json';
20
21
  let jsonschemas = {};
21
22
  const docs = [];
22
23
 
23
- export const initialize = (defFolder:string,backendfolder:string,frontendfolder:string) => {
24
+ export const initialize = async (defFolder:string,backendfolder:string,frontendfolder:string) => {
24
25
  prepareEnvironments(backendfolder,frontendfolder)
25
- let activatemodules:ModuleObject[]=[]
26
+ let activatemodules:ModuleObject[]=[]
27
+ //
26
28
  const files = readdirSync(defFolder)
27
29
  // readdir(defFolder, (err, files) => {
28
30
  // files.forEach((file) => {
@@ -40,17 +42,22 @@ let activatemodules:ModuleObject[]=[]
40
42
  log.info(`Load `+clc.green(file))
41
43
  rendertype = 'basic';
42
44
  jsonschemas[docname] = jsondata;
43
- allmodels = readJsonSchemaBuilder(doctype, docname, jsondata);
45
+ // foreignkeys:
46
+ // tmpforeignkeys:TypeForeignKey
47
+ allmodels = await readJsonSchemaBuilder(doctype, docname, jsondata,foreignkeys);
48
+
49
+ //foreignkeycatalogues
50
+ // foreignkeys
44
51
  generate(docname, doctype, rendertype, allmodels,backendfolder,frontendfolder);
45
52
  activatemodules.push({doctype:doctype,docname:capitalizeFirstLetter(docname)})
46
53
  } else {
47
54
  log.warn(`Load `+clc.yellow(file) + ` but it is not supported`)
48
- }
49
-
55
+ }
50
56
  }
57
+ // log.warn("foreignkeys---",foreignkeys)
51
58
  log.info("Activated backend modules: ",activatemodules)
52
59
  // log.info(activatemodules)
53
- loadSimpleAppModules(activatemodules,backendfolder)
60
+ finalize(activatemodules,backendfolder,frontendfolder)
54
61
  return Promise.resolve(true)
55
62
  }
56
63
 
@@ -65,12 +72,12 @@ const generate = (
65
72
  frontendfolder:string
66
73
  ) => {
67
74
  const targetfolder = `${backendfolder}/src/docs/${doctype}`;
68
-
75
+ const frontendpagefolder=`${frontendfolder}/pages`
69
76
  try {
70
77
 
71
78
  mkdirSync(targetfolder,{ recursive: true });
72
- mkdirSync(`${frontendfolder}/server/docs/`,{ recursive: true });
73
-
79
+ mkdirSync(`${frontendfolder}/simpleapp/simpleappdocs/`,{ recursive: true });
80
+ mkdirSync(frontendpagefolder,{recursive:true})
74
81
  } catch (err) {
75
82
  //do nothing if folder exists
76
83
  } finally {
@@ -83,10 +90,12 @@ const generate = (
83
90
  'const initType=(str)=>{return ["string","number","boolean","array","object"].includes(str) ? capitalizeFirstLetter(str) : str;}',
84
91
  });
85
92
 
86
- const variables = {
93
+ const variables:TypeGenerateDocumentVariable = {
87
94
  name: docname,
88
95
  doctype: doctype,
89
96
  models: allmodels,
97
+ autocompletecode:allmodels[capitalizeFirstLetter(docname)].codeField,
98
+ autocompletename:allmodels[capitalizeFirstLetter(docname)].nameField,
90
99
  schema: allmodels[capitalizeFirstLetter(docname)].model,
91
100
  apiSchemaName: capitalizeFirstLetter(docname), //capitalizeFirstLetter(doctype) + 'ApiSchema',
92
101
  typename: capitalizeFirstLetter(docname),
@@ -187,7 +196,7 @@ const generate = (
187
196
  const txtReadme = eta.render('./readme', variables);
188
197
  writeFileSync(`${targetfolder}/README.md`, txtReadme);
189
198
 
190
- const frontendfile = `${frontendfolder}/server/docs/${variables.typename}Doc.ts`;
199
+ const frontendfile = `${frontendfolder}/simpleapp/simpleappdocs/${variables.typename}Doc.ts`;
191
200
  let frontEndCode = '';
192
201
  if (existsSync(frontendfile)) {
193
202
  const clientcodes = readFileSync(frontendfile).toString();
@@ -203,28 +212,39 @@ const generate = (
203
212
  }
204
213
  }
205
214
  variables.frontEndCode = frontEndCode ?? '';
206
- const txtDocClient = eta.render('./apiclient', variables);
215
+ const txtDocClient = eta.render('./simpleappclient.eta', variables);
207
216
  writeFileSync(frontendfile, txtDocClient);
208
217
 
209
- // // fs.writeFileSync(`${targetfolder}/${doctype}.uischema.ts`, txtUISchema);
210
- log.info(`- write completed: `+clc.green(doctype))
218
+ generateClientPage(variables,eta,frontendpagefolder)
219
+
220
+
221
+ log.info(`- write completed: ${doctype}`)
222
+
211
223
 
212
- //create type
213
- //create service
214
- //create controller
215
- //create module
216
- //create apischema
217
- //create beforesave if not exists
218
- // console.log(schema, res);
219
224
  }
220
225
  };
221
226
 
227
+ const generateClientPage=(variables:TypeGenerateDocumentVariable,eta,frontendpagefolder:string)=>{
228
+ const docname = variables.name
229
+ const targetfolder = `${frontendpagefolder}/${docname}`
230
+ const overridefilename = `${targetfolder}/delete-me-for-avoid-override`
231
+ if(!existsSync(targetfolder)){
232
+ mkdirSync(targetfolder)
233
+ writeFileSync(overridefilename,'delete this file to prevent override by generator')
234
+ }
235
+ if(existsSync(overridefilename)){
236
+ const txtIndex= eta.render('./pageindex.vue.eta', variables);
237
+ const txtIndexwithid= eta.render('./pageindexwithid.vue.eta', variables);
238
+ writeFileSync(`${targetfolder}/index.vue`,txtIndex)
239
+ writeFileSync(`${targetfolder}/[id].vue`,txtIndexwithid)
240
+ }
241
+ }
222
242
  const prepareEnvironments = (backendfolder:string,frontendfolder:string)=>{
223
243
  const targetfolder = `${backendfolder}/src/class`
224
- const targetfrontendfolder = `${frontendfolder}/server/class`
244
+ const targetfrontendfolder = `${frontendfolder}/server/api`
225
245
  try{
226
246
  mkdirSync(targetfolder,{recursive:true});
227
- mkdirSync(targetfrontendfolder);
247
+ mkdirSync(targetfrontendfolder,{recursive:true});
228
248
  }catch(error){
229
249
  //do nothing
230
250
  }
@@ -237,7 +257,7 @@ const prepareEnvironments = (backendfolder:string,frontendfolder:string)=>{
237
257
  copyFileSync(`${constants.templatedir}/SimpleAppController.eta`,`${targetfolder}/SimpleAppController.ts`)
238
258
 
239
259
  //copy over frontend apiabstract class
240
- // copyFileSync(`${constants.templatedir}/SimpleAppClient.eta`,`${targetfrontendfolder}/SimpleAppClient.ts`)
260
+ // copyFileSync(`${constants.templatedir}/nuxt.apigateway.eta`,`${targetfrontendfolder}/[...].ts`)
241
261
 
242
262
  //prepare backend config.ts
243
263
 
@@ -245,9 +265,23 @@ const prepareEnvironments = (backendfolder:string,frontendfolder:string)=>{
245
265
  }
246
266
 
247
267
 
248
- const loadSimpleAppModules=(modules:ModuleObject[],targetfolder:string)=>{
268
+ const finalize=(modules:ModuleObject[],backendfolder:string,frontendfolder:string)=>{
269
+ log.info("Finalizing foreignkey:",foreignkeys)
270
+ mkdirSync(`${backendfolder}/src/dicts/`,{ recursive: true });
271
+ mkdirSync(`${frontendfolder}/composables/`,{ recursive: true });
272
+
249
273
  const eta = new Eta({views:constants.templatedir});
250
274
  const txtMainModule = eta.render('app.module.eta', modules);
251
- writeFileSync(`${targetfolder}/src/app.module.ts`, txtMainModule);
275
+ writeFileSync(`${backendfolder}/src/app.module.ts`, txtMainModule);
252
276
 
277
+ const foreignkeyfile =`${backendfolder}/src/dicts/foreignkeys.json`
278
+ writeFileSync(foreignkeyfile, JSON.stringify(foreignkeys));
279
+ console.log("write to foreignkey file ",foreignkeyfile)
280
+
281
+ const txtCatalogue = eta.render('./nuxt/composables.getautocomplete.ts.eta', modules);
282
+ writeFileSync(`${frontendfolder}/composables/getAutocomplete.ts`, txtCatalogue);
283
+
284
+ const txtMenus = eta.render('./nuxt/composables.getmenus.ts.eta', modules);
285
+ writeFileSync(`${frontendfolder}/composables/getMenus.ts`, txtMenus);
286
+
253
287
  }
package/src/index.ts CHANGED
@@ -7,29 +7,36 @@ const {createNuxt,createNest} =require( './createproject')
7
7
  const {exec} = require( "child_process")
8
8
 
9
9
  const capitalizeFirstLetter= require( './libs')
10
- // const {Logger, ILogObj} = require( "tslog");
10
+ const {Logger, ILogObj} = require( "tslog");
11
+
12
+ const log :typeof Logger= new Logger();
11
13
 
12
- // const log: Logger = new Logger();
13
14
  const figlet = require("figlet");
14
15
  // const program = new Command();
16
+ const pj = require('../package.json')
15
17
 
16
-
17
- let version='1.0.8'
18
+ let version=pj.version
18
19
  program
19
20
  .version(version)
20
21
  .description("An simpleapp CLI tool for generate frontend (vuejs) and backend(nestjs) codes")
21
22
  .option("-c, --config-file <value>", 'configuration file content such as:{"definationsFolder":"./definations", "backendFolder":"./nestproject/src/docs", "frontendFolder":"./nuxt/server"}')
22
- .option("-s, --definations-folder <value>", "load defination files from which folder")
23
- .option("-b, --backend-folder <value>", "Create backend code at which folder")
24
- .option("-f, --frontend-folder <value>", "Create frontend code at which folder")
25
- .option("-i, --openapi3-yaml <value>", 'openapi3.yaml generated by backend server')
23
+ // .option("-s, --definations-folder <value>", "load defination files from which folder")
24
+ // .option("-b, --backend-folder <value>", "Create backend code at which folder")
25
+ // .option("-f, --frontend-folder <value>", "Create frontend code at which folder")
26
+ // .option("-i, --openapi3-yaml <value>", 'openapi3.yaml generated by backend server')
26
27
  .parse(process.argv);
27
28
 
28
29
 
29
30
  const options = program.opts();
30
31
  console.log(figlet.textSync(`SimpleApp Generator ${version}`));
31
32
  // console.log(options)
32
- const configs = require(options.configFile)
33
+ let path=''
34
+ if(options.configFile[0]=='.'){
35
+ path=process.cwd()+'/'+options.configFile
36
+ }else{
37
+ path=options.configFile
38
+ }
39
+ const configs = require(path)
33
40
  console.log("configurations: ",configs)
34
41
  const definationsFolder = configs.definationsFolder ?? options.definationsFolder
35
42
  const backendFolder = configs.backendFolder ?? options.backendFolder
@@ -38,41 +45,45 @@ const openapi3Yaml:string = configs.openapi3Yaml ?? options.openapi3Yaml
38
45
 
39
46
  const runGenNext = (callback)=>{
40
47
  if(!fs.existsSync(backendFolder)){
41
- console.error(`${backendFolder} does not exists, please run "nest new -p pnpm ${backendFolder}"`)
48
+ log.error(`${backendFolder} does not exists, please run "nest new -p pnpm ${backendFolder}"`)
42
49
  }else if(!fs.existsSync(`${backendFolder}/.env`)){
43
- console.log(`initial nest configuratoin for simpleapp generator`)
50
+ log.info(`initial nest configuratoin for simpleapp generator`)
44
51
  createNest(backendFolder,callback)
45
52
  }else{
46
- console.log(`.env file exists, skip nest initialization`)
53
+ log.warn(`.env file exists, skip nest initialization`)
47
54
  callback()
48
55
  }
49
56
  }
50
57
  const runGenNuxt = (callback)=>{
51
58
  if(!fs.existsSync(frontendFolder)){
52
- console.error(`${frontendFolder} does not exists, please run "npx nuxi@latest init ${frontendFolder}"`)
59
+ log.error(`${frontendFolder} does not exists, please run "npx nuxi@latest init ${frontendFolder}"`)
53
60
  }else if(!fs.existsSync(`${frontendFolder}/.env`)){
54
- console.log(`initial nuxt configuratoin for simpleapp generator`)
61
+ log.info(`initial nuxt configuratoin for simpleapp generator`)
55
62
  createNuxt(frontendFolder,callback)
56
63
  }else{
57
- console.log(`.env file exists, skip nuxt initialization`)
64
+ log.warn(`.env file exists, skip nuxt initialization`)
58
65
  callback()
59
66
 
60
67
  }
61
68
  }
62
69
  runGenNext(()=>{
63
- console.log("runGenNext (backen) done")
64
- // runGenNuxt(()=>{
65
- console.log("runGenNuxt (frontend) done")
70
+
71
+ log.info("runGenNext (backen) done")
72
+ runGenNuxt(()=>{
73
+ log.info("runGenNuxt (frontend) done")
66
74
  generator.initialize(definationsFolder,backendFolder,frontendFolder)
75
+ exec(`cd ${frontendFolder};npx prettier --write "./pages/**/*.vue" "./simpleapp/**/*" `)
76
+ exec(`cd ${backendFolder};npx run format `)
67
77
  if(openapi3Yaml !=''){
68
78
 
69
- exec(`openapi-generator generate -i ${openapi3Yaml} -o ${frontendFolder}/server/openapi -g typescript-axios --skip-validate-spec`,(error, stdout, stderr)=>{
79
+ exec(`openapi-generator generate -i ${openapi3Yaml} -o ${frontendFolder}/simpleapp/openapi -g typescript-axios --skip-validate-spec`,(error, stdout, stderr)=>{
70
80
  if(error){
71
- console.error(stderr);
81
+ log.error(stderr);
72
82
  }
73
83
  });
74
84
  }
75
85
  })
86
+ })
76
87
 
77
88
 
78
89