@simitgroup/simpleapp-generator 1.0.9 → 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 (40) hide show
  1. package/README.md +124 -1
  2. package/dist/createproject.js +39 -18
  3. package/dist/createproject.js.map +1 -1
  4. package/dist/generate.js +47 -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 +38 -8
  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 +60 -28
  15. package/src/index.ts +31 -20
  16. package/src/processors/jsonschemabuilder.ts +48 -14
  17. package/src/storage.ts +3 -0
  18. package/src/type.ts +23 -1
  19. package/templates/SimpleAppClient.eta +10 -5
  20. package/templates/SimpleAppService.eta +65 -17
  21. package/templates/basic/model.eta +1 -1
  22. package/templates/basic/pageindex.vue.eta +50 -0
  23. package/templates/basic/pageindexwithid.vue.eta +1 -0
  24. package/templates/basic/{apiclient.eta → simpleappclient.eta} +6 -3
  25. package/templates/nuxt/app.vue.eta +8 -0
  26. package/templates/nuxt/components.crudsimple.vue.eta +95 -0
  27. package/templates/nuxt/components.debugdocdata.vue.eta +20 -0
  28. package/templates/nuxt/components.eventmonitor.vue.eta +79 -0
  29. package/templates/nuxt/components.menus.vue.eta +8 -0
  30. package/templates/nuxt/composables.getautocomplete.ts.eta +24 -0
  31. package/templates/nuxt/composables.getmenus.ts.eta +8 -0
  32. package/templates/nuxt/env.eta +3 -0
  33. package/templates/nuxt/layouts.default.vue.eta +10 -0
  34. package/templates/{nuxt.config.eta → nuxt/nuxt.config.ts.eta} +6 -3
  35. package/templates/nuxt/pages.index.vue.eta +3 -0
  36. package/templates/{nuxt.plugins.eta → nuxt/plugins.simpleapp.ts.eta} +11 -4
  37. package/templates/nuxt/server.api.ts.eta +131 -0
  38. package/templates/nuxt/tailwind.config.ts.eta +9 -0
  39. package/templates/nuxt/tailwind.css.eta +28 -0
  40. package/templates/nuxt.env.eta +0 -2
@@ -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.9",
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,7 +90,7 @@ 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,
@@ -189,7 +196,7 @@ const generate = (
189
196
  const txtReadme = eta.render('./readme', variables);
190
197
  writeFileSync(`${targetfolder}/README.md`, txtReadme);
191
198
 
192
- const frontendfile = `${frontendfolder}/server/docs/${variables.typename}Doc.ts`;
199
+ const frontendfile = `${frontendfolder}/simpleapp/simpleappdocs/${variables.typename}Doc.ts`;
193
200
  let frontEndCode = '';
194
201
  if (existsSync(frontendfile)) {
195
202
  const clientcodes = readFileSync(frontendfile).toString();
@@ -205,28 +212,39 @@ const generate = (
205
212
  }
206
213
  }
207
214
  variables.frontEndCode = frontEndCode ?? '';
208
- const txtDocClient = eta.render('./apiclient', variables);
215
+ const txtDocClient = eta.render('./simpleappclient.eta', variables);
209
216
  writeFileSync(frontendfile, txtDocClient);
210
217
 
211
- // // fs.writeFileSync(`${targetfolder}/${doctype}.uischema.ts`, txtUISchema);
212
- log.info(`- write completed: `+clc.green(doctype))
218
+ generateClientPage(variables,eta,frontendpagefolder)
219
+
220
+
221
+ log.info(`- write completed: ${doctype}`)
222
+
213
223
 
214
- //create type
215
- //create service
216
- //create controller
217
- //create module
218
- //create apischema
219
- //create beforesave if not exists
220
- // console.log(schema, res);
221
224
  }
222
225
  };
