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.
- package/.eslintrc.json +2 -2
- package/.vscode/launch.json +22 -22
- package/.vscode/settings.json +2 -2
- package/bin/createTables.js +94 -94
- package/bin/deploy.js +66 -66
- package/bin/dsl.js +223 -223
- package/bin/genEvents.js +188 -188
- package/bin/owl-init.js +50 -50
- package/bin/owl.js +322 -322
- package/bin/owlconfig.json +16 -16
- package/bin/table_mysql.js +189 -189
- package/bin/undeploy.js +56 -56
- package/defaultTemplate/api/build.xml +94 -94
- package/defaultTemplate/api/src/about.html +12 -12
- package/defaultTemplate/api/src/about.jsx +11 -11
- package/defaultTemplate/api/src/handlers/aggs.jsx +161 -161
- package/defaultTemplate/api/src/handlers/batchImport.jsx +78 -78
- package/defaultTemplate/api/src/handlers/delete.jsx +88 -88
- package/defaultTemplate/api/src/handlers/export.jsx +117 -117
- package/defaultTemplate/api/src/handlers/exportDoc.jsx +27 -27
- package/defaultTemplate/api/src/handlers/exportEx.jsx +77 -77
- package/defaultTemplate/api/src/handlers/exportWithTemplates.jsx +50 -50
- package/defaultTemplate/api/src/handlers/exportZip.jsx +26 -26
- package/defaultTemplate/api/src/handlers/get.jsx +50 -50
- package/defaultTemplate/api/src/handlers/getByIds.jsx +51 -51
- package/defaultTemplate/api/src/handlers/getChildren.jsx +96 -96
- package/defaultTemplate/api/src/handlers/getExportTaskInfo.jsx +34 -34
- package/defaultTemplate/api/src/handlers/getHistory.jsx +51 -51
- package/defaultTemplate/api/src/handlers/getSpec.jsx +40 -40
- package/defaultTemplate/api/src/handlers/include/checklogin.jsx +791 -791
- package/defaultTemplate/api/src/handlers/include/diff.jsx +315 -315
- package/defaultTemplate/api/src/handlers/include/util.jsx +60 -60
- package/defaultTemplate/api/src/handlers/list.jsx +252 -252
- package/defaultTemplate/api/src/handlers/listEx.jsx +142 -142
- package/defaultTemplate/api/src/handlers/reIndex.jsx +63 -63
- package/defaultTemplate/api/src/handlers/recovery.jsx +53 -53
- package/defaultTemplate/api/src/handlers/save.jsx +125 -125
- package/defaultTemplate/api/src/handlers/upload.jsx +72 -72
- package/defaultTemplate/api/src/init/indexConfigs/changeMapping.json +14 -14
- package/defaultTemplate/api/src/init/indexConfigs/createAliase.json +10 -10
- package/defaultTemplate/api/src/init/indexConfigs/createIndex.json +104 -104
- package/defaultTemplate/api/src/init/indexConfigs/rebuildIndex.sh +27 -27
- package/defaultTemplate/api/src/init/indexConfigs/reindex.json +9 -9
- package/defaultTemplate/api/src/init/init.jsx +34 -34
- package/defaultTemplate/api/src/meta.json +10 -10
- package/defaultTemplate/api/src/services/dblayer.jsx +251 -251
- package/defaultTemplate/api/src/services/modelService.jsx +1248 -1247
- package/defaultTemplate/api/src/services/sqlstring.jsx +240 -240
- package/defaultTemplate/api/src/tasks/export.jsx +366 -366
- package/defaultTemplate/api/src/tasks/exportDoc.jsx +99 -99
- package/defaultTemplate/api/src/tasks/exportExTask.jsx +332 -332
- package/defaultTemplate/api/src/tasks/exportWithTemplateTask.jsx +128 -128
- package/defaultTemplate/api/src/tasks/exportZip.jsx +49 -49
- package/examples/buildProperties/build.properties +2 -2
- package/examples/gitignore/gitignore_example.txt +1 -1
- package/examples/models/product.json +52 -52
- package/examples/models/shop.json +71 -71
- package/examples/models/sku.json +254 -254
- package/examples/models/user.json +49 -49
- package/examples/owlconfig.json +13 -13
- package/package.json +33 -33
- 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);
|