owl-cli 6.164.0 → 6.166.0

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 (62) hide show
  1. package/.eslintrc.json +2 -2
  2. package/.vscode/launch.json +22 -22
  3. package/.vscode/settings.json +2 -2
  4. package/bin/createTables.js +94 -94
  5. package/bin/deploy.js +66 -66
  6. package/bin/dsl.js +223 -223
  7. package/bin/genEvents.js +188 -188
  8. package/bin/owl-init.js +50 -50
  9. package/bin/owl.js +322 -322
  10. package/bin/owlconfig.json +16 -16
  11. package/bin/table_mysql.js +189 -189
  12. package/bin/undeploy.js +56 -56
  13. package/defaultTemplate/api/build.xml +94 -94
  14. package/defaultTemplate/api/src/about.html +12 -12
  15. package/defaultTemplate/api/src/about.jsx +11 -11
  16. package/defaultTemplate/api/src/handlers/aggs.jsx +161 -161
  17. package/defaultTemplate/api/src/handlers/batchImport.jsx +78 -78
  18. package/defaultTemplate/api/src/handlers/delete.jsx +88 -88
  19. package/defaultTemplate/api/src/handlers/export.jsx +117 -117
  20. package/defaultTemplate/api/src/handlers/exportDoc.jsx +27 -27
  21. package/defaultTemplate/api/src/handlers/exportEx.jsx +77 -77
  22. package/defaultTemplate/api/src/handlers/exportWithTemplates.jsx +50 -50
  23. package/defaultTemplate/api/src/handlers/exportZip.jsx +26 -26
  24. package/defaultTemplate/api/src/handlers/get.jsx +50 -50
  25. package/defaultTemplate/api/src/handlers/getByIds.jsx +51 -51
  26. package/defaultTemplate/api/src/handlers/getChildren.jsx +96 -96
  27. package/defaultTemplate/api/src/handlers/getExportTaskInfo.jsx +34 -34
  28. package/defaultTemplate/api/src/handlers/getHistory.jsx +51 -51
  29. package/defaultTemplate/api/src/handlers/getSpec.jsx +40 -40
  30. package/defaultTemplate/api/src/handlers/include/checklogin.jsx +791 -791
  31. package/defaultTemplate/api/src/handlers/include/diff.jsx +315 -315
  32. package/defaultTemplate/api/src/handlers/include/util.jsx +60 -60
  33. package/defaultTemplate/api/src/handlers/list.jsx +252 -252
  34. package/defaultTemplate/api/src/handlers/listEx.jsx +142 -142
  35. package/defaultTemplate/api/src/handlers/reIndex.jsx +63 -63
  36. package/defaultTemplate/api/src/handlers/recovery.jsx +53 -53
  37. package/defaultTemplate/api/src/handlers/save.jsx +125 -125
  38. package/defaultTemplate/api/src/handlers/upload.jsx +72 -72
  39. package/defaultTemplate/api/src/init/indexConfigs/changeMapping.json +14 -14
  40. package/defaultTemplate/api/src/init/indexConfigs/createAliase.json +10 -10
  41. package/defaultTemplate/api/src/init/indexConfigs/createIndex.json +104 -104
  42. package/defaultTemplate/api/src/init/indexConfigs/rebuildIndex.sh +27 -27
  43. package/defaultTemplate/api/src/init/indexConfigs/reindex.json +9 -9
  44. package/defaultTemplate/api/src/init/init.jsx +34 -34
  45. package/defaultTemplate/api/src/meta.json +10 -10
  46. package/defaultTemplate/api/src/services/dblayer.jsx +251 -251
  47. package/defaultTemplate/api/src/services/modelService.jsx +1248 -1247
  48. package/defaultTemplate/api/src/services/sqlstring.jsx +240 -240
  49. package/defaultTemplate/api/src/tasks/export.jsx +366 -366
  50. package/defaultTemplate/api/src/tasks/exportDoc.jsx +99 -99
  51. package/defaultTemplate/api/src/tasks/exportExTask.jsx +332 -332
  52. package/defaultTemplate/api/src/tasks/exportWithTemplateTask.jsx +128 -128
  53. package/defaultTemplate/api/src/tasks/exportZip.jsx +49 -49
  54. package/examples/buildProperties/build.properties +2 -2
  55. package/examples/gitignore/gitignore_example.txt +1 -1
  56. package/examples/models/product.json +52 -52
  57. package/examples/models/shop.json +71 -71
  58. package/examples/models/sku.json +254 -254
  59. package/examples/models/user.json +49 -49
  60. package/examples/owlconfig.json +13 -13
  61. package/package.json +33 -33
  62. package/todo.txt +4 -4
