owl-cli 6.12.0 → 6.14.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.
@@ -0,0 +1,183 @@
1
+ function isScalar(o){
2
+ if(o==null){
3
+ return true;
4
+ }
5
+ if(typeof o==='object'){
6
+ return false;
7
+ }
8
+ return true;
9
+ }
10
+
11
+ function isEqual(r1,r2){
12
+ var igoredKeys = ['_type','_matched'];
13
+ if(r1==null && r2==null){
14
+ return true;
15
+ }
16
+ if(r1==null || r2==null){
17
+ return false;
18
+ }
19
+ //now assert a1!=null && r2!=null
20
+ var ks1 = Object.keys(r1);
21
+ var ks2 = Object.keys(r2);
22
+ if(ks1.length!==ks2.length){
23
+ return false;
24
+ }
25
+ for(var i=0; i<ks1.length; i++){
26
+ var k = ks1[i];
27
+ if(r1[k]!==r2[k]){
28
+ return false;
29
+ }
30
+ }
31
+ return true;
32
+
33
+ }
34
+
35
+ function diffArray(a1, a2,parentKey){
36
+ //a1是旧的,a2是新的
37
+
38
+ var result = [];
39
+ if(!a1){
40
+ a1 = [];
41
+ }
42
+ if(!a2){
43
+ a2 = [];
44
+ }
45
+ for(var i=0; i<a1.length; i++){
46
+ var r1 = a1[i];
47
+ var found = false;
48
+ for(var j=0; j<a2.length; j++){
49
+ var r2 = a2[j];
50
+ if(isEqual(r1,r2)){
51
+ found = true;
52
+ r2._matched = true;
53
+ break;
54
+ }
55
+ }
56
+ if(!found){
57
+ //r1不存在于a2中,说明r1被删除了
58
+ r1._type='deleted'
59
+ result.push(r1)
60
+ }
61
+ }
62
+ for(var i=0; i<a2.length; i++){
63
+ r2 = a2[i];
64
+ if(!r2._matched){
65
+ r2._type = 'added';
66
+ result.push(r2);
67
+ }
68
+
69
+ }
70
+ return result;
71
+ }
72
+
73
+ function diff(obj1, obj2,parentKey){
74
+ var result = []
75
+ var keys1 = Object.keys(obj1);
76
+ var keys2 = Object.keys(obj2);
77
+ key1s.sort();
78
+ key2s.sort();
79
+
80
+ //找到减少的
81
+ 和发生了变化的
82
+ for(var i=0; i<keys1.length; i++){
83
+ var k1 = keys1[i];
84
+ var v1 = obj1[k1];
85
+ var v2 = obj2[k1];
86
+
87
+
88
+ //如果v1,v2 是scalar,则直接比较
89
+ if(isScalar(v1)){
90
+ if(v1!==v2 && v2!=null && v1!==null){
91
+ result.push({
92
+ type:'changed',
93
+ fieldKey : k1,
94
+ parentKey: parentKey,
95
+ oldv : v1,
96
+ newv : v2
97
+ })
98
+ }
99
+ else{
100
+ if(v1!==v2 && v1===null){
101
+ result.push({
102
+ type:'added',
103
+ fieldKey : k1,
104
+ parentKey: parentKey,
105
+ oldv : v1,
106
+ newv : v2
107
+ })
108
+ }
109
+ else if(v1!==null && v2===null){
110
+ result.push({
111
+ type:'deleted',
112
+ fieldKey : k1,
113
+ parentKey: parentKey,
114
+ oldv : v1,
115
+ newv : v2
116
+ })
117
+ }
118
+ }
119
+ }
120
+ else{
121
+ if(Array.isArray(v1)){
122
+ var ret = diffArray(v1,v2,parentKey + "." + k1);
123
+ if(ret && ret.length>0){
124
+ result.push({
125
+ type:'changed',
126
+ fieldKey : k1,
127
+ fieldType:'array',
128
+ parentKey: parentKey,
129
+ diff : ret
130
+ });
131
+ }
132
+ }
133
+ else{
134
+ var ret1 = diff(v1,v2,parentKey + "." + k1);
135
+ result = [].concat(result,ret1);
136
+ }
137
+ }
138
+
139
+ }
140
+
141
+ for(var i=0; i<keys2.length; i++){
142
+ var k2 = keys2[i];
143
+ if(keys1.indexOf(k2)>-1){
144
+ //在keys1中存在,那么这个k2已经在上一步处理过了
145
+ continue;
146
+ }
147
+ var v2 = obj2[k2];
148
+ if(isScalar(v2)){
149
+ result.push({
150
+ type:'added',
151
+ fieldKey : k2,
152
+ parentKey: parentKey,
153
+ oldv : v1,
154
+ newv : v2
155
+ })
156
+ }
157
+ else{
158
+ if(Array.isArray(v2)){
159
+ result.push({
160
+ type:'added',
161
+ fieldKey : k2,
162
+ fieldType:'array',
163
+ parentKey: parentKey,
164
+ diff : v2
165
+ });
166
+ }
167
+ else{
168
+ for(var kv in v2){
169
+ result.push({
170
+ type:'added',
171
+ fieldKey : kv,
172
+ parentKey: parentKey+"." + k2,
173
+ oldv:null,
174
+ newv:v2[kv]
175
+ });
176
+ }
177
+ }
178
+ }
179
+
180
+
181
+ }
182
+ return result;
183
+ }
@@ -6,6 +6,7 @@
6
6
  //#import session.js
7
7
  //#import $@projectCode:services/modelService.jsx
8
8
  //#import @handlers/include/checklogin.jsx
9
+ //#import @handlers/include/diff.jsx
9
10
  (function(){
10
11
 
11
12
  var env = checklogin();
@@ -55,9 +56,12 @@
55
56
  var newdata = @projectCodeService.update( modelObject,env);
56
57
  }
57
58
 
59
+ var diffResult = diff(oldObj,modelObject);
60
+
58
61
  var ret = {
59
62
  state: 'ok',
60
- object: newdata
63
+ object: newdata,
64
+ diffResult:diffResult
61
65
  };
62
66
  out.print( JSON.stringify( ret ) );
63
67
  } catch ( e ) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "owl-cli",
3
- "version": "6.12.0",
3
+ "version": "6.14.0",
4
4
  "main": "index.js",
5
5
  "preferGlobal": true,
6
6
  "bin": {