@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.
- package/README.md +124 -1
- package/dist/createproject.js +39 -18
- package/dist/createproject.js.map +1 -1
- package/dist/generate.js +47 -20
- package/dist/generate.js.map +1 -1
- package/dist/index.js +36 -25
- package/dist/index.js.map +1 -1
- package/dist/processors/jsonschemabuilder.js +38 -8
- package/dist/processors/jsonschemabuilder.js.map +1 -1
- package/dist/storage.js +5 -0
- package/dist/storage.js.map +1 -0
- package/package.json +10 -5
- package/src/createproject.ts +40 -14
- package/src/generate.ts +60 -28
- package/src/index.ts +31 -20
- package/src/processors/jsonschemabuilder.ts +48 -14
- package/src/storage.ts +3 -0
- package/src/type.ts +23 -1
- package/templates/SimpleAppClient.eta +10 -5
- package/templates/SimpleAppService.eta +65 -17
- package/templates/basic/model.eta +1 -1
- package/templates/basic/pageindex.vue.eta +50 -0
- package/templates/basic/pageindexwithid.vue.eta +1 -0
- package/templates/basic/{apiclient.eta → simpleappclient.eta} +6 -3
- package/templates/nuxt/app.vue.eta +8 -0
- package/templates/nuxt/components.crudsimple.vue.eta +95 -0
- package/templates/nuxt/components.debugdocdata.vue.eta +20 -0
- package/templates/nuxt/components.eventmonitor.vue.eta +79 -0
- package/templates/nuxt/components.menus.vue.eta +8 -0
- package/templates/nuxt/composables.getautocomplete.ts.eta +24 -0
- package/templates/nuxt/composables.getmenus.ts.eta +8 -0
- package/templates/nuxt/env.eta +3 -0
- package/templates/nuxt/layouts.default.vue.eta +10 -0
- package/templates/{nuxt.config.eta → nuxt/nuxt.config.ts.eta} +6 -3
- package/templates/nuxt/pages.index.vue.eta +3 -0
- package/templates/{nuxt.plugins.eta → nuxt/plugins.simpleapp.ts.eta} +11 -4
- package/templates/nuxt/server.api.ts.eta +131 -0
- package/templates/nuxt/tailwind.config.ts.eta +9 -0
- package/templates/nuxt/tailwind.css.eta +28 -0
- package/templates/nuxt.env.eta +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonschemabuilder.js","sourceRoot":"","sources":["../../src/processors/jsonschemabuilder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jsonschemabuilder.js","sourceRoot":"","sources":["../../src/processors/jsonschemabuilder.ts"],"names":[],"mappings":"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"}
|
package/dist/storage.js
ADDED
|
@@ -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.
|
|
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": {
|
|
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"
|
package/src/createproject.ts
CHANGED
|
@@ -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};
|
|
35
|
+
exec(`cd ${targetfolder};pnpm install;pnpm install -D @types/node prettier @nuxtjs/tailwindcss`, (error, stdout, stderr)=>{
|
|
36
36
|
//;pnpm install
|
|
37
|
-
|
|
38
|
-
exec(`pnpm install --save ajv ajv-formats primeflex primeicons primevue axios json-schema @simitgroup/simpleapp-vue-component@latest`, (error, stdout, stderr)=>{
|
|
39
|
-
|
|
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
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
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}/
|
|
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}/
|
|
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('./
|
|
215
|
+
const txtDocClient = eta.render('./simpleappclient.eta', variables);
|
|
209
216
|
writeFileSync(frontendfile, txtDocClient);
|
|
210
217
|
|
|
211
|
-
|
|
212
|
-
|
|
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}/
|
|
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
|
|
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(`${
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
48
|
+
log.error(`${backendFolder} does not exists, please run "nest new -p pnpm ${backendFolder}"`)
|
|
42
49
|
}else if(!fs.existsSync(`${backendFolder}/.env`)){
|
|
43
|
-
|
|
50
|
+
log.info(`initial nest configuratoin for simpleapp generator`)
|
|
44
51
|
createNest(backendFolder,callback)
|
|
45
52
|
}else{
|
|
46
|
-
|
|
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
|
-
|
|
59
|
+
log.error(`${frontendFolder} does not exists, please run "npx nuxi@latest init ${frontendFolder}"`)
|
|
53
60
|
}else if(!fs.existsSync(`${frontendFolder}/.env`)){
|
|
54
|
-
|
|
61
|
+
log.info(`initial nuxt configuratoin for simpleapp generator`)
|
|
55
62
|
createNuxt(frontendFolder,callback)
|
|
56
63
|
}else{
|
|
57
|
-
|
|
64
|
+
log.warn(`.env file exists, skip nuxt initialization`)
|
|
58
65
|
callback()
|
|
59
66
|
|
|
60
67
|
}
|
|
61
68
|
}
|
|
62
69
|
runGenNext(()=>{
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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}/
|
|
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
|
-
|
|
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
|
-
|
|
27
|
+
|
|
28
|
+
export const readJsonSchemaBuilder = async (
|
|
22
29
|
doctype: string,
|
|
23
30
|
docname: string,
|
|
24
|
-
|
|
25
|
-
|
|
31
|
+
orijsondata:JSONSchema7,
|
|
32
|
+
allforeignkeys:TypeForeignKeyCatalogue
|
|
33
|
+
) => {
|
|
34
|
+
|
|
26
35
|
fieldAutoCompleteCode=''
|
|
27
36
|
fieldAutoCompleteName=''
|
|
28
37
|
allmodels = {};
|
|
29
|
-
const validateddata: JSONSchema7 = { ...
|
|
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 =
|
|
68
|
+
const processObject = (doctype: string,
|
|
54
69
|
docname: string,
|
|
55
|
-
jsondata:JSONSchema7,)
|
|
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
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
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);
|