package/bin/owl.js CHANGED
@@ -1,322 +1,322 @@
1
- #!/usr/bin/env node
2
-
3
- const {lstatSync, readdirSync} = require('fs')
4
- const fs = require('fs')
5
- const {join, resolve} = require('path')
6
- const {getFormSpecs, flattenFormSpecs} = require('./dsl')
7
- const {genTableSql} = require('./table_mysql.js');
8
- const template = require('art-template')
9
-
10
- const isDirectory = source => lstatSync(source).isDirectory()
11
- const isFile = source => {
12
- try {
13
- return fs.statSync(source).isFile()
14
- } catch (e) {
15
- return false
16
- }
17
- }
18
-
19
- var model_git_version = 'unknown';
20
- try{
21
- model_git_version = require('child_process')
22
- .execSync('git rev-parse HEAD')
23
- .toString().trim();
24
- }
25
- catch(e){
26
- console.log('error while get git version');
27
- // console.log(e);
28
- }
29
-
30
- const owl_version = require('../package.json').version;
31
-
32
- function getProjectCode(owl) {
33
- if (owl._t && owl.prefix) {
34
- return owl.prefix + owl._t.toLowerCase();
35
- } else {
36
- return "owl_"+owl._t.toLowerCase();
37
- }
38
- }
39
-
40
-
41
- function getProjectName(owl) {
42
- if (owl['#meta']) {
43
- return owl['#meta'].projectName
44
- }
45
- return null
46
- }
47
-
48
- function getMeta(owl) {
49
- return owl['#meta']
50
- }
51
-
52
- let cwd = process.cwd();
53
- console.log("cwd=",cwd)
54
-
55
- var desktopDistDir = ''
56
- var libpath = 'undefined'
57
- var buildProperties = 'undefined'
58
-
59
-
60
- function mkdir(path) {
61
- try {
62
- fs.mkdirSync(path)
63
- } catch (e) {
64
- }
65
- }
66
-
67
- function getIndexMapping(flatternedSpecs){
68
- var allFields = flatternedSpecs.allFields;
69
- var propMappings = {};
70
- var stockFields = ["owl_createTime","m","_t","_v","_orgIds","_orgId","del","owl_createUserId","owl_lastModifiedUserId","owl_modifyTime","owl_createTime"];
71
- for(var i=0; i<allFields.length; i++){
72
- var field = allFields[i];
73
-
74
- if(stockFields.indexOf(field.key)>=0){
75
- continue;
76
- }
77
- if(field.fieldType == 'date'){
78
- propMappings[field.key] = {
79
- "type":"date"
80
- };
81
-
82
- }
83
- else if(field.fieldType == 'string' || field.fieldType == 'choice'){
84
- propMappings[field.key] = {
85
- "type":"text",
86
- "fields": {
87
- "keyword": {
88
- "type": "keyword",
89
- "ignore_above": 256
90
- }
91
- }
92
- };
93
- }
94
- else if(field.fieldType=='number'){
95
- propMappings[field.key] = {
96
- "type":"double"
97
- };
98
- }
99
- }
100
- if(Object.keys(propMappings).length>0){
101
- var s = JSON.stringify(propMappings);
102
- s = s.substring(1);
103
- s = s.substring(0,s.length-1);
104
- return "," + s;
105
- }
106
- return "";
107
- }
108
- function processOwl(owl, outdir, templatePath, buildType, inputFile) {
109
- var projectCode = getProjectCode(owl)
110
- var projectName = getProjectName(owl)
111
- var meta = getMeta(owl)
112
- var formSpecs = getFormSpecs(owl, '')
113
- var flattenedSpecs = flattenFormSpecs(formSpecs)
114
- var id = meta.id
115
- var idFunc = 'null'
116
- var lockFunc = 'null'
117
- var lock = meta.lock
118
- if (id) {
119
- idFunc = template.compile(id).toString()
120
- }
121
-
122
- if (lock) {
123
- lockFunc = template.compile(lock).toString()
124
- }
125
-
126
- if (!projectCode) {
127
- console.log(inputFile + ' is not a valid owl file,no projectCode')
128
- return
129
- }
130
- if (!projectName) {
131
- console.log(inputFile + ' is not a valid owl file,no projectName')
132
- return
133
- }
134
-
135
- // 处理templatePath里面的每一个文件
136
- var fullTemplatePath = templatePath;
137
- readdirSync(fullTemplatePath).map(name => {
138
- if (name === 'node_modules') {
139
- return
140
- }
141
-
142
- // if (buildType !== 'debug' && name === 'desktop' && outdir.indexOf('erp_owl') === -1) {
143
- // return
144
- // }
145
-
146
- var fullname = resolve(fullTemplatePath, name)
147
- if (isDirectory(fullname)) {
148
- var subOutDir = resolve(outdir, name)
149
- mkdir(subOutDir)
150
- processOwl(owl, subOutDir, fullname, buildType, inputFile)
151
- return
152
- }
153
- var dst = resolve(outdir, name)
154
- if (name.indexOf('.png') > -1 || name.indexOf('.PNG') > -1 ||
155
- name.indexOf('.jpg') > -1 || name.indexOf('.jpeg') > -1 ||
156
- name.indexOf('.JPG') > -1 || name.indexOf('.JPEG') > -1) {
157
- fs.copyFileSync(fullname, dst)
158
- return
159
- }
160
-
161
- let tableInfos = genTableSql(projectCode,formSpecs);
162
- let tablesql = tableInfos[0].join("\n\n");
163
- let tables = JSON.stringify(tableInfos[1]);
164
-
165
- var fileContent = fs.readFileSync(fullname, {encoding: 'utf-8'})
166
-
167
- var dynamicIndex = owl["_dynamicIndex"];
168
- if(!dynamicIndex){
169
- dynamicIndex = "false";
170
- }
171
- fileContent = fileContent.replace(/@projectCode/g, projectCode)
172
- fileContent = fileContent.replace(/@dynamicIndex/g, dynamicIndex)
173
-
174
-
175
- fileContent = fileContent.replace(/@projectName/g, projectName)
176
- fileContent = fileContent.replace(/@meta/g, JSON.stringify(meta))
177
- fileContent = fileContent.replace(/@formSpecs/g, JSON.stringify(formSpecs))
178
- fileContent = fileContent.replace(/@flattenedSpecs/g, JSON.stringify(flattenedSpecs))
179
- fileContent = fileContent.replace(/@fieldMappings/g, getIndexMapping(flattenedSpecs));
180
- fileContent = fileContent.replace(/@desktopDistDir/g, desktopDistDir)
181
- fileContent = fileContent.replace(/@idFunc/g, idFunc)
182
- fileContent = fileContent.replace(/@idOrig/g, id)
183
- fileContent = fileContent.replace(/@lockFunc/g, lockFunc)
184
- fileContent = fileContent.replace(/@lockOrig/g, lock)
185
- fileContent = fileContent.replace(/@buildProperties/g, buildProperties)
186
- fileContent = fileContent.replace(/@libpath/g, libpath)
187
- fileContent = fileContent.replace(/@model_git_version/g, model_git_version)
188
- fileContent = fileContent.replace(/@owl_version/g, owl_version)
189
- fileContent = fileContent.replace(/@tablesql/g, tablesql)
190
- fileContent = fileContent.replace(/@tables/g, tables)
191
-
192
- var eventHandlers = owl['#meta']['eventHandlers'];
193
- if(!eventHandlers){
194
- eventHandlers = [];
195
- }
196
- fileContent = fileContent.replace(/@eventHandlers/g, JSON.stringify(eventHandlers))
197
-
198
-
199
- var jobs = owl['#meta']['jobs'];
200
- if(!jobs){
201
- jobs = [];
202
- }
203
- fileContent = fileContent.replace(/@jobs/g, JSON.stringify(jobs))
204
-
205
-
206
- //去掉owl里面的敏感信息
207
- var spec = JSON.parse(JSON.stringify(owl));
208
- delete spec['#meta']['eventHandlers'];
209
- delete spec['#meta']['jobs'];
210
- fileContent = fileContent.replace(/@spec/g, JSON.stringify(spec))
211
-
212
- dst = resolve(outdir, name)
213
- fs.writeFileSync(dst, fileContent, {flag: 'w'})
214
- })
215
- }
216
-
217
-
218
- function setProject(owl, project){
219
- owl["#meta"]["project"] = project;
220
- }
221
-
222
- //处理一个文件的主入口
223
- function processOwlFile(dir,name, outdir, templatePath, buildType, modelDir,project) {
224
- var inputFile = resolve(dir,name);
225
- var content = fs.readFileSync(inputFile, {encoding: 'utf-8'})
226
- var owl = JSON.parse(content)
227
- var projectCode = getProjectCode(owl)
228
- var projectName = getProjectName(owl)
229
- if (!projectCode) {
230
- console.log(inputFile + ' is not a valid owl file,no projectCode')
231
- return
232
- }
233
- if (!projectName) {
234
- console.log(inputFile + ' is not a valid owl file,no projectName')
235
- return
236
- }
237
- setProject(owl,project);
238
-
239
- var owlProjectDir = join(outdir, projectCode)
240
- try {
241
- fs.mkdirSync(owlProjectDir)
242
- } catch (e) {
243
- }
244
-
245
- var formSpecs = getFormSpecs(owl, '')
246
- formSpecs["tableName"] = projectCode;
247
- formSpecs["_t"] = owl._t;
248
-
249
- var flattenedSpecs = flattenFormSpecs(formSpecs)
250
- //写入转换过的formspec.json
251
- var formspecDir = resolve(outdir,"_formspecs");
252
- // console.log("write formspects to " + formspecDir);
253
- mkdir(formspecDir);
254
-
255
- var formspecFile = resolve(formspecDir,"formspec_" + name);
256
- // console.log("writing file:" + formspecFile);
257
- fs.writeFileSync(formspecFile,JSON.stringify(formSpecs),{flag:'w'});
258
-
259
- processOwl(owl, owlProjectDir, templatePath, buildType)
260
- var owlProjectApiSrcDir = join(owlProjectDir, 'api/src')
261
-
262
- var extraTemplatePath = join(dir, owl._t)
263
- console.log("owlProjectDir="+owlProjectDir + ":extraTemplatePath=" + extraTemplatePath);
264
- if (fs.existsSync(extraTemplatePath) && isDirectory(extraTemplatePath)) {
265
- processOwl(owl, owlProjectDir, extraTemplatePath, buildType)
266
- }
267
- // 复制导出文件
268
- if (fs.existsSync(owlProjectApiSrcDir) && isDirectory(owlProjectApiSrcDir)) {
269
- var excelTemplate = join(modelDir, projectCode + '.xlsx')
270
- if (isFile(excelTemplate)) {
271
- var dst = join(owlProjectApiSrcDir, projectCode + '.xlsx')
272
- fs.copyFileSync(excelTemplate, dst)
273
- }
274
- }
275
- }
276
-
277
- function processInputDir(dir, outdir, templatePath, buildType, project) {
278
- readdirSync(resolve(cwd, dir)).map(name => {
279
- if(name == 'api' || name=='sql'){
280
- return;
281
- }
282
- if (isDirectory(resolve(dir, name))) {
283
- try {
284
- fs.mkdirSync(resolve(outdir, name))
285
- } catch (e) {
286
- }
287
- processInputDir(resolve(dir, name), resolve(outdir, name), templatePath, buildType,project)
288
- } else if (name.indexOf('.json') > 0) {
289
- console.log("going to process " + name);
290
- processOwlFile(dir, name, outdir, templatePath, buildType, dir,project)
291
- console.log("processed " + name);
292
- }
293
- })
294
- }
295
-
296
-
297
- var pjson = require(join(__dirname, "../package.json"));
298
- var version = (pjson.version);
299
- console.log("owl version:" + version );
300
-
301
- var configFile = resolve(cwd,"owlconfig.json");
302
- if (process.argv.length > 2) {
303
- configFile = resolve(cwd, process.argv[2]);
304
- }
305
-
306
-
307
- var content = fs.readFileSync(configFile, {encoding: 'utf-8'})
308
- var owlconfig = JSON.parse(content)
309
- var inPath = owlconfig.models;
310
- var outPath = owlconfig.generatedApps
311
- var templatePath = owlconfig.templates
312
- var buildType = owlconfig.buildType;
313
- var project = owlconfig.project;
314
- buildProperties = resolve(cwd,owlconfig.buildProperties);
315
- libpath = resolve(cwd,owlconfig.libpath);
316
- templatePath = resolve(cwd, templatePath);
317
- var fulloutPath = resolve(cwd,outPath);
318
-
319
- mkdir(fulloutPath);
320
-
321
-
322
- processInputDir(inPath, fulloutPath, templatePath, buildType,project);
1
+ #!/usr/bin/env node
2
+
3
+ const {lstatSync, readdirSync} = require('fs')
4
+ const fs = require('fs')
5
+ const {join, resolve} = require('path')
6
+ const {getFormSpecs, flattenFormSpecs} = require('./dsl')
7
+ const {genTableSql} = require('./table_mysql.js');
8
+ const template = require('art-template')
9
+
10
+ const isDirectory = source => lstatSync(source).isDirectory()
11
+ const isFile = source => {
12
+ try {
13
+ return fs.statSync(source).isFile()
14
+ } catch (e) {
15
+ return false
16
+ }
17
+ }
18
+
19
+ var model_git_version = 'unknown';
20
+ try{
21
+ model_git_version = require('child_process')
22
+ .execSync('git rev-parse HEAD')
23
+ .toString().trim();
24
+ }
25
+ catch(e){
26
+ console.log('error while get git version');
27
+ // console.log(e);
28
+ }
29
+
30
+ const owl_version = require('../package.json').version;
31
+
32
+ function getProjectCode(owl) {
33
+ if (owl._t && owl.prefix) {
34
+ return owl.prefix + owl._t.toLowerCase();
35
+ } else {
36
+ return "owl_"+owl._t.toLowerCase();
37
+ }
38
+ }
39
+
40
+
41
+ function getProjectName(owl) {
42
+ if (owl['#meta']) {
43
+ return owl['#meta'].projectName
44
+ }
45
+ return null
46
+ }
47
+
48
+ function getMeta(owl) {
49
+ return owl['#meta']
50
+ }
51
+
52
+ let cwd = process.cwd();
53
+ console.log("cwd=",cwd)
54
+
55
+ var desktopDistDir = ''
56
+ var libpath = 'undefined'
57
+ var buildProperties = 'undefined'
58
+
59
+
60
+ function mkdir(path) {
61
+ try {
62
+ fs.mkdirSync(path)
63
+ } catch (e) {
64
+ }
65
+ }
66
+
67
+ function getIndexMapping(flatternedSpecs){
68
+ var allFields = flatternedSpecs.allFields;
69
+ var propMappings = {};
70
+ var stockFields = ["owl_createTime","m","_t","_v","_orgIds","_orgId","del","owl_createUserId","owl_lastModifiedUserId","owl_modifyTime","owl_createTime"];
71
+ for(var i=0; i<allFields.length; i++){
72
+ var field = allFields[i];
73
+
74
+ if(stockFields.indexOf(field.key)>=0){
75
+ continue;
76
+ }
77
+ if(field.fieldType == 'date'){
78
+ propMappings[field.key] = {
79
+ "type":"date"
80
+ };
81
+
82
+ }
83
+ else if(field.fieldType == 'string' || field.fieldType == 'choice'){
84
+ propMappings[field.key] = {
85
+ "type":"text",
86
+ "fields": {
87
+ "keyword": {
88
+ "type": "keyword",
89
+ "ignore_above": 256
90
+ }
91
+ }
92
+ };
93
+ }
94
+ else if(field.fieldType=='number'){
95
+ propMappings[field.key] = {
96
+ "type":"double"
97
+ };
98
+ }
99
+ }
100
+ if(Object.keys(propMappings).length>0){
101
+ var s = JSON.stringify(propMappings);
102
+ s = s.substring(1);
103
+ s = s.substring(0,s.length-1);
104
+ return "," + s;
105
+ }
106
+ return "";
107
+ }
108
+ function processOwl(owl, outdir, templatePath, buildType, inputFile) {
109
+ var projectCode = getProjectCode(owl)
110
+ var projectName = getProjectName(owl)
111
+ var meta = getMeta(owl)
112
+ var formSpecs = getFormSpecs(owl, '')
113
+ var flattenedSpecs = flattenFormSpecs(formSpecs)
114
+ var id = meta.id
115
+ var idFunc = 'null'
116
+ var lockFunc = 'null'
117
+ var lock = meta.lock
118
+ if (id) {
119
+ idFunc = template.compile(id).toString()
120
+ }
121
+
122
+ if (lock) {
123
+ lockFunc = template.compile(lock).toString()
124
+ }
125
+
126
+ if (!projectCode) {
127
+ console.log(inputFile + ' is not a valid owl file,no projectCode')
128
+ return
129
+ }
130
+ if (!projectName) {
131
+ console.log(inputFile + ' is not a valid owl file,no projectName')
132
+ return
133
+ }
134
+
135
+ // 处理templatePath里面的每一个文件
136
+ var fullTemplatePath = templatePath;
137
+ readdirSync(fullTemplatePath).map(name => {
138
+ if (name === 'node_modules') {
139
+ return
140
+ }
141
+
142
+ // if (buildType !== 'debug' && name === 'desktop' && outdir.indexOf('erp_owl') === -1) {
143
+ // return
144
+ // }
145
+
146
+ var fullname = resolve(fullTemplatePath, name)
147
+ if (isDirectory(fullname)) {
148
+ var subOutDir = resolve(outdir, name)
149
+ mkdir(subOutDir)
150
+ processOwl(owl, subOutDir, fullname, buildType, inputFile)
151
+ return
152
+ }
153
+ var dst = resolve(outdir, name)
154
+ if (name.indexOf('.png') > -1 || name.indexOf('.PNG') > -1 ||
155
+ name.indexOf('.jpg') > -1 || name.indexOf('.jpeg') > -1 ||
156
+ name.indexOf('.JPG') > -1 || name.indexOf('.JPEG') > -1) {
157
+ fs.copyFileSync(fullname, dst)
158
+ return
159
+ }
160
+
161
+ let tableInfos = genTableSql(projectCode,formSpecs);
162
+ let tablesql = tableInfos[0].join("\n\n");
163
+ let tables = JSON.stringify(tableInfos[1]);
164
+
165
+ var fileContent = fs.readFileSync(fullname, {encoding: 'utf-8'})
166
+
167
+ var dynamicIndex = owl["_dynamicIndex"];
168
+ if(!dynamicIndex){
169
+ dynamicIndex = "false";
170
+ }
171
+ fileContent = fileContent.replace(/@projectCode/g, projectCode)
172
+ fileContent = fileContent.replace(/@dynamicIndex/g, dynamicIndex)
173
+
174
+
175
+ fileContent = fileContent.replace(/@projectName/g, projectName)
176
+ fileContent = fileContent.replace(/@meta/g, JSON.stringify(meta))
177
+ fileContent = fileContent.replace(/@formSpecs/g, JSON.stringify(formSpecs))
178
+ fileContent = fileContent.replace(/@flattenedSpecs/g, JSON.stringify(flattenedSpecs))
179
+ fileContent = fileContent.replace(/@fieldMappings/g, getIndexMapping(flattenedSpecs));
180
+ fileContent = fileContent.replace(/@desktopDistDir/g, desktopDistDir)
181
+ fileContent = fileContent.replace(/@idFunc/g, idFunc)
182
+ fileContent = fileContent.replace(/@idOrig/g, id)
183
+ fileContent = fileContent.replace(/@lockFunc/g, lockFunc)
184
+ fileContent = fileContent.replace(/@lockOrig/g, lock)
185
+ fileContent = fileContent.replace(/@buildProperties/g, buildProperties)
186
+ fileContent = fileContent.replace(/@libpath/g, libpath)
187
+ fileContent = fileContent.replace(/@model_git_version/g, model_git_version)
188
+ fileContent = fileContent.replace(/@owl_version/g, owl_version)
189
+ fileContent = fileContent.replace(/@tablesql/g, tablesql)
190
+ fileContent = fileContent.replace(/@tables/g, tables)
191
+
192
+ var eventHandlers = owl['#meta']['eventHandlers'];
193
+ if(!eventHandlers){
194
+ eventHandlers = [];
195
+ }
196
+ fileContent = fileContent.replace(/@eventHandlers/g, JSON.stringify(eventHandlers))
197
+
198
+
199
+ var jobs = owl['#meta']['jobs'];
200
+ if(!jobs){
201
+ jobs = [];
202
+ }
203
+ fileContent = fileContent.replace(/@jobs/g, JSON.stringify(jobs))
204
+
205
+
206
+ //去掉owl里面的敏感信息
207
+ var spec = JSON.parse(JSON.stringify(owl));
208
+ delete spec['#meta']['eventHandlers'];
209
+ delete spec['#meta']['jobs'];
210
+ fileContent = fileContent.replace(/@spec/g, JSON.stringify(spec))
211
+
212
+ dst = resolve(outdir, name)
213
+ fs.writeFileSync(dst, fileContent, {flag: 'w'})
214
+ })
215
+ }
216
+
217
+
218
+ function setProject(owl, project){
219
+ owl["#meta"]["project"] = project;
220
+ }
221
+
222
+ //处理一个文件的主入口
223
+ function processOwlFile(dir,name, outdir, templatePath, buildType, modelDir,project) {
224
+ var inputFile = resolve(dir,name);
225
+ var content = fs.readFileSync(inputFile, {encoding: 'utf-8'})
226
+ var owl = JSON.parse(content)
227
+ var projectCode = getProjectCode(owl)
228
+ var projectName = getProjectName(owl)
229
+ if (!projectCode) {
230
+ console.log(inputFile + ' is not a valid owl file,no projectCode')
231
+ return
232
+ }
233
+ if (!projectName) {
234
+ console.log(inputFile + ' is not a valid owl file,no projectName')
235
+ return
236
+ }
237
+ setProject(owl,project);
238
+
239
+ var owlProjectDir = join(outdir, projectCode)
240
+ try {
241
+ fs.mkdirSync(owlProjectDir)
242
+ } catch (e) {
243
+ }
244
+
245
+ var formSpecs = getFormSpecs(owl, '')
246
+ formSpecs["tableName"] = projectCode;
247
+ formSpecs["_t"] = owl._t;
248
+
249
+ var flattenedSpecs = flattenFormSpecs(formSpecs)
250
+ //写入转换过的formspec.json
251
+ var formspecDir = resolve(outdir,"_formspecs");
252
+ // console.log("write formspects to " + formspecDir);
253
+ mkdir(formspecDir);
254
+
255
+ var formspecFile = resolve(formspecDir,"formspec_" + name);
256
+ // console.log("writing file:" + formspecFile);
257
+ fs.writeFileSync(formspecFile,JSON.stringify(formSpecs),{flag:'w'});
258
+
259
+ processOwl(owl, owlProjectDir, templatePath, buildType)
260
+ var owlProjectApiSrcDir = join(owlProjectDir, 'api/src')
261
+
262
+ var extraTemplatePath = join(dir, owl._t)
263
+ console.log("owlProjectDir="+owlProjectDir + ":extraTemplatePath=" + extraTemplatePath);
264
+ if (fs.existsSync(extraTemplatePath) && isDirectory(extraTemplatePath)) {
265
+ processOwl(owl, owlProjectDir, extraTemplatePath, buildType)
266
+ }
267
+ // 复制导出文件
268
+ if (fs.existsSync(owlProjectApiSrcDir) && isDirectory(owlProjectApiSrcDir)) {
269
+ var excelTemplate = join(modelDir, projectCode + '.xlsx')
270
+ if (isFile(excelTemplate)) {
271
+ var dst = join(owlProjectApiSrcDir, projectCode + '.xlsx')
272
+ fs.copyFileSync(excelTemplate, dst)
273
+ }
274
+ }
275
+ }
276
+
277
+ function processInputDir(dir, outdir, templatePath, buildType, project) {
278
+ readdirSync(resolve(cwd, dir)).map(name => {
279
+ if(name == 'api' || name=='sql'){
280
+ return;
281
+ }
282
+ if (isDirectory(resolve(dir, name))) {
283
+ try {
284
+ fs.mkdirSync(resolve(outdir, name))
285
+ } catch (e) {
286
+ }
287
+ processInputDir(resolve(dir, name), resolve(outdir, name), templatePath, buildType,project)
288
+ } else if (name.indexOf('.json') > 0) {
289
+ console.log("going to process " + name);
290
+ processOwlFile(dir, name, outdir, templatePath, buildType, dir,project)
291
+ console.log("processed " + name);
292
+ }
293
+ })
294
+ }
295
+
296
+
297
+ var pjson = require(join(__dirname, "../package.json"));
298
+ var version = (pjson.version);
299
+ console.log("owl version:" + version );
300
+
301
+ var configFile = resolve(cwd,"owlconfig.json");
302
+ if (process.argv.length > 2) {
303
+ configFile = resolve(cwd, process.argv[2]);
304
+ }
305
+
306
+
307
+ var content = fs.readFileSync(configFile, {encoding: 'utf-8'})
308
+ var owlconfig = JSON.parse(content)
309
+ var inPath = owlconfig.models;
310
+ var outPath = owlconfig.generatedApps
311
+ var templatePath = owlconfig.templates
312
+ var buildType = owlconfig.buildType;
313
+ var project = owlconfig.project;
314
+ buildProperties = resolve(cwd,owlconfig.buildProperties);
315
+ libpath = resolve(cwd,owlconfig.libpath);
316
+ templatePath = resolve(cwd, templatePath);
317
+ var fulloutPath = resolve(cwd,outPath);
318
+
319
+ mkdir(fulloutPath);
320
+
321
+
322
+ processInputDir(inPath, fulloutPath, templatePath, buildType,project);