223
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
+ }
224
242
  const prepareEnvironments = (backendfolder:string,frontendfolder:string)=>{
225
243
  const targetfolder = `${backendfolder}/src/class`
226
- const targetfrontendfolder = `${frontendfolder}/server`
244
+ const targetfrontendfolder = `${frontendfolder}/server/api`
227
245
  try{
228
246
  mkdirSync(targetfolder,{recursive:true});
229
- mkdirSync(targetfrontendfolder);
247
+ mkdirSync(targetfrontendfolder,{recursive:true});
230
248
  }catch(error){
231
249
  //do nothing
232
250
  }
@@ -239,7 +257,7 @@ const prepareEnvironments = (backendfolder:string,frontendfolder:string)=>{
239
257
  copyFileSync(`${constants.templatedir}/SimpleAppController.eta`,`${targetfolder}/SimpleAppController.ts`)
240
258
 
241
259
  //copy over frontend apiabstract class
242
- // copyFileSync(`${constants.templatedir}/SimpleAppClient.eta`,`${targetfrontendfolder}/SimpleAppClient.ts`)
260
+ // copyFileSync(`${constants.templatedir}/nuxt.apigateway.eta`,`${targetfrontendfolder}/[...].ts`)
243
261
 
244
262
  //prepare backend config.ts
245
263
 
@@ -247,9 +265,23 @@ const prepareEnvironments = (backendfolder:string,frontendfolder:string)=>{
247
265
  }
248
266
 
249
267
 
250
- 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
+
251
273
  const eta = new Eta({views:constants.templatedir});
252
274
  const txtMainModule = eta.render('app.module.eta', modules);
253
- writeFileSync(`${targetfolder}/src/app.module.ts`, txtMainModule);
275
+ writeFileSync(`${backendfolder}/src/app.module.ts`, txtMainModule);
254
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
+
255
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
 
@@ -4,30 +4,45 @@ import * as js7 from 'json-schema';
4
4
  import { capitalizeFirstLetter } from '../libs';
5
5
  import {JsonSchemaProperties} from "../type"
6
6
  import { Logger, ILogObj } from "tslog";
7
+ import $RefParser from "@apidevtools/json-schema-ref-parser";
8
+ import {foreignkeys} from '../storage'
7
9
  // import { ConflictException } from '@nestjs/common';
8
10
  import {
9
11
  FieldModel,
10
12
  Fieldtypes,
11
13
  ChildModels,
12
14
  SchemaModel,
15
+ TypeForeignKey,
16
+ TypeForeignKeyCatalogue
13
17
  } from '../type';
14
18
  import { json } from 'stream/consumers';
15
19
  const log: Logger<ILogObj> = new Logger();
16
20
  const FIELD_AUTOCOMPLETE_CODE='field-autocomplete-code'
17
21
  const FIELD_AUTOCOMPLETE_NAME='field-autocomplete-name'
22
+ const FOREIGNKEY_PROPERTY='x-foreignkey'
18
23
  let allmodels: ChildModels = {};
24
+ let fullschema={}
19
25
  let fieldAutoCompleteCode=''
20
26
  let fieldAutoCompleteName=''
21
- export const readJsonSchemaBuilder = (
27
+
28
+ export const readJsonSchemaBuilder = async (
22
29
  doctype: string,
23
30
  docname: string,
24
- jsondata:JSONSchema7,
25
- ): ChildModels => {
31
+ orijsondata:JSONSchema7,
32
+ allforeignkeys:TypeForeignKeyCatalogue
33
+ ) => {
34
+
26
35
  fieldAutoCompleteCode=''
27
36
  fieldAutoCompleteName=''
28
37
  allmodels = {};
29
- const validateddata: JSONSchema7 = { ...jsondata };
38
+ const validateddata: JSONSchema7 = { ...orijsondata };
30
39
  let schema: SchemaModel | SchemaModel[];
40
+ const tmpjsondata = await $RefParser.dereference(orijsondata).then((schema)=>{
41
+ // console.log("schema",doctype, schema['properties']['category']? schema['properties']['category']:'')
42
+ return schema
43
+ })
44
+ const jsondata:JSONSchema7 = {...tmpjsondata} as JSONSchema7
45
+
31
46
 
32
47
  if (jsondata && jsondata.type == 'object') {
33
48
  //no _id then need add
@@ -45,14 +60,14 @@ export const readJsonSchemaBuilder = (
45
60
  log.error(`you shall define 1 field with format: '${FIELD_AUTOCOMPLETE_NAME}'}`)
46
61
  throw "missing field format"
47
62
  }
48
-
49
- return allmodels;
63
+
64
+ return Promise.resolve(allmodels);
50
65
  };
51
66
 
52
67
 
53
- const processObject = (doctype: string,
68
+ const processObject = (doctype: string,
54
69
  docname: string,
55
- jsondata:JSONSchema7,) : SchemaModel =>{
70
+ jsondata:JSONSchema7,) =>{
56
71
  if(!jsondata['properties']){
57
72
  throw ("Invalid json schema {doctype}.{docname}, no 'properties' defined")
58
73
  }
@@ -102,12 +117,31 @@ const genSchema = (
102
117
  if(obj.format && obj.format==FIELD_AUTOCOMPLETE_NAME){
103
118
  fieldAutoCompleteName=key
104
119
  }
105
-
106
- if (obj.type == 'object' && !obj.properties){
107
- console.log("Skip empty object",docname,': ',key)
108
- newmodel[key] = 'Object';
109
- }
110
- else if (obj.type == 'object' && obj.properties) {
120
+ // if (obj.type == 'object' && obj.items ){
121
+ // console.log("Refer to another object",docname,': ',key,obj,obj.items)
122
+
123
+ // obj,obj.items
124
+ //foreignkeys
125
+ //FOREIGNKEY_PROPERTY
126
+ // newmodel[key] = 'Object';
127
+ // }
128
+ // else
129
+ if (obj.type == 'object') {
130
+
131
+ if(obj[FOREIGNKEY_PROPERTY]){
132
+ console.warn("FOREIGNKEY_PROPERTY exists",FOREIGNKEY_PROPERTY,obj[FOREIGNKEY_PROPERTY])
133
+ const masterdatacollection = obj[FOREIGNKEY_PROPERTY]
134
+ const clientdatacollection = docname.toLowerCase()
135
+ const foreignkeyidentity= key+'._id'
136
+ if(!foreignkeys[masterdatacollection]){
137
+ let tmp:TypeForeignKey = {} as TypeForeignKey
138
+ tmp[clientdatacollection]=[foreignkeyidentity]
139
+ foreignkeys[masterdatacollection] = tmp
140
+ }else{
141
+ foreignkeys[masterdatacollection][clientdatacollection].push(foreignkeyidentity)
142
+ }
143
+
144
+ }
111
145
  genSchema(newName, obj.type, obj.properties, obj.required);
112
146
  newmodel[key] = newName;
113
147
  } else if (obj.type == 'array' && obj.items && objectitem?.type == 'object') {
package/src/storage.ts ADDED
@@ -0,0 +1,3 @@
1
+ import { TypeForeignKeyCatalogue } from './type'
2
+
3
+ export let foreignkeys:TypeForeignKeyCatalogue = {}
package/src/type.ts CHANGED
@@ -35,8 +35,30 @@ export type JsonSchemaProperties= {
35
35
  // JSONSchema7Definition ,JSONSchema7
36
36
  }
37
37
 
38
-
38
+ export type TypeForeignKeyCatalogue = {
39
+ [cataloguename:string]:TypeForeignKey
40
+ }
41
+ export type TypeForeignKey={
42
+ [collection:string]:string[]
43
+ }
39
44
  export type ModuleObject = {
40
45
  doctype:string
41
46
  docname:string
47
+ }
48
+ export type TypeGenerateDocumentVariable ={
49
+ name: string
50
+ doctype: string
51
+ models: ChildModels
52
+ autocompletecode:string
53
+ autocompletename:string
54
+ schema: SchemaModel
55
+ apiSchemaName: string
56
+ typename: string
57
+ fullApiSchemaName: string
58
+ fullTypeName:string
59
+ jsonschema: JSONSchema7
60
+ bothEndCode: string
61
+ frontEndCode: string
62
+ backEndCode: string
63
+ controllerCode:string
42
64
  }
@@ -14,6 +14,7 @@ type crudType = {
14
14
  export class SimpleAppClient<
15
15
  TData extends { _id?: string },
16
16
  TApi extends crudType,
17
+ defaultTimeout:number = 5000;
17
18
  > {
18
19
  protected docapi;
19
20
  protected data = <Ref<TData>>ref({} as TData);
@@ -36,7 +37,7 @@ export class SimpleAppClient<
36
37
  };
37
38
 
38
39
  async getById(id: string) {
39
- return await this.docapi.runFindOne(id).then((res: AxiosResponse) => {
40
+ return await this.docapi.runFindOne(id,{timeout:this.defaultTimeout}).then((res: AxiosResponse) => {
40
41
  // this.data.value = { ...res.data };
41
42
  Object.assign(this.data.value, res.data);
42
43
  return res;
@@ -48,7 +49,7 @@ export class SimpleAppClient<
48
49
  return await Promise.reject(errors);
49
50
  } else {
50
51
  return await this.docapi
51
- .runCreate(this.data.value)
52
+ .runCreate(this.data.value,{timeout:this.defaultTimeout})
52
53
  .then((res: AxiosResponse) => {
53
54
  this.data.value = { ...res.data };
54
55
  return res;
@@ -62,17 +63,17 @@ export class SimpleAppClient<
62
63
  return await Promise.reject(errors);
63
64
  } else {
64
65
  return await this.docapi
65
- .runUpdate(recordid, this.data.value)
66
+ .runUpdate(recordid, this.data.value,{timeout:this.defaultTimeout})
66
67
  .then((res: AxiosResponse) => {
67
68
  return res;
68
69
  });
69
70
  }
70
71
  }
71
72
  async delete(id: string) {
72
- return await this.docapi.runDelete(id);
73
+ return await this.docapi.runDelete(id,{timeout:this.defaultTimeout});
73
74
  }
74
75
  async list() {
75
- return await this.docapi.runList();
76
+ return await this.docapi.runList({timeout:this.defaultTimeout});
76
77
  }
77
78
  find() {}
78
79
  hook(type: string, data: TData) {
@@ -81,6 +82,10 @@ export class SimpleAppClient<
81
82
  }
82
83
  validateFailed() {
83
84
  const ajv = new Ajv({ allErrors: true });
85
+ ajv.addKeyword({
86
+ keyword:'autocompletesrc',
87
+ type:'string'
88
+ });
84
89
  addFormats(ajv);
85
90
  this.errorlist.value = {};
86
91
  this.hook('pre-validation', this.data.value);