@simitgroup/simpleapp-generator 1.0.9 → 1.0.15
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 +148 -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 +18 -0
- package/templates/nuxt/composables.getautocomplete.ts.eta +24 -0
- package/templates/nuxt/composables.getmenus.ts.eta +9 -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
package/README.md
CHANGED
|
@@ -1,3 +1,92 @@
|
|
|
1
|
+
after generate
|
|
2
|
+
1. `./backend/tsconfig.ts` add bolow into compile options
|
|
3
|
+
```typescript
|
|
4
|
+
"resolveJsonModule": true,
|
|
5
|
+
"esModuleInterop": true,
|
|
6
|
+
```
|
|
7
|
+
2.`./backend/.env` change mongodb setting as below example:
|
|
8
|
+
```bash
|
|
9
|
+
MONGODB_URL='mongodb://mongoadmin:secret@localhost:27017/admin?authMechanism=DEFAULT'
|
|
10
|
+
```
|
|
11
|
+
3. download http://localhost:8080/api into `./openapi.yaml`
|
|
12
|
+
4. regenerate code (for frontend can function completely)
|
|
13
|
+
5.
|
|
14
|
+
|
|
15
|
+
9. beautify default tailwind ui
|
|
16
|
+
1. front page
|
|
17
|
+
2. top bar
|
|
18
|
+
3. menu bars
|
|
19
|
+
4. default with of each component is it nicely fit
|
|
20
|
+
5. table layout
|
|
21
|
+
6. error messages
|
|
22
|
+
7. error formating
|
|
23
|
+
7. load backend tsconfig and add more property: **
|
|
24
|
+
8. add prettier formating option for frontend
|
|
25
|
+
9. write proper user guide
|
|
26
|
+
10.add find options
|
|
27
|
+
11.retain modifications of controller, service, apiclients
|
|
28
|
+
12.add find records
|
|
29
|
+
13.add workflow functions
|
|
30
|
+
14.add permission control
|
|
31
|
+
16.access right
|
|
32
|
+
17.setting of tenants
|
|
33
|
+
18.keep audit trail into db
|
|
34
|
+
19.function of remain menulist
|
|
35
|
+
20.security of string input, block xss
|
|
36
|
+
21.control csrf
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
10.plugin for ajv
|
|
40
|
+
long string format for description
|
|
41
|
+
errors formating
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
# Todo
|
|
47
|
+
x8. simpleapp generate currentfolder error **
|
|
48
|
+
x1. override app.vue *
|
|
49
|
+
x2. create layout
|
|
50
|
+
simpleapp (first time only)
|
|
51
|
+
/default *
|
|
52
|
+
x3. components/ (first time only)
|
|
53
|
+
x /MonitorEvent.vue *
|
|
54
|
+
x /CrudBasic.vue **
|
|
55
|
+
x /Menubar *
|
|
56
|
+
4. create page/docs (everytime)
|
|
57
|
+
/index.ts
|
|
58
|
+
//create page if docs/documentname not exists ***
|
|
59
|
+
//override if docs/documentname/delete-me-for-avoid-override exists *
|
|
60
|
+
5. login/logout sessions
|
|
61
|
+
x6. auto create *
|
|
62
|
+
x server/api to backend *
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
1. define foreign key relationship in json schema2
|
|
69
|
+
2. auto index and block deletion
|
|
70
|
+
3. when delete identify foreign connected documents
|
|
71
|
+
4. how to unique key
|
|
72
|
+
5. how to multi-tenancy
|
|
73
|
+
6. login/logout in nuxt
|
|
74
|
+
7. jwt in nestjs
|
|
75
|
+
8. format errors at server side link back client side
|
|
76
|
+
9. how to auto toast
|
|
77
|
+
10.server side custom validation link back client side
|
|
78
|
+
11.permission controls
|
|
79
|
+
12.find records
|
|
80
|
+
13.audit trail
|
|
81
|
+
14.data isolation by org, branch and tenant
|
|
82
|
+
15.statistics, aggregations
|
|
83
|
+
16.auto generate frontend page
|
|
84
|
+
17.
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
1
90
|
# simpleapp-generator
|
|
2
91
|
## this project still in alpha stage!
|
|
3
92
|
|
|
@@ -44,6 +133,13 @@ Key Ideal:
|
|
|
44
133
|
- you can regenerate source code multiple time without worry your customization gone (there is a way!)
|
|
45
134
|
|
|
46
135
|
|
|
136
|
+
Init Nuxt script
|
|
137
|
+
1. npm i -D @sidebase/nuxt-auth
|
|
138
|
+
2. pnpm i --save next-auth@4.21.1
|
|
139
|
+
npm i -D @sidebase/nuxt-session
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
47
143
|
## You shall know
|
|
48
144
|
This project assume you familiar with below:
|
|
49
145
|
1. typescript (no typescript, not reliable frontend)
|
|
@@ -55,6 +151,10 @@ There is special format value:
|
|
|
55
151
|
1. `field-autcomplete-code`:field for document code, like `student_code,document_no`
|
|
56
152
|
2. `field-autocomplete-label`: field for document name, like `student_name, product_name`
|
|
57
153
|
|
|
154
|
+
# Special properties:
|
|
155
|
+
## object:
|
|
156
|
+
* autocomplete-src=category => autocomplete list from server-url/category/autocomplete
|
|
157
|
+
|
|
58
158
|
You need to install mongodb and openapi generator:
|
|
59
159
|
1. https://www.mongodb.com/docs/manual/installation/
|
|
60
160
|
2. https://openapi-generator.tech/docs/installation/
|
|
@@ -669,4 +769,51 @@ async newFindOne(@Param('id') id: string) {
|
|
|
669
769
|
`person.addHobbies('hobby1')`,`person.addAddress({})`,`person.delAddress(index:number)` edit `newFindOne`:
|
|
670
770
|
```
|
|
671
771
|
```
|
|
672
|
-
6. create bothend code for `person`
|
|
772
|
+
6. create bothend code for `person`
|
|
773
|
+
|
|
774
|
+
|
|
775
|
+
|
|
776
|
+
foreign key
|
|
777
|
+
cat
|
|
778
|
+
category_id
|
|
779
|
+
category_code
|
|
780
|
+
category_name
|
|
781
|
+
|
|
782
|
+
product
|
|
783
|
+
product_id
|
|
784
|
+
product_code
|
|
785
|
+
product_name
|
|
786
|
+
category => category_id: category_code
|
|
787
|
+
|
|
788
|
+
|
|
789
|
+
|
|
790
|
+
invoice
|
|
791
|
+
invoice_id
|
|
792
|
+
invoice_no
|
|
793
|
+
invoice_date
|
|
794
|
+
total
|
|
795
|
+
details =>
|
|
796
|
+
product => product_id: product_code
|
|
797
|
+
qty
|
|
798
|
+
price
|
|
799
|
+
subtotal
|
|
800
|
+
|
|
801
|
+
order
|
|
802
|
+
order_id
|
|
803
|
+
order_no
|
|
804
|
+
order_date
|
|
805
|
+
total
|
|
806
|
+
details =>
|
|
807
|
+
product => product_id: product_code
|
|
808
|
+
qty
|
|
809
|
+
price
|
|
810
|
+
subtotal
|
|
811
|
+
|
|
812
|
+
|
|
813
|
+
cat => foreignkey: []
|
|
814
|
+
prd => foreignkey: category => category
|
|
815
|
+
invoice => foreignkey: detail.product=>product
|
|
816
|
+
order => foreignkey: detail.product=>product
|
|
817
|
+
|
|
818
|
+
cat =[product.category]
|
|
819
|
+
product=[invoice.detail.product, order.detail.product]
|
package/dist/createproject.js
CHANGED
|
@@ -56,25 +56,46 @@ const checkNestCli = (callback) => {
|
|
|
56
56
|
const createNuxt = (targetfolder, callback) => {
|
|
57
57
|
log.info("setting up nuxt frontend ${targetfolder}");
|
|
58
58
|
log.info(`frontend nuxt project "${targetfolder}" created, installing module`);
|
|
59
|
-
(0, child_process_1.exec)(`cd ${targetfolder};
|
|
59
|
+
(0, child_process_1.exec)(`cd ${targetfolder};pnpm install;pnpm install -D @types/node prettier @nuxtjs/tailwindcss`, (error, stdout, stderr) => {
|
|
60
60
|
//;pnpm install
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
61
|
+
console.log(error, stdout, stderr);
|
|
62
|
+
(0, child_process_1.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) => {
|
|
63
|
+
console.log(error, stdout, stderr);
|
|
64
|
+
(0, fs_1.mkdirSync)(`${targetfolder}/assets/css/`, { recursive: true });
|
|
65
|
+
(0, fs_1.mkdirSync)(`${targetfolder}/layouts`, { recursive: true });
|
|
66
|
+
(0, fs_1.mkdirSync)(`${targetfolder}/components`, { recursive: true });
|
|
67
|
+
(0, fs_1.mkdirSync)(`${targetfolder}/server/api`, { recursive: true });
|
|
68
|
+
(0, fs_1.mkdirSync)(`${targetfolder}/pages`, { recursive: true });
|
|
69
|
+
(0, fs_1.mkdirSync)(`${targetfolder}/plugins`, { recursive: true });
|
|
70
|
+
const eta = new Eta({ views: `${constants.templatedir}/nuxt` });
|
|
71
|
+
const variables = [];
|
|
72
|
+
const writes = {
|
|
73
|
+
'./app.vue.eta': 'app.vue',
|
|
74
|
+
'./components.eventmonitor.vue.eta': 'components/EventMonitor.vue',
|
|
75
|
+
'./components.menus.vue.eta': 'components/Menus.vue',
|
|
76
|
+
'./components.crudsimple.vue.eta': 'components/CrudSimple.vue',
|
|
77
|
+
'./components.debugdocdata.vue.eta': 'components/DebugDocumentData.vue',
|
|
78
|
+
'./layouts.default.vue.eta': 'layouts/default.vue',
|
|
79
|
+
'./server.api.ts.eta': 'server/api/[...].ts',
|
|
80
|
+
'./nuxt.config.ts.eta': 'nuxt.config.ts',
|
|
81
|
+
'./pages.index.vue.eta': 'pages/index.vue',
|
|
82
|
+
'./plugins.simpleapp.ts.eta': 'plugins/simpleapp.ts',
|
|
83
|
+
'./tailwind.config.ts.eta': 'tailwind.config.ts',
|
|
84
|
+
'./tailwind.css.eta': 'assets/css/tailwind.css',
|
|
85
|
+
'./env.eta': '.env',
|
|
86
|
+
};
|
|
87
|
+
const templates = Object.getOwnPropertyNames(writes);
|
|
88
|
+
for (let i = 0; i < templates.length; i++) {
|
|
89
|
+
const template = templates[i];
|
|
90
|
+
const filename = writes[template];
|
|
91
|
+
const txt = eta.render(template, variables);
|
|
92
|
+
const file = `${targetfolder}/${filename}`;
|
|
93
|
+
log.info("writing ", file);
|
|
94
|
+
(0, fs_1.writeFileSync)(file, txt);
|
|
95
|
+
}
|
|
96
|
+
log.info("nuxt project completed");
|
|
97
|
+
callback();
|
|
98
|
+
});
|
|
78
99
|
});
|
|
79
100
|
};
|
|
80
101
|
exports.createNuxt = createNuxt;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createproject.js","sourceRoot":"","sources":["../src/createproject.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA4C;AAC5C,
|
|
1
|
+
{"version":3,"file":"createproject.js","sourceRoot":"","sources":["../src/createproject.ts"],"names":[],"mappings":"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"}
|
package/dist/generate.js
CHANGED
|
@@ -28,6 +28,7 @@ exports.initialize = void 0;
|
|
|
28
28
|
// import { readJsonSchemaBuilder } from './processors/jsonschemabuilder';
|
|
29
29
|
const constants = __importStar(require("./constant"));
|
|
30
30
|
const jsonschemabuilder_1 = require("./processors/jsonschemabuilder");
|
|
31
|
+
const storage_1 = require("./storage");
|
|
31
32
|
const tslog_1 = require("tslog");
|
|
32
33
|
const log = new tslog_1.Logger();
|
|
33
34
|
const clc = require("cli-color");
|
|
@@ -40,9 +41,10 @@ const extHfb = '.xhfb.json';
|
|
|
40
41
|
const extjsonschema = '.jsonschema.json';
|
|
41
42
|
let jsonschemas = {};
|
|
42
43
|
const docs = [];
|
|
43
|
-
const initialize = (defFolder, backendfolder, frontendfolder) => {
|
|
44
|
+
const initialize = async (defFolder, backendfolder, frontendfolder) => {
|
|
44
45
|
prepareEnvironments(backendfolder, frontendfolder);
|
|
45
46
|
let activatemodules = [];
|
|
47
|
+
//
|
|
46
48
|
const files = (0, fs_1.readdirSync)(defFolder);
|
|
47
49
|
// readdir(defFolder, (err, files) => {
|
|
48
50
|
// files.forEach((file) => {
|
|
@@ -59,7 +61,11 @@ const initialize = (defFolder, backendfolder, frontendfolder) => {
|
|
|
59
61
|
log.info(`Load ` + clc.green(file));
|
|
60
62
|
rendertype = 'basic';
|
|
61
63
|
jsonschemas[docname] = jsondata;
|
|
62
|
-
|
|
64
|
+
// foreignkeys:
|
|
65
|
+
// tmpforeignkeys:TypeForeignKey
|
|
66
|
+
allmodels = await (0, jsonschemabuilder_1.readJsonSchemaBuilder)(doctype, docname, jsondata, storage_1.foreignkeys);
|
|
67
|
+
//foreignkeycatalogues
|
|
68
|
+
// foreignkeys
|
|
63
69
|
generate(docname, doctype, rendertype, allmodels, backendfolder, frontendfolder);
|
|
64
70
|
activatemodules.push({ doctype: doctype, docname: capitalizeFirstLetter(docname) });
|
|
65
71
|
}
|
|
@@ -67,17 +73,20 @@ const initialize = (defFolder, backendfolder, frontendfolder) => {
|
|
|
67
73
|
log.warn(`Load ` + clc.yellow(file) + ` but it is not supported`);
|
|
68
74
|
}
|
|
69
75
|
}
|
|
76
|
+
// log.warn("foreignkeys---",foreignkeys)
|
|
70
77
|
log.info("Activated backend modules: ", activatemodules);
|
|
71
78
|
// log.info(activatemodules)
|
|
72
|
-
|
|
79
|
+
finalize(activatemodules, backendfolder, frontendfolder);
|
|
73
80
|
return Promise.resolve(true);
|
|
74
81
|
};
|
|
75
82
|
exports.initialize = initialize;
|
|
76
83
|
const generate = (docname, doctype, rendertype, allmodels, backendfolder, frontendfolder) => {
|
|
77
84
|
const targetfolder = `${backendfolder}/src/docs/${doctype}`;
|
|
85
|
+
const frontendpagefolder = `${frontendfolder}/pages`;
|
|
78
86
|
try {
|
|
79
87
|
(0, fs_1.mkdirSync)(targetfolder, { recursive: true });
|
|
80
|
-
(0, fs_1.mkdirSync)(`${frontendfolder}/
|
|
88
|
+
(0, fs_1.mkdirSync)(`${frontendfolder}/simpleapp/simpleappdocs/`, { recursive: true });
|
|
89
|
+
(0, fs_1.mkdirSync)(frontendpagefolder, { recursive: true });
|
|
81
90
|
}
|
|
82
91
|
catch (err) {
|
|
83
92
|
//do nothing if folder exists
|
|
@@ -175,7 +184,7 @@ const generate = (docname, doctype, rendertype, allmodels, backendfolder, fronte
|
|
|
175
184
|
// prepare readme
|
|
176
185
|
const txtReadme = eta.render('./readme', variables);
|
|
177
186
|
(0, fs_1.writeFileSync)(`${targetfolder}/README.md`, txtReadme);
|
|
178
|
-
const frontendfile = `${frontendfolder}/
|
|
187
|
+
const frontendfile = `${frontendfolder}/simpleapp/simpleappdocs/${variables.typename}Doc.ts`;
|
|
179
188
|
let frontEndCode = '';
|
|
180
189
|
if ((0, fs_1.existsSync)(frontendfile)) {
|
|
181
190
|
const clientcodes = (0, fs_1.readFileSync)(frontendfile).toString();
|
|
@@ -187,25 +196,33 @@ const generate = (docname, doctype, rendertype, allmodels, backendfolder, fronte
|
|
|
187
196
|
}
|
|
188
197
|
}
|
|
189
198
|
variables.frontEndCode = frontEndCode !== null && frontEndCode !== void 0 ? frontEndCode : '';
|
|
190
|
-
const txtDocClient = eta.render('./
|
|
199
|
+
const txtDocClient = eta.render('./simpleappclient.eta', variables);
|
|
191
200
|
(0, fs_1.writeFileSync)(frontendfile, txtDocClient);
|
|
192
|
-
|
|
193
|
-
log.info(`- write completed: `
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
+
generateClientPage(variables, eta, frontendpagefolder);
|
|
202
|
+
log.info(`- write completed: ${doctype}`);
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
const generateClientPage = (variables, eta, frontendpagefolder) => {
|
|
206
|
+
const docname = variables.name;
|
|
207
|
+
const targetfolder = `${frontendpagefolder}/${docname}`;
|
|
208
|
+
const overridefilename = `${targetfolder}/delete-me-for-avoid-override`;
|
|
209
|
+
if (!(0, fs_1.existsSync)(targetfolder)) {
|
|
210
|
+
(0, fs_1.mkdirSync)(targetfolder);
|
|
211
|
+
(0, fs_1.writeFileSync)(overridefilename, 'delete this file to prevent override by generator');
|
|
212
|
+
}
|
|
213
|
+
if ((0, fs_1.existsSync)(overridefilename)) {
|
|
214
|
+
const txtIndex = eta.render('./pageindex.vue.eta', variables);
|
|
215
|
+
const txtIndexwithid = eta.render('./pageindexwithid.vue.eta', variables);
|
|
216
|
+
(0, fs_1.writeFileSync)(`${targetfolder}/index.vue`, txtIndex);
|
|
217
|
+
(0, fs_1.writeFileSync)(`${targetfolder}/[id].vue`, txtIndexwithid);
|
|
201
218
|
}
|
|
202
219
|
};
|
|
203
220
|
const prepareEnvironments = (backendfolder, frontendfolder) => {
|
|
204
221
|
const targetfolder = `${backendfolder}/src/class`;
|
|
205
|
-
const targetfrontendfolder = `${frontendfolder}/server`;
|
|
222
|
+
const targetfrontendfolder = `${frontendfolder}/server/api`;
|
|
206
223
|
try {
|
|
207
224
|
(0, fs_1.mkdirSync)(targetfolder, { recursive: true });
|
|
208
|
-
(0, fs_1.mkdirSync)(targetfrontendfolder);
|
|
225
|
+
(0, fs_1.mkdirSync)(targetfrontendfolder, { recursive: true });
|
|
209
226
|
}
|
|
210
227
|
catch (error) {
|
|
211
228
|
//do nothing
|
|
@@ -215,13 +232,23 @@ const prepareEnvironments = (backendfolder, frontendfolder) => {
|
|
|
215
232
|
//copy over backend controller
|
|
216
233
|
(0, fs_1.copyFileSync)(`${constants.templatedir}/SimpleAppController.eta`, `${targetfolder}/SimpleAppController.ts`);
|
|
217
234
|
//copy over frontend apiabstract class
|
|
218
|
-
// copyFileSync(`${constants.templatedir}/
|
|
235
|
+
// copyFileSync(`${constants.templatedir}/nuxt.apigateway.eta`,`${targetfrontendfolder}/[...].ts`)
|
|
219
236
|
//prepare backend config.ts
|
|
220
237
|
//copy over frontend config.ts
|
|
221
238
|
};
|
|
222
|
-
const
|
|
239
|
+
const finalize = (modules, backendfolder, frontendfolder) => {
|
|
240
|
+
log.info("Finalizing foreignkey:", storage_1.foreignkeys);
|
|
241
|
+
(0, fs_1.mkdirSync)(`${backendfolder}/src/dicts/`, { recursive: true });
|
|
242
|
+
(0, fs_1.mkdirSync)(`${frontendfolder}/composables/`, { recursive: true });
|
|
223
243
|
const eta = new Eta({ views: constants.templatedir });
|
|
224
244
|
const txtMainModule = eta.render('app.module.eta', modules);
|
|
225
|
-
(0, fs_1.writeFileSync)(`${
|
|
245
|
+
(0, fs_1.writeFileSync)(`${backendfolder}/src/app.module.ts`, txtMainModule);
|
|
246
|
+
const foreignkeyfile = `${backendfolder}/src/dicts/foreignkeys.json`;
|
|
247
|
+
(0, fs_1.writeFileSync)(foreignkeyfile, JSON.stringify(storage_1.foreignkeys));
|
|
248
|
+
console.log("write to foreignkey file ", foreignkeyfile);
|
|
249
|
+
const txtCatalogue = eta.render('./nuxt/composables.getautocomplete.ts.eta', modules);
|
|
250
|
+
(0, fs_1.writeFileSync)(`${frontendfolder}/composables/getAutocomplete.ts`, txtCatalogue);
|
|
251
|
+
const txtMenus = eta.render('./nuxt/composables.getmenus.ts.eta', modules);
|
|
252
|
+
(0, fs_1.writeFileSync)(`${frontendfolder}/composables/getMenus.ts`, txtMenus);
|
|
226
253
|
};
|
|
227
254
|
//# sourceMappingURL=generate.js.map
|
package/dist/generate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kEAAkE;AAClE,0EAA0E;AAC1E,sDAAuC;AACvC,sEAAoE;
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -8,24 +8,32 @@ const fs = require('fs');
|
|
|
8
8
|
const { createNuxt, createNest } = require('./createproject');
|
|
9
9
|
const { exec } = require("child_process");
|
|
10
10
|
const capitalizeFirstLetter = require('./libs');
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
const { Logger, ILogObj } = require("tslog");
|
|
12
|
+
const log = new Logger();
|
|
13
13
|
const figlet = require("figlet");
|
|
14
14
|
// const program = new Command();
|
|
15
|
-
|
|
15
|
+
const pj = require('../package.json');
|
|
16
|
+
let version = pj.version;
|
|
16
17
|
program
|
|
17
18
|
.version(version)
|
|
18
19
|
.description("An simpleapp CLI tool for generate frontend (vuejs) and backend(nestjs) codes")
|
|
19
20
|
.option("-c, --config-file <value>", 'configuration file content such as:{"definationsFolder":"./definations", "backendFolder":"./nestproject/src/docs", "frontendFolder":"./nuxt/server"}')
|
|
20
|
-
.option("-s, --definations-folder <value>", "load defination files from which folder")
|
|
21
|
-
.option("-b, --backend-folder <value>", "Create backend code at which folder")
|
|
22
|
-
.option("-f, --frontend-folder <value>", "Create frontend code at which folder")
|
|
23
|
-
.option("-i, --openapi3-yaml <value>", 'openapi3.yaml generated by backend server')
|
|
21
|
+
// .option("-s, --definations-folder <value>", "load defination files from which folder")
|
|
22
|
+
// .option("-b, --backend-folder <value>", "Create backend code at which folder")
|
|
23
|
+
// .option("-f, --frontend-folder <value>", "Create frontend code at which folder")
|
|
24
|
+
// .option("-i, --openapi3-yaml <value>", 'openapi3.yaml generated by backend server')
|
|
24
25
|
.parse(process.argv);
|
|
25
26
|
const options = program.opts();
|
|
26
27
|
console.log(figlet.textSync(`SimpleApp Generator ${version}`));
|
|
27
28
|
// console.log(options)
|
|
28
|
-
|
|
29
|
+
let path = '';
|
|
30
|
+
if (options.configFile[0] == '.') {
|
|
31
|
+
path = process.cwd() + '/' + options.configFile;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
path = options.configFile;
|
|
35
|
+
}
|
|
36
|
+
const configs = require(path);
|
|
29
37
|
console.log("configurations: ", configs);
|
|
30
38
|
const definationsFolder = (_a = configs.definationsFolder) !== null && _a !== void 0 ? _a : options.definationsFolder;
|
|
31
39
|
const backendFolder = (_b = configs.backendFolder) !== null && _b !== void 0 ? _b : options.backendFolder;
|
|
@@ -33,42 +41,45 @@ const frontendFolder = (_c = configs.frontendFolder) !== null && _c !== void 0 ?
|
|
|
33
41
|
const openapi3Yaml = (_d = configs.openapi3Yaml) !== null && _d !== void 0 ? _d : options.openapi3Yaml;
|
|
34
42
|
const runGenNext = (callback) => {
|
|
35
43
|
if (!fs.existsSync(backendFolder)) {
|
|
36
|
-
|
|
44
|
+
log.error(`${backendFolder} does not exists, please run "nest new -p pnpm ${backendFolder}"`);
|
|
37
45
|
}
|
|
38
46
|
else if (!fs.existsSync(`${backendFolder}/.env`)) {
|
|
39
|
-
|
|
47
|
+
log.info(`initial nest configuratoin for simpleapp generator`);
|
|
40
48
|
createNest(backendFolder, callback);
|
|
41
49
|
}
|
|
42
50
|
else {
|
|
43
|
-
|
|
51
|
+
log.warn(`.env file exists, skip nest initialization`);
|
|
44
52
|
callback();
|
|
45
53
|
}
|
|
46
54
|
};
|
|
47
55
|
const runGenNuxt = (callback) => {
|
|
48
56
|
if (!fs.existsSync(frontendFolder)) {
|
|
49
|
-
|
|
57
|
+
log.error(`${frontendFolder} does not exists, please run "npx nuxi@latest init ${frontendFolder}"`);
|
|
50
58
|
}
|
|
51
59
|
else if (!fs.existsSync(`${frontendFolder}/.env`)) {
|
|
52
|
-
|
|
60
|
+
log.info(`initial nuxt configuratoin for simpleapp generator`);
|
|
53
61
|
createNuxt(frontendFolder, callback);
|
|
54
62
|
}
|
|
55
63
|
else {
|
|
56
|
-
|
|
64
|
+
log.warn(`.env file exists, skip nuxt initialization`);
|
|
57
65
|
callback();
|
|
58
66
|
}
|
|
59
67
|
};
|
|
60
68
|
runGenNext(() => {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
exec(`
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
log.info("runGenNext (backen) done");
|
|
70
|
+
runGenNuxt(() => {
|
|
71
|
+
log.info("runGenNuxt (frontend) done");
|
|
72
|
+
generator.initialize(definationsFolder, backendFolder, frontendFolder);
|
|
73
|
+
exec(`cd ${frontendFolder};npx prettier --write "./pages/**/*.vue" "./simpleapp/**/*" `);
|
|
74
|
+
exec(`cd ${backendFolder};npx run format `);
|
|
75
|
+
if (openapi3Yaml != '') {
|
|
76
|
+
exec(`openapi-generator generate -i ${openapi3Yaml} -o ${frontendFolder}/simpleapp/openapi -g typescript-axios --skip-validate-spec`, (error, stdout, stderr) => {
|
|
77
|
+
if (error) {
|
|
78
|
+
log.error(stderr);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
});
|
|
72
83
|
});
|
|
73
84
|
// pnpm exec prettier ./src/docs --write
|
|
74
85
|
// pnpm exec prettier ./apiclients --write
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,MAAM,OAAO,GAAI,OAAO,CAAC,WAAW,CAAC,CAAA,CAAC,gBAAgB;AACtD,MAAM,UAAU,GAAE,OAAO,CAAE,QAAQ,CAAC,CAAA;AACpC,MAAM,SAAS,GAAE,OAAO,CAAE,YAAY,CAAC,CAAA;AACvC,MAAM,EAAE,GAAG,OAAO,CAAE,IAAI,CAAC,CAAA;AACzB,MAAO,EAAC,UAAU,EAAC,UAAU,EAAC,GAAE,OAAO,CAAE,iBAAiB,CAAC,CAAA;AAC3D,MAAM,EAAC,IAAI,EAAC,GAAI,OAAO,CAAE,eAAe,CAAC,CAAA;AAEzC,MAAM,qBAAqB,GAAE,OAAO,CAAE,QAAQ,CAAC,CAAA;AAC/C
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +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");
|
|
5
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");
|
|
6
11
|
// import { ConflictException } from '@nestjs/common';
|
|
7
12
|
const type_1 = require("../type");
|
|
8
13
|
const log = new tslog_1.Logger();
|
|
9
14
|
const FIELD_AUTOCOMPLETE_CODE = 'field-autocomplete-code';
|
|
10
15
|
const FIELD_AUTOCOMPLETE_NAME = 'field-autocomplete-name';
|
|
16
|
+
const FOREIGNKEY_PROPERTY = 'x-foreignkey';
|
|
11
17
|
let allmodels = {};
|
|
18
|
+
let fullschema = {};
|
|
12
19
|
let fieldAutoCompleteCode = '';
|
|
13
20
|
let fieldAutoCompleteName = '';
|
|
14
|
-
const readJsonSchemaBuilder = (doctype, docname,
|
|
21
|
+
const readJsonSchemaBuilder = async (doctype, docname, orijsondata, allforeignkeys) => {
|
|
15
22
|
fieldAutoCompleteCode = '';
|
|
16
23
|
fieldAutoCompleteName = '';
|
|
17
24
|
allmodels = {};
|
|
18
|
-
const validateddata = Object.assign({},
|
|
25
|
+
const validateddata = Object.assign({}, orijsondata);
|
|
19
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);
|
|
20
32
|
if (jsondata && jsondata.type == 'object') {
|
|
21
33
|
//no _id then need add
|
|
22
34
|
// console.log(jsondata)
|
|
@@ -34,7 +46,7 @@ const readJsonSchemaBuilder = (doctype, docname, jsondata) => {
|
|
|
34
46
|
log.error(`you shall define 1 field with format: '${FIELD_AUTOCOMPLETE_NAME}'}`);
|
|
35
47
|
throw "missing field format";
|
|
36
48
|
}
|
|
37
|
-
return allmodels;
|
|
49
|
+
return Promise.resolve(allmodels);
|
|
38
50
|
};
|
|
39
51
|
exports.readJsonSchemaBuilder = readJsonSchemaBuilder;
|
|
40
52
|
const processObject = (doctype, docname, jsondata) => {
|
|
@@ -74,11 +86,29 @@ requiredlist) => {
|
|
|
74
86
|
if (obj.format && obj.format == FIELD_AUTOCOMPLETE_NAME) {
|
|
75
87
|
fieldAutoCompleteName = key;
|
|
76
88
|
}
|
|
77
|
-
if (obj.type == 'object' &&
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
|
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
|
+
}
|
|
82
112
|
genSchema(newName, obj.type, obj.properties, obj.required);
|
|
83
113
|
newmodel[key] = newName;
|
|
84
114
|
}
|