cuxml 1.0.6 → 2.1.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/README.md +225 -112
- package/index.js +14 -36
- package/{cbfTypes.json → lib/cbfTypes.json} +13 -13
- package/package.json +2 -2
- package/src/api.js +185 -0
- package/src/checker.js +244 -0
- package/src/cli.js +134 -0
- package/src/converter.js +260 -0
- package/src/mcp.js +289 -0
- package/src/parser.js +117 -0
- package/src/templates.js +79 -0
- package/test/Agents.md +76 -0
- package/test/agent_new.md +286 -0
- package/test/ribbon.js +174 -0
- package/test/ribbon.xml +16 -0
- package/test/template.js +0 -0
- package/test/test.js +325 -0
- package/check.js +0 -114
- package/createCBF.js +0 -68
- package/cxml_w.js +0 -80
- package/xml2cbFn.js +0 -126
- package/xml2json.js +0 -40
- /package/{StDelegate.json → lib/StDelegate.json} +0 -0
- /package/{clashAttributes.json → lib/clashAttributes.json} +0 -0
- /package/{simpleTypes.json → lib/simpleTypes.json} +0 -0
package/xml2cbFn.js
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
const fs = require('fs');
|
|
2
|
-
const xmlFlatten = require('./xml2json');
|
|
3
|
-
const checker = require('./check.js');
|
|
4
|
-
const lodash = require('lodash');
|
|
5
|
-
const clashes = require('./clashAttributes.json').crashs;
|
|
6
|
-
const SDT = require('./StDelegate.json');
|
|
7
|
-
const chokidar = require('chokidar');
|
|
8
|
-
const xmljs = require('xml-js');
|
|
9
|
-
const callbackType = require('./cbfTypes.json');
|
|
10
|
-
|
|
11
|
-
module.exports = (arg1, arg2, flag) => {
|
|
12
|
-
if (!arg1.endsWith('.xml')) throw new Error('The first argument must be a XML file!');
|
|
13
|
-
if (!arg2.endsWith('.js')) throw new Error('The second argument must be a JS file!');
|
|
14
|
-
if (fs.existsSync(arg1) === false) throw new Error('The XML file does not exist');
|
|
15
|
-
|
|
16
|
-
let xmlContent = fs.readFileSync(arg1, 'utf-8');
|
|
17
|
-
if (xmlContent.trim() === "") {
|
|
18
|
-
console.log("The XML file is empty");
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
let xml2jsonContent = xmljs.xml2js(xmlContent, { compact: false, spaces: 4 }, (err, res) => {
|
|
22
|
-
if (err) {
|
|
23
|
-
console.error(err);
|
|
24
|
-
} else {
|
|
25
|
-
return res;
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
let xmlFlattenRes = xmlFlatten(xml2jsonContent);
|
|
29
|
-
let attrs = xmlFlattenRes.map(o => {
|
|
30
|
-
// 有属性值的元素
|
|
31
|
-
if (Object.keys(o).includes('attributes') && Object.values(o["attributes"]).join('').length > 0) {
|
|
32
|
-
let kvObj = o["attributes"];
|
|
33
|
-
// 拿到该元素的所有回调属性
|
|
34
|
-
/** @type {Array} */
|
|
35
|
-
let itemCallBackFns = SDT[o["name"]];
|
|
36
|
-
if (itemCallBackFns === undefined) return;
|
|
37
|
-
// 是否存在回调属性且不为空
|
|
38
|
-
let isHasCallBack = itemCallBackFns.some(cb => {
|
|
39
|
-
return Object.keys(kvObj).includes(cb) && kvObj[cb].trim() !== "";
|
|
40
|
-
});
|
|
41
|
-
// 是否存在冲突属性
|
|
42
|
-
let isHasClash = clashes.some(c => {
|
|
43
|
-
return lodash.intersection(Object.keys(kvObj), c).length > 1;
|
|
44
|
-
})
|
|
45
|
-
// 返回符合条件的元素
|
|
46
|
-
if (!isHasClash && isHasCallBack) {
|
|
47
|
-
return { a: o["attributes"], p: o["xmlpath"], n: o["name"] };
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
attrs = lodash.compact(attrs);
|
|
52
|
-
if(attrs.length === 0) return;
|
|
53
|
-
// 提取出所有的回调函数名
|
|
54
|
-
let callbackFunctionNames = attrs.map(o => {
|
|
55
|
-
let attrNames = Object.keys(o.a);
|
|
56
|
-
let itemCallBackFns = SDT[o.n];
|
|
57
|
-
let cbFns = lodash.intersection(itemCallBackFns, attrNames);
|
|
58
|
-
if (cbFns.length > 0){
|
|
59
|
-
return lodash.compact(cbFns.map(cb => o.a[`${cb}`]));
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
callbackFunctionNames = lodash.flattenDeep(callbackFunctionNames);
|
|
63
|
-
// 去重
|
|
64
|
-
callbackFunctionNames = lodash.uniq(callbackFunctionNames);
|
|
65
|
-
if(callbackFunctionNames.length === 0) return;
|
|
66
|
-
// console.log(callbackFunctionNames);
|
|
67
|
-
// 用回调函数名获取 attrs 对象;
|
|
68
|
-
let attrsObj = callbackFunctionNames.map(cb => {
|
|
69
|
-
let z = lodash.map(attrs, o => {
|
|
70
|
-
let s = [];
|
|
71
|
-
Object.keys(o.a).forEach(k => {
|
|
72
|
-
if (o.a[k] === cb && o.a.id !== "") {
|
|
73
|
-
s.push ({fn:cb,xmlPath:o.p,id:o.a.id,cbAttr:k})
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
return s;
|
|
77
|
-
});
|
|
78
|
-
return lodash.compact(z);
|
|
79
|
-
});
|
|
80
|
-
attrsObj = lodash.flattenDeep(attrsObj);
|
|
81
|
-
if(attrsObj.length===0) return;
|
|
82
|
-
//console.log(attrsObj);
|
|
83
|
-
let fnGroup = lodash.groupBy(attrsObj, 'fn'); // 按照回调函数名分组
|
|
84
|
-
// console.log(fnGroup);
|
|
85
|
-
// console.log(callbackFunctionNames);
|
|
86
|
-
// console.log(callbackFunctionNames);
|
|
87
|
-
// 检查JS文件是否存在,不存在就创建。
|
|
88
|
-
if (!fs.existsSync(arg2)) {
|
|
89
|
-
fs.writeFileSync(arg2, '');
|
|
90
|
-
}
|
|
91
|
-
if (flag.write) {
|
|
92
|
-
fs.writeFileSync(arg2, '');
|
|
93
|
-
}
|
|
94
|
-
// 读取JS文件内容
|
|
95
|
-
let jsContent = fs.readFileSync(arg2, 'utf-8');
|
|
96
|
-
// 检查JS文件中是否存在回调函数
|
|
97
|
-
callbackFunctionNames.forEach(cb => {
|
|
98
|
-
let cbItem = cb;// 回调函数的属性值
|
|
99
|
-
let regexGets = new RegExp(` ${cbItem}`, 'g');
|
|
100
|
-
let cbFnContent = cbTemplete(cbItem);
|
|
101
|
-
if (!jsContent.match(regexGets)||flag.write) {
|
|
102
|
-
fs.writeFileSync(arg2, cbFnContent, { flag: 'a' });
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
function cbTemplete(attrValue) {
|
|
106
|
-
if(!fnGroup[attrValue]) return;
|
|
107
|
-
let infos = fnGroup[attrValue];
|
|
108
|
-
let cases = infos.map(o =>infos.length>1?`// xmlPath: ${o.xmlPath}\n case "${o.id}":\n break;` : `// xmlPath: ${o.xmlPath}[id=${o.id}]\n`);
|
|
109
|
-
// 回调函数的属性名
|
|
110
|
-
let callbackAttr= infos[0].cbAttr;
|
|
111
|
-
// 回调函数的类型
|
|
112
|
-
let cbType = lodash.filter(callbackType, ['n', callbackAttr])[0].t;
|
|
113
|
-
let spaceReapts = (len)=>" ".repeat(len);
|
|
114
|
-
return `
|
|
115
|
-
/**
|
|
116
|
-
* Callback function for ${callbackAttr}
|
|
117
|
-
* @param {RibbonUI} ctrl 菜单控件对象
|
|
118
|
-
* @returns {${cbType}}
|
|
119
|
-
*
|
|
120
|
-
* Time: ${new Date()}
|
|
121
|
-
*/
|
|
122
|
-
function ${attrValue}(ctrl){
|
|
123
|
-
${cases.length > 1 ? `switch(ctrl.Id){\n${spaceReapts(8)}${cases.join('\n ')}\ndefault:\n${spaceReapts(8)}break;\n${cbType=='void'?`${spaceReapts(8)}}\nreturn true;\n}`:``}` : `${cases.join('\n')}\n`}
|
|
124
|
-
}`;
|
|
125
|
-
}
|
|
126
|
-
}
|
package/xml2json.js
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
const lodash = require('lodash');
|
|
2
|
-
function flatten(obj, path = [], result = {}, resArray = [], resNames = []) {
|
|
3
|
-
// pick the type, name and attributes
|
|
4
|
-
let iWanted = lodash.pick(obj, ["type", "name", "attributes"]);
|
|
5
|
-
if (Object.keys(iWanted).length > 0) {
|
|
6
|
-
// add the xmlpath to the object;
|
|
7
|
-
Object.assign(iWanted, { xmlpath: resNames.join('>')});
|
|
8
|
-
resArray.push(iWanted);
|
|
9
|
-
}
|
|
10
|
-
if (obj && typeof obj === 'object') {
|
|
11
|
-
Object.keys(obj).forEach(key => {
|
|
12
|
-
const value = obj[key];
|
|
13
|
-
const newPath = path.concat(key);
|
|
14
|
-
//
|
|
15
|
-
let newResNames=[];
|
|
16
|
-
if(Number.isInteger(Number(key))) {
|
|
17
|
-
let eItem = `${value.name}[${key}]`;// button[0]
|
|
18
|
-
if(Number(key)>0){
|
|
19
|
-
let beDeleted = `${value.name}[${key-1}]`
|
|
20
|
-
let index = resNames.lastIndexOf(beDeleted);
|
|
21
|
-
let resNamesCopy = resNames.slice(0, index);
|
|
22
|
-
newResNames = resNamesCopy.concat(eItem);
|
|
23
|
-
}else{
|
|
24
|
-
newResNames = resNames.concat(`${value.name}[${key}]`);
|
|
25
|
-
}
|
|
26
|
-
resNames=newResNames;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
//
|
|
30
|
-
if (value && typeof value === 'object') {
|
|
31
|
-
flatten(value, newPath, result, resArray, resNames);
|
|
32
|
-
} else {
|
|
33
|
-
result[newPath.join('.')] = value;
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
return resArray
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
module.exports = flatten;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|