@looker/sdk-codegen 21.7.4 → 21.8.1
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/CHANGELOG.md +20 -0
- package/lib/codeGen.d.ts +1 -1
- package/lib/codeGen.js +28 -154
- package/lib/codeGen.js.map +1 -1
- package/lib/codeGenerators.js +0 -16
- package/lib/codeGenerators.js.map +1 -1
- package/lib/csharp.gen.js +3 -71
- package/lib/csharp.gen.js.map +1 -1
- package/lib/declarationInfo.js +0 -7
- package/lib/declarationInfo.js.map +1 -1
- package/lib/esm/codeGen.js +48 -157
- package/lib/esm/codeGen.js.map +1 -1
- package/lib/esm/codeGenerators.js +28 -20
- package/lib/esm/codeGenerators.js.map +1 -1
- package/lib/esm/csharp.gen.js +19 -75
- package/lib/esm/csharp.gen.js.map +1 -1
- package/lib/esm/declarationInfo.js +10 -7
- package/lib/esm/declarationInfo.js.map +1 -1
- package/lib/esm/exampleInfo.js +24 -23
- package/lib/esm/exampleInfo.js.map +1 -1
- package/lib/esm/go.gen.js +18 -92
- package/lib/esm/go.gen.js.map +1 -1
- package/lib/esm/index.js +148 -13
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/kotlin.gen.js +23 -118
- package/lib/esm/kotlin.gen.js.map +1 -1
- package/lib/esm/pseudo.gen.js +14 -24
- package/lib/esm/pseudo.gen.js.map +1 -1
- package/lib/esm/python.gen.js +19 -138
- package/lib/esm/python.gen.js.map +1 -1
- package/lib/esm/sdkModels.js +103 -435
- package/lib/esm/sdkModels.js.map +1 -1
- package/lib/esm/specConverter.js +58 -88
- package/lib/esm/specConverter.js.map +1 -1
- package/lib/esm/specDiff.js +39 -54
- package/lib/esm/specDiff.js.map +1 -1
- package/lib/esm/swift.gen.js +25 -137
- package/lib/esm/swift.gen.js.map +1 -1
- package/lib/esm/testUtils/index.js +17 -0
- package/lib/esm/testUtils/index.js.map +1 -0
- package/lib/esm/testUtils/testUtils.js +66 -0
- package/lib/esm/testUtils/testUtils.js.map +1 -0
- package/lib/esm/typescript.gen.js +24 -125
- package/lib/esm/typescript.gen.js.map +1 -1
- package/lib/exampleInfo.js +1 -31
- package/lib/exampleInfo.js.map +1 -1
- package/lib/go.gen.js +3 -87
- package/lib/go.gen.js.map +1 -1
- package/lib/index.js +0 -26
- package/lib/index.js.map +1 -1
- package/lib/kotlin.gen.js +7 -113
- package/lib/kotlin.gen.js.map +1 -1
- package/lib/pseudo.gen.js +3 -24
- package/lib/pseudo.gen.js.map +1 -1
- package/lib/python.gen.js +3 -133
- package/lib/python.gen.js.map +1 -1
- package/lib/sdkModels.js +20 -450
- package/lib/sdkModels.js.map +1 -1
- package/lib/specConverter.js +6 -106
- package/lib/specConverter.js.map +1 -1
- package/lib/specDiff.js +4 -59
- package/lib/specDiff.js.map +1 -1
- package/lib/swift.gen.js +3 -128
- package/lib/swift.gen.js.map +1 -1
- package/lib/testUtils/index.js +0 -2
- package/lib/testUtils/index.js.map +1 -1
- package/lib/testUtils/testUtils.js +1 -17
- package/lib/testUtils/testUtils.js.map +1 -1
- package/lib/typescript.gen.js +5 -117
- package/lib/typescript.gen.js.map +1 -1
- package/package.json +3 -3
package/lib/esm/specDiff.js
CHANGED
|
@@ -1,38 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.startCount = exports.mdHeaderRow = exports.mdDiffRow = exports.includeDiffs = exports.csvHeaderRow = exports.csvDiffRow = exports.countDiffs = exports.compareTypes = exports.compareSpecs = exports.compareResponses = exports.compareParams = exports.compareEnumTypes = exports.compareBodies = void 0;
|
|
7
|
+
var _sdkModels = require("./sdkModels");
|
|
8
|
+
var DiffCompare = function (DiffCompare) {
|
|
5
9
|
DiffCompare[DiffCompare["RightMissing"] = -1] = "RightMissing";
|
|
6
10
|
DiffCompare[DiffCompare["Equal"] = 0] = "Equal";
|
|
7
11
|
DiffCompare[DiffCompare["LeftMissing"] = 1] = "LeftMissing";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
12
|
+
return DiffCompare;
|
|
13
|
+
}(DiffCompare || {});
|
|
14
|
+
var startCount = () => {
|
|
11
15
|
return {
|
|
12
16
|
changed: 0,
|
|
13
17
|
added: 0,
|
|
14
18
|
removed: 0
|
|
15
19
|
};
|
|
16
20
|
};
|
|
17
|
-
|
|
21
|
+
exports.startCount = startCount;
|
|
18
22
|
var diffCompare = (lKey, rKey) => {
|
|
19
23
|
if (lKey && rKey) return lKey.localeCompare(rKey);
|
|
20
24
|
if (lKey) return DiffCompare.RightMissing;
|
|
21
25
|
return DiffCompare.LeftMissing;
|
|
22
26
|
};
|
|
23
|
-
|
|
24
|
-
export var countDiffs = function countDiffs(count, lKeys, rKeys) {
|
|
27
|
+
var countDiffs = function countDiffs(count, lKeys, rKeys) {
|
|
25
28
|
var comparer = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : diffCompare;
|
|
26
29
|
lKeys = lKeys.sort((a, b) => a.localeCompare(b));
|
|
27
30
|
rKeys = rKeys.sort((a, b) => a.localeCompare(b));
|
|
28
31
|
var l = 0;
|
|
29
32
|
var r = 0;
|
|
30
|
-
|
|
31
33
|
while (l < lKeys.length || r < rKeys.length) {
|
|
32
34
|
var lk = lKeys[l];
|
|
33
35
|
var rk = rKeys[r];
|
|
34
36
|
var comp = comparer(lk, rk);
|
|
35
|
-
|
|
36
37
|
switch (comp) {
|
|
37
38
|
case DiffCompare.LeftMissing:
|
|
38
39
|
{
|
|
@@ -40,14 +41,12 @@ export var countDiffs = function countDiffs(count, lKeys, rKeys) {
|
|
|
40
41
|
r++;
|
|
41
42
|
break;
|
|
42
43
|
}
|
|
43
|
-
|
|
44
44
|
case DiffCompare.RightMissing:
|
|
45
45
|
{
|
|
46
46
|
count.removed++;
|
|
47
47
|
l++;
|
|
48
48
|
break;
|
|
49
49
|
}
|
|
50
|
-
|
|
51
50
|
default:
|
|
52
51
|
{
|
|
53
52
|
l++;
|
|
@@ -55,10 +54,10 @@ export var countDiffs = function countDiffs(count, lKeys, rKeys) {
|
|
|
55
54
|
}
|
|
56
55
|
}
|
|
57
56
|
}
|
|
58
|
-
|
|
59
57
|
return count;
|
|
60
58
|
};
|
|
61
|
-
|
|
59
|
+
exports.countDiffs = countDiffs;
|
|
60
|
+
var compareEnumTypes = (lType, rType, count) => {
|
|
62
61
|
var lNum = lType;
|
|
63
62
|
var rNum = rType;
|
|
64
63
|
var lKeys = lNum.values.map(v => v.toString());
|
|
@@ -72,24 +71,21 @@ export var compareEnumTypes = (lType, rType, count) => {
|
|
|
72
71
|
rhs: rVal
|
|
73
72
|
};
|
|
74
73
|
};
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
exports.compareEnumTypes = compareEnumTypes;
|
|
75
|
+
var compareTypes = (lType, rType, count) => {
|
|
76
|
+
if (lType instanceof _sdkModels.EnumType) {
|
|
77
77
|
return compareEnumTypes(lType, rType, count);
|
|
78
78
|
}
|
|
79
|
-
|
|
80
|
-
if (lType instanceof ArrayType) {
|
|
79
|
+
if (lType instanceof _sdkModels.ArrayType) {
|
|
81
80
|
lType = lType.elementType;
|
|
82
81
|
}
|
|
83
|
-
|
|
84
|
-
if (rType instanceof ArrayType) {
|
|
82
|
+
if (rType instanceof _sdkModels.ArrayType) {
|
|
85
83
|
rType = rType.elementType;
|
|
86
84
|
}
|
|
87
|
-
|
|
88
85
|
if (lType.asHashString() === rType.asHashString()) return;
|
|
89
86
|
var diff = {};
|
|
90
87
|
countDiffs(count, Object.keys(lType.properties), Object.keys(rType.properties), (lKey, rKey) => {
|
|
91
88
|
var comp = diffCompare(lKey, rKey);
|
|
92
|
-
|
|
93
89
|
switch (comp) {
|
|
94
90
|
case DiffCompare.LeftMissing:
|
|
95
91
|
{
|
|
@@ -99,7 +95,6 @@ export var compareTypes = (lType, rType, count) => {
|
|
|
99
95
|
};
|
|
100
96
|
break;
|
|
101
97
|
}
|
|
102
|
-
|
|
103
98
|
case DiffCompare.RightMissing:
|
|
104
99
|
{
|
|
105
100
|
diff[lKey] = {
|
|
@@ -108,14 +103,12 @@ export var compareTypes = (lType, rType, count) => {
|
|
|
108
103
|
};
|
|
109
104
|
break;
|
|
110
105
|
}
|
|
111
|
-
|
|
112
106
|
default:
|
|
113
107
|
{
|
|
114
108
|
var lhsVal = lType.properties[lKey];
|
|
115
109
|
var rhsVal = rType.properties[rKey];
|
|
116
110
|
var lhs = lhsVal.summary();
|
|
117
111
|
var rhs = rhsVal.summary();
|
|
118
|
-
|
|
119
112
|
if (lhs !== rhs) {
|
|
120
113
|
count.changed++;
|
|
121
114
|
diff[lKey] = {
|
|
@@ -125,29 +118,26 @@ export var compareTypes = (lType, rType, count) => {
|
|
|
125
118
|
}
|
|
126
119
|
}
|
|
127
120
|
}
|
|
128
|
-
|
|
129
121
|
return comp;
|
|
130
122
|
});
|
|
131
123
|
if (Object.keys(diff).length === 0) return;
|
|
132
124
|
return diff;
|
|
133
125
|
};
|
|
134
|
-
|
|
126
|
+
exports.compareTypes = compareTypes;
|
|
127
|
+
var compareParams = (lMethod, rMethod, count) => {
|
|
135
128
|
var lParams = {};
|
|
136
129
|
var rParams = {};
|
|
137
130
|
lMethod.allParams.forEach(p => lParams[p.name] = p);
|
|
138
131
|
rMethod.allParams.forEach(p => rParams[p.name] = p);
|
|
139
132
|
countDiffs(count, Object.keys(lParams), Object.keys(rParams), (lKey, rKey) => {
|
|
140
133
|
var comp = diffCompare(lKey, rKey);
|
|
141
|
-
|
|
142
134
|
if (comp === 0) {
|
|
143
135
|
var lsh = lParams[lKey].signature();
|
|
144
136
|
var rsh = rParams[rKey].signature();
|
|
145
|
-
|
|
146
137
|
if (lsh !== rsh) {
|
|
147
138
|
count.changed++;
|
|
148
139
|
}
|
|
149
140
|
}
|
|
150
|
-
|
|
151
141
|
return comp;
|
|
152
142
|
});
|
|
153
143
|
var lSignature = lMethod.signature();
|
|
@@ -158,7 +148,8 @@ export var compareParams = (lMethod, rMethod, count) => {
|
|
|
158
148
|
rhs: rSignature
|
|
159
149
|
};
|
|
160
150
|
};
|
|
161
|
-
|
|
151
|
+
exports.compareParams = compareParams;
|
|
152
|
+
var compareBodies = (lMethod, rMethod, count) => {
|
|
162
153
|
var lParams = {};
|
|
163
154
|
var rParams = {};
|
|
164
155
|
lMethod.bodyParams.forEach(p => lParams[p.name] = p);
|
|
@@ -185,7 +176,8 @@ export var compareBodies = (lMethod, rMethod, count) => {
|
|
|
185
176
|
rhs: rSide
|
|
186
177
|
};
|
|
187
178
|
};
|
|
188
|
-
|
|
179
|
+
exports.compareBodies = compareBodies;
|
|
180
|
+
var compareResponses = (lMethod, rMethod, count) => {
|
|
189
181
|
var lSide = lMethod.responses.map(r => {
|
|
190
182
|
return {
|
|
191
183
|
statusCode: r.statusCode,
|
|
@@ -207,25 +199,27 @@ export var compareResponses = (lMethod, rMethod, count) => {
|
|
|
207
199
|
rhs: rSide
|
|
208
200
|
};
|
|
209
201
|
};
|
|
210
|
-
|
|
211
|
-
|
|
202
|
+
exports.compareResponses = compareResponses;
|
|
203
|
+
var csvHeaderRow = 'method name,"Op + URI",left status,right status,typeDiff,paramDiff,bodyDiff,responseDiff,diffCount';
|
|
204
|
+
exports.csvHeaderRow = csvHeaderRow;
|
|
205
|
+
var csvDiffRow = diff => {
|
|
212
206
|
var diffCount = JSON.stringify(diff.diffCount).replace(/"/g, "'");
|
|
213
207
|
return "\n".concat(diff.name, ",").concat(diff.id, ",").concat(diff.lStatus, ",").concat(diff.rStatus, ",").concat(diff.typeDiff, ",").concat(diff.paramsDiff, ",").concat(diff.bodyDiff, ",").concat(diff.responseDiff, ",\"").concat(diffCount, "\"");
|
|
214
208
|
};
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
209
|
+
exports.csvDiffRow = csvDiffRow;
|
|
210
|
+
var mdHeaderRow = "\n| method name | Op + URI | 3.1 | 4.0 | typeDiff | paramDiff | bodyDiff | responseDiff | diffCount |\n| ------------ | -------- | --- | --- | ------------ | --------- | -------- | ------------ | --------- |";
|
|
211
|
+
exports.mdHeaderRow = mdHeaderRow;
|
|
212
|
+
var mdDiffRow = diff => "\n| ".concat(diff.name, " | ").concat(diff.id, " | ").concat(diff.lStatus, " | ").concat(diff.rStatus, " | ").concat(diff.typeDiff, " | ").concat(diff.paramsDiff, " | ").concat(diff.bodyDiff, " | ").concat(diff.responseDiff, " | ").concat(JSON.stringify(diff.diffCount), " |");
|
|
213
|
+
exports.mdDiffRow = mdDiffRow;
|
|
218
214
|
var diffToString = diff => {
|
|
219
215
|
if (!diff) return '';
|
|
220
216
|
var result = JSON.stringify(diff, null, 2);
|
|
221
217
|
if (result === '{}') return '';
|
|
222
218
|
return "\"".concat(result.replace(/"/g, "'"), "\"");
|
|
223
219
|
};
|
|
224
|
-
|
|
225
220
|
var computeDiff = (lMethod, rMethod) => {
|
|
226
221
|
if (!lMethod && !rMethod) throw new Error('At least one method is required.');
|
|
227
222
|
var count = startCount();
|
|
228
|
-
|
|
229
223
|
var countStatus = () => {
|
|
230
224
|
if (!rMethod) {
|
|
231
225
|
count.removed++;
|
|
@@ -235,10 +229,8 @@ var computeDiff = (lMethod, rMethod) => {
|
|
|
235
229
|
if (lMethod.status !== rMethod.status) count.changed++;
|
|
236
230
|
}
|
|
237
231
|
};
|
|
238
|
-
|
|
239
232
|
var result;
|
|
240
233
|
countStatus();
|
|
241
|
-
|
|
242
234
|
if (lMethod) {
|
|
243
235
|
var typeDiff = rMethod ? diffToString(compareTypes(lMethod.type, rMethod.type, count)) : '';
|
|
244
236
|
var paramsDiff = rMethod ? diffToString(compareParams(lMethod, rMethod, count)) : '';
|
|
@@ -268,16 +260,13 @@ var computeDiff = (lMethod, rMethod) => {
|
|
|
268
260
|
diffCount: count
|
|
269
261
|
};
|
|
270
262
|
}
|
|
271
|
-
|
|
272
263
|
return result;
|
|
273
264
|
};
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
265
|
+
var includeDiffs = (delta, lMethod, rMethod) => !lMethod || !rMethod || delta.lStatus !== delta.rStatus || !!delta.paramsDiff || !!delta.typeDiff || !!delta.bodyDiff || !!delta.responseDiff;
|
|
266
|
+
exports.includeDiffs = includeDiffs;
|
|
267
|
+
var compareSpecs = function compareSpecs(lSpec, rSpec) {
|
|
277
268
|
var include = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : includeDiffs;
|
|
278
|
-
|
|
279
269
|
var specSort = (a, b) => a.id.localeCompare(b.id);
|
|
280
|
-
|
|
281
270
|
var lMethods = Object.values(lSpec.methods).sort(specSort);
|
|
282
271
|
var rMethods = Object.values(rSpec.methods).sort(specSort);
|
|
283
272
|
var lLength = lMethods.length;
|
|
@@ -285,11 +274,9 @@ export var compareSpecs = function compareSpecs(lSpec, rSpec) {
|
|
|
285
274
|
var lIndex = 0;
|
|
286
275
|
var rIndex = 0;
|
|
287
276
|
var diff = [];
|
|
288
|
-
|
|
289
277
|
while (lIndex < lLength || rIndex < rLength) {
|
|
290
278
|
var _lMethod = lMethods[lIndex];
|
|
291
279
|
var _rMethod = rMethods[rIndex];
|
|
292
|
-
|
|
293
280
|
if (!_lMethod) {
|
|
294
281
|
rIndex++;
|
|
295
282
|
} else if (!_rMethod) {
|
|
@@ -304,14 +291,12 @@ export var compareSpecs = function compareSpecs(lSpec, rSpec) {
|
|
|
304
291
|
lIndex++;
|
|
305
292
|
rIndex++;
|
|
306
293
|
}
|
|
307
|
-
|
|
308
294
|
var _delta = computeDiff(_lMethod, _rMethod);
|
|
309
|
-
|
|
310
295
|
if (include(_delta, _lMethod, _rMethod)) {
|
|
311
296
|
diff.push(_delta);
|
|
312
297
|
}
|
|
313
298
|
}
|
|
314
|
-
|
|
315
299
|
return diff;
|
|
316
300
|
};
|
|
301
|
+
exports.compareSpecs = compareSpecs;
|
|
317
302
|
//# sourceMappingURL=specDiff.js.map
|
package/lib/esm/specDiff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/specDiff.ts"],"names":["EnumType","ArrayType","DiffCompare","startCount","changed","added","removed","diffCompare","lKey","rKey","localeCompare","RightMissing","LeftMissing","countDiffs","count","lKeys","rKeys","comparer","sort","a","b","l","r","length","lk","rk","comp","compareEnumTypes","lType","rType","lNum","rNum","values","map","v","toString","lVal","JSON","stringify","rVal","lhs","rhs","compareTypes","elementType","asHashString","diff","Object","keys","properties","summary","lhsVal","rhsVal","compareParams","lMethod","rMethod","lParams","rParams","allParams","forEach","p","name","lsh","signature","rsh","lSignature","rSignature","compareBodies","bodyParams","lSide","type","fullName","required","rSide","compareResponses","responses","statusCode","mediaType","csvHeaderRow","csvDiffRow","diffCount","replace","id","lStatus","rStatus","typeDiff","paramsDiff","bodyDiff","responseDiff","mdHeaderRow","mdDiffRow","diffToString","result","computeDiff","Error","countStatus","status","includeDiffs","delta","compareSpecs","lSpec","rSpec","include","specSort","lMethods","methods","rMethods","lLength","rLength","lIndex","rIndex","undefined","push"],"mappings":"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","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { IMethod, IType, KeyedCollection, IApiModel } from './sdkModels'\nimport { EnumType, ArrayType } from './sdkModels'\n\ninterface ITypeDelta {\n lhs: string\n rhs: string\n}\n\nenum DiffCompare {\n RightMissing = -1,\n Equal = 0,\n LeftMissing = 1,\n}\n\nexport interface DiffCount {\n changed: number\n added: number\n removed: number\n}\n\nexport type TypeDelta = KeyedCollection<ITypeDelta>\n\nexport type DiffTracker = (lKey: string, rKey: string) => number\n\nexport const startCount = (): DiffCount => {\n return { changed: 0, added: 0, removed: 0 }\n}\n\nconst diffCompare = (lKey: string, rKey: string) => {\n if (lKey && rKey) return lKey.localeCompare(rKey)\n if (lKey) return DiffCompare.RightMissing\n return DiffCompare.LeftMissing\n}\n\nexport const countDiffs = (\n count: DiffCount,\n lKeys: string[],\n rKeys: string[],\n comparer: DiffTracker = diffCompare\n) => {\n lKeys = lKeys.sort((a, b) => a.localeCompare(b))\n rKeys = rKeys.sort((a, b) => a.localeCompare(b))\n let l = 0\n let r = 0\n while (l < lKeys.length || r < rKeys.length) {\n const lk = lKeys[l]\n const rk = rKeys[r]\n const comp = comparer(lk, rk)\n switch (comp) {\n case DiffCompare.LeftMissing: {\n count.added++\n r++\n break\n }\n case DiffCompare.RightMissing: {\n count.removed++\n l++\n break\n }\n default: {\n l++\n r++\n }\n }\n }\n return count\n}\n\nexport const compareEnumTypes = (\n lType: IType,\n rType: IType,\n count: DiffCount\n) => {\n const lNum = lType as EnumType\n const rNum = rType as EnumType\n const lKeys = lNum.values.map((v) => v.toString())\n const rKeys = rNum.values.map((v) => v.toString())\n countDiffs(count, lKeys, rKeys)\n const lVal = JSON.stringify(lKeys)\n const rVal = JSON.stringify(rKeys)\n if (lVal === rVal) return\n return {\n lhs: lVal,\n rhs: rVal,\n }\n}\n\n/**\n * Compares two types and returns an object of non-matching entries\n * @param lType\n * @param rType\n * @param count change tracking\n */\nexport const compareTypes = (lType: IType, rType: IType, count: DiffCount) => {\n if (lType instanceof EnumType) {\n return compareEnumTypes(lType, rType, count)\n }\n\n if (lType instanceof ArrayType) {\n lType = lType.elementType\n }\n\n if (rType instanceof ArrayType) {\n rType = rType.elementType\n }\n\n if (lType.asHashString() === rType.asHashString()) return\n\n const diff: TypeDelta = {}\n countDiffs(\n count,\n Object.keys(lType.properties),\n Object.keys(rType.properties),\n (lKey, rKey) => {\n const comp = diffCompare(lKey, rKey)\n switch (comp) {\n case DiffCompare.LeftMissing: {\n diff[rKey] = {\n lhs: '',\n rhs: rType.properties[rKey].summary(),\n }\n break\n }\n case DiffCompare.RightMissing: {\n diff[lKey] = {\n lhs: lType.properties[lKey].summary(),\n rhs: '',\n }\n break\n }\n default: {\n const lhsVal = lType.properties[lKey]\n const rhsVal = rType.properties[rKey]\n const lhs = lhsVal.summary()\n const rhs = rhsVal.summary()\n if (lhs !== rhs) {\n count.changed++\n diff[lKey] = {\n lhs,\n rhs,\n }\n }\n }\n }\n return comp\n }\n )\n if (Object.keys(diff).length === 0) return\n return diff\n}\n\n/**\n * Compares the params of two methods and returns the signature of both methods\n * if non matching.\n * @param lMethod\n * @param rMethod\n * @param count change tracking\n */\nexport const compareParams = (\n lMethod: IMethod,\n rMethod: IMethod,\n count: DiffCount\n) => {\n const lParams = {}\n const rParams = {}\n lMethod.allParams.forEach((p) => (lParams[p.name] = p))\n rMethod.allParams.forEach((p) => (rParams[p.name] = p))\n // TODO typediff the matching body types?\n countDiffs(\n count,\n Object.keys(lParams),\n Object.keys(rParams),\n (lKey, rKey) => {\n const comp = diffCompare(lKey, rKey)\n if (comp === 0) {\n const lsh = lParams[lKey].signature()\n const rsh = rParams[rKey].signature()\n if (lsh !== rsh) {\n count.changed++\n }\n }\n return comp\n }\n )\n\n const lSignature = lMethod.signature()\n const rSignature = rMethod.signature()\n if (lSignature === rSignature) return\n\n return {\n lhs: lSignature,\n rhs: rSignature,\n }\n}\n\n/**\n * Compares the bodies of two methods and returns diffs if there are any\n * @param lMethod\n * @param rMethod\n * @param count change tracking\n */\nexport const compareBodies = (\n lMethod: IMethod,\n rMethod: IMethod,\n count: DiffCount\n) => {\n const lParams = {}\n const rParams = {}\n lMethod.bodyParams.forEach((p) => (lParams[p.name] = p))\n rMethod.bodyParams.forEach((p) => (rParams[p.name] = p))\n // TODO typediff the matching body types?\n countDiffs(count, Object.keys(lParams), Object.keys(rParams))\n\n const lSide = lMethod.bodyParams.map((p) => {\n return {\n name: p.name,\n type: p.type.fullName,\n required: p.required,\n }\n })\n const rSide = rMethod.bodyParams.map((p) => {\n return {\n name: p.name,\n type: p.type.fullName,\n required: p.required,\n }\n })\n\n if (JSON.stringify(lSide) === JSON.stringify(rSide)) return\n\n count.changed++\n return {\n lhs: lSide,\n rhs: rSide,\n }\n}\n\n/**\n * Compare two response lists, returning diff\n * @param lMethod\n * @param rMethod\n * @param count change tracking\n */\nexport const compareResponses = (\n lMethod: IMethod,\n rMethod: IMethod,\n count: DiffCount\n) => {\n // TODO deep type comparison? Probably diff all types instead\n const lSide = lMethod.responses.map((r) => {\n return {\n statusCode: r.statusCode,\n mediaType: r.mediaType,\n type: r.type.fullName,\n }\n })\n const rSide = rMethod.responses.map((r) => {\n return {\n statusCode: r.statusCode,\n mediaType: r.mediaType,\n type: r.type.fullName,\n }\n })\n if (JSON.stringify(lSide) === JSON.stringify(rSide)) return\n\n count.changed++\n return {\n lhs: lSide,\n rhs: rSide,\n }\n}\n\nexport const csvHeaderRow =\n 'method name,\"Op + URI\",left status,right status,typeDiff,paramDiff,bodyDiff,responseDiff,diffCount'\n\nexport const csvDiffRow = (diff: DiffRow) => {\n const diffCount = JSON.stringify(diff.diffCount).replace(/\"/g, `'`)\n return `\n${diff.name},${diff.id},${diff.lStatus},${diff.rStatus},${diff.typeDiff},${diff.paramsDiff},${diff.bodyDiff},${diff.responseDiff},\"${diffCount}\"`\n}\n\nexport const mdHeaderRow = `\n| method name | Op + URI | 3.1 | 4.0 | typeDiff | paramDiff | bodyDiff | responseDiff | diffCount |\n| ------------ | -------- | --- | --- | ------------ | --------- | -------- | ------------ | --------- |`\n\nexport const mdDiffRow = (diff: DiffRow) => `\n| ${diff.name} | ${diff.id} | ${diff.lStatus} | ${diff.rStatus} | ${\n diff.typeDiff\n} | ${diff.paramsDiff} | ${diff.bodyDiff} | ${\n diff.responseDiff\n} | ${JSON.stringify(diff.diffCount)} |`\n\nconst diffToString = (diff: any) => {\n if (!diff) return ''\n const result = JSON.stringify(diff, null, 2)\n if (result === '{}') return ''\n return `\"${result.replace(/\"/g, \"'\")}\"`\n}\n\nexport interface ComputeDiffInputs {\n lMethod?: IMethod\n rMethod?: IMethod\n}\n\nexport interface DiffRow {\n /** Method name */\n name: string\n /** Method operation and path */\n id: string\n /** Method status in both specs */\n lStatus: string\n rStatus: string\n /** Method type diff if any */\n typeDiff: string\n /** Method params diff if any */\n paramsDiff: string\n /** Body diff if any */\n bodyDiff: string\n /** Response diff if any */\n responseDiff: string\n /** Count of differences */\n diffCount: DiffCount\n}\n\n/**\n * Computes the diff of two methods\n * @param lMethod\n * @param rMethod\n */\nconst computeDiff = (lMethod?: IMethod, rMethod?: IMethod) => {\n if (!lMethod && !rMethod) throw new Error('At least one method is required.')\n\n const count = startCount()\n const countStatus = () => {\n if (!rMethod) {\n count.removed++\n } else if (!lMethod) {\n count.added++\n } else {\n if (lMethod.status !== rMethod.status) count.changed++\n }\n }\n\n let result: DiffRow\n countStatus()\n if (lMethod) {\n const typeDiff = rMethod\n ? diffToString(compareTypes(lMethod.type, rMethod.type, count))\n : ''\n const paramsDiff = rMethod\n ? diffToString(compareParams(lMethod, rMethod, count))\n : ''\n const bodyDiff = rMethod\n ? diffToString(compareBodies(lMethod, rMethod, count))\n : ''\n const responseDiff = rMethod\n ? diffToString(compareResponses(lMethod, rMethod, count))\n : ''\n result = {\n name: lMethod.name,\n id: lMethod.id,\n lStatus: lMethod.status,\n rStatus: rMethod ? rMethod.status : '',\n typeDiff,\n paramsDiff,\n bodyDiff,\n responseDiff,\n diffCount: count,\n }\n } else if (!lMethod && rMethod) {\n result = {\n name: rMethod.name,\n id: rMethod.id,\n lStatus: '',\n rStatus: rMethod.status,\n typeDiff: '',\n paramsDiff: '',\n bodyDiff: '',\n responseDiff: '',\n diffCount: count,\n }\n }\n\n return result!\n}\n\nexport type DiffFilter = (\n delta: DiffRow,\n lMethod?: IMethod,\n rMethod?: IMethod\n) => boolean\n\n/**\n * Include when:\n * - lMethod is missing\n * - rMethod is missing\n * - params differ\n * - types differ\n * @param delta\n * @param lMethod\n * @param rMethod\n */\nexport const includeDiffs: DiffFilter = (delta, lMethod, rMethod) =>\n !lMethod ||\n !rMethod! ||\n delta.lStatus !== delta.rStatus ||\n !!delta.paramsDiff ||\n !!delta.typeDiff ||\n !!delta.bodyDiff ||\n !!delta.responseDiff\n\n/**\n * Compares two specs and returns a diff object\n * @param lSpec left-side spec\n * @param rSpec right-side spec\n * @param include evaluates to true if the comparison should be included\n */\nexport const compareSpecs = (\n lSpec: IApiModel,\n rSpec: IApiModel,\n include: DiffFilter = includeDiffs\n) => {\n const specSort = (a: IMethod, b: IMethod) => a.id.localeCompare(b.id)\n\n const lMethods = Object.values(lSpec.methods).sort(specSort)\n const rMethods = Object.values(rSpec.methods).sort(specSort)\n\n const lLength = lMethods.length\n const rLength = rMethods.length\n let lIndex = 0\n let rIndex = 0\n const diff: DiffRow[] = []\n\n while (lIndex < lLength || rIndex < rLength) {\n let lMethod: IMethod | undefined = lMethods[lIndex]\n let rMethod: IMethod | undefined = rMethods[rIndex]\n\n if (!lMethod) {\n rIndex++\n } else if (!rMethod) {\n lIndex++\n } else if (lMethod.id < rMethod.id) {\n rMethod = undefined\n lIndex++\n } else if (rMethod.id < lMethod.id) {\n lMethod = undefined\n rIndex++\n } else {\n lIndex++\n rIndex++\n }\n\n const delta = computeDiff(lMethod, rMethod)\n if (include(delta, lMethod, rMethod)) {\n diff.push(delta)\n }\n }\n return diff\n}\n"],"file":"specDiff.js"}
|
|
1
|
+
{"version":3,"file":"specDiff.js","names":["_sdkModels","require","DiffCompare","startCount","changed","added","removed","exports","diffCompare","lKey","rKey","localeCompare","RightMissing","LeftMissing","countDiffs","count","lKeys","rKeys","comparer","arguments","length","undefined","sort","a","b","l","r","lk","rk","comp","compareEnumTypes","lType","rType","lNum","rNum","values","map","v","toString","lVal","JSON","stringify","rVal","lhs","rhs","compareTypes","EnumType","ArrayType","elementType","asHashString","diff","Object","keys","properties","summary","lhsVal","rhsVal","compareParams","lMethod","rMethod","lParams","rParams","allParams","forEach","p","name","lsh","signature","rsh","lSignature","rSignature","compareBodies","bodyParams","lSide","type","fullName","required","rSide","compareResponses","responses","statusCode","mediaType","csvHeaderRow","csvDiffRow","diffCount","replace","concat","id","lStatus","rStatus","typeDiff","paramsDiff","bodyDiff","responseDiff","mdHeaderRow","mdDiffRow","diffToString","result","computeDiff","Error","countStatus","status","includeDiffs","delta","compareSpecs","lSpec","rSpec","include","specSort","lMethods","methods","rMethods","lLength","rLength","lIndex","rIndex","push"],"sources":["../../src/specDiff.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { IMethod, IType, KeyedCollection, IApiModel } from './sdkModels'\nimport { EnumType, ArrayType } from './sdkModels'\n\ninterface ITypeDelta {\n lhs: string\n rhs: string\n}\n\nenum DiffCompare {\n RightMissing = -1,\n Equal = 0,\n LeftMissing = 1,\n}\n\nexport interface DiffCount {\n changed: number\n added: number\n removed: number\n}\n\nexport type TypeDelta = KeyedCollection<ITypeDelta>\n\nexport type DiffTracker = (lKey: string, rKey: string) => number\n\nexport const startCount = (): DiffCount => {\n return { changed: 0, added: 0, removed: 0 }\n}\n\nconst diffCompare = (lKey: string, rKey: string) => {\n if (lKey && rKey) return lKey.localeCompare(rKey)\n if (lKey) return DiffCompare.RightMissing\n return DiffCompare.LeftMissing\n}\n\nexport const countDiffs = (\n count: DiffCount,\n lKeys: string[],\n rKeys: string[],\n comparer: DiffTracker = diffCompare\n) => {\n lKeys = lKeys.sort((a, b) => a.localeCompare(b))\n rKeys = rKeys.sort((a, b) => a.localeCompare(b))\n let l = 0\n let r = 0\n while (l < lKeys.length || r < rKeys.length) {\n const lk = lKeys[l]\n const rk = rKeys[r]\n const comp = comparer(lk, rk)\n switch (comp) {\n case DiffCompare.LeftMissing: {\n count.added++\n r++\n break\n }\n case DiffCompare.RightMissing: {\n count.removed++\n l++\n break\n }\n default: {\n l++\n r++\n }\n }\n }\n return count\n}\n\nexport const compareEnumTypes = (\n lType: IType,\n rType: IType,\n count: DiffCount\n) => {\n const lNum = lType as EnumType\n const rNum = rType as EnumType\n const lKeys = lNum.values.map((v) => v.toString())\n const rKeys = rNum.values.map((v) => v.toString())\n countDiffs(count, lKeys, rKeys)\n const lVal = JSON.stringify(lKeys)\n const rVal = JSON.stringify(rKeys)\n if (lVal === rVal) return\n return {\n lhs: lVal,\n rhs: rVal,\n }\n}\n\n/**\n * Compares two types and returns an object of non-matching entries\n * @param lType\n * @param rType\n * @param count change tracking\n */\nexport const compareTypes = (lType: IType, rType: IType, count: DiffCount) => {\n if (lType instanceof EnumType) {\n return compareEnumTypes(lType, rType, count)\n }\n\n if (lType instanceof ArrayType) {\n lType = lType.elementType\n }\n\n if (rType instanceof ArrayType) {\n rType = rType.elementType\n }\n\n if (lType.asHashString() === rType.asHashString()) return\n\n const diff: TypeDelta = {}\n countDiffs(\n count,\n Object.keys(lType.properties),\n Object.keys(rType.properties),\n (lKey, rKey) => {\n const comp = diffCompare(lKey, rKey)\n switch (comp) {\n case DiffCompare.LeftMissing: {\n diff[rKey] = {\n lhs: '',\n rhs: rType.properties[rKey].summary(),\n }\n break\n }\n case DiffCompare.RightMissing: {\n diff[lKey] = {\n lhs: lType.properties[lKey].summary(),\n rhs: '',\n }\n break\n }\n default: {\n const lhsVal = lType.properties[lKey]\n const rhsVal = rType.properties[rKey]\n const lhs = lhsVal.summary()\n const rhs = rhsVal.summary()\n if (lhs !== rhs) {\n count.changed++\n diff[lKey] = {\n lhs,\n rhs,\n }\n }\n }\n }\n return comp\n }\n )\n if (Object.keys(diff).length === 0) return\n return diff\n}\n\n/**\n * Compares the params of two methods and returns the signature of both methods\n * if non matching.\n * @param lMethod\n * @param rMethod\n * @param count change tracking\n */\nexport const compareParams = (\n lMethod: IMethod,\n rMethod: IMethod,\n count: DiffCount\n) => {\n const lParams = {}\n const rParams = {}\n lMethod.allParams.forEach((p) => (lParams[p.name] = p))\n rMethod.allParams.forEach((p) => (rParams[p.name] = p))\n // TODO typediff the matching body types?\n countDiffs(\n count,\n Object.keys(lParams),\n Object.keys(rParams),\n (lKey, rKey) => {\n const comp = diffCompare(lKey, rKey)\n if (comp === 0) {\n const lsh = lParams[lKey].signature()\n const rsh = rParams[rKey].signature()\n if (lsh !== rsh) {\n count.changed++\n }\n }\n return comp\n }\n )\n\n const lSignature = lMethod.signature()\n const rSignature = rMethod.signature()\n if (lSignature === rSignature) return\n\n return {\n lhs: lSignature,\n rhs: rSignature,\n }\n}\n\n/**\n * Compares the bodies of two methods and returns diffs if there are any\n * @param lMethod\n * @param rMethod\n * @param count change tracking\n */\nexport const compareBodies = (\n lMethod: IMethod,\n rMethod: IMethod,\n count: DiffCount\n) => {\n const lParams = {}\n const rParams = {}\n lMethod.bodyParams.forEach((p) => (lParams[p.name] = p))\n rMethod.bodyParams.forEach((p) => (rParams[p.name] = p))\n // TODO typediff the matching body types?\n countDiffs(count, Object.keys(lParams), Object.keys(rParams))\n\n const lSide = lMethod.bodyParams.map((p) => {\n return {\n name: p.name,\n type: p.type.fullName,\n required: p.required,\n }\n })\n const rSide = rMethod.bodyParams.map((p) => {\n return {\n name: p.name,\n type: p.type.fullName,\n required: p.required,\n }\n })\n\n if (JSON.stringify(lSide) === JSON.stringify(rSide)) return\n\n count.changed++\n return {\n lhs: lSide,\n rhs: rSide,\n }\n}\n\n/**\n * Compare two response lists, returning diff\n * @param lMethod\n * @param rMethod\n * @param count change tracking\n */\nexport const compareResponses = (\n lMethod: IMethod,\n rMethod: IMethod,\n count: DiffCount\n) => {\n // TODO deep type comparison? Probably diff all types instead\n const lSide = lMethod.responses.map((r) => {\n return {\n statusCode: r.statusCode,\n mediaType: r.mediaType,\n type: r.type.fullName,\n }\n })\n const rSide = rMethod.responses.map((r) => {\n return {\n statusCode: r.statusCode,\n mediaType: r.mediaType,\n type: r.type.fullName,\n }\n })\n if (JSON.stringify(lSide) === JSON.stringify(rSide)) return\n\n count.changed++\n return {\n lhs: lSide,\n rhs: rSide,\n }\n}\n\nexport const csvHeaderRow =\n 'method name,\"Op + URI\",left status,right status,typeDiff,paramDiff,bodyDiff,responseDiff,diffCount'\n\nexport const csvDiffRow = (diff: DiffRow) => {\n const diffCount = JSON.stringify(diff.diffCount).replace(/\"/g, `'`)\n return `\n${diff.name},${diff.id},${diff.lStatus},${diff.rStatus},${diff.typeDiff},${diff.paramsDiff},${diff.bodyDiff},${diff.responseDiff},\"${diffCount}\"`\n}\n\nexport const mdHeaderRow = `\n| method name | Op + URI | 3.1 | 4.0 | typeDiff | paramDiff | bodyDiff | responseDiff | diffCount |\n| ------------ | -------- | --- | --- | ------------ | --------- | -------- | ------------ | --------- |`\n\nexport const mdDiffRow = (diff: DiffRow) => `\n| ${diff.name} | ${diff.id} | ${diff.lStatus} | ${diff.rStatus} | ${\n diff.typeDiff\n} | ${diff.paramsDiff} | ${diff.bodyDiff} | ${\n diff.responseDiff\n} | ${JSON.stringify(diff.diffCount)} |`\n\nconst diffToString = (diff: any) => {\n if (!diff) return ''\n const result = JSON.stringify(diff, null, 2)\n if (result === '{}') return ''\n return `\"${result.replace(/\"/g, \"'\")}\"`\n}\n\nexport interface ComputeDiffInputs {\n lMethod?: IMethod\n rMethod?: IMethod\n}\n\nexport interface DiffRow {\n /** Method name */\n name: string\n /** Method operation and path */\n id: string\n /** Method status in both specs */\n lStatus: string\n rStatus: string\n /** Method type diff if any */\n typeDiff: string\n /** Method params diff if any */\n paramsDiff: string\n /** Body diff if any */\n bodyDiff: string\n /** Response diff if any */\n responseDiff: string\n /** Count of differences */\n diffCount: DiffCount\n}\n\n/**\n * Computes the diff of two methods\n * @param lMethod\n * @param rMethod\n */\nconst computeDiff = (lMethod?: IMethod, rMethod?: IMethod) => {\n if (!lMethod && !rMethod) throw new Error('At least one method is required.')\n\n const count = startCount()\n const countStatus = () => {\n if (!rMethod) {\n count.removed++\n } else if (!lMethod) {\n count.added++\n } else {\n if (lMethod.status !== rMethod.status) count.changed++\n }\n }\n\n let result: DiffRow\n countStatus()\n if (lMethod) {\n const typeDiff = rMethod\n ? diffToString(compareTypes(lMethod.type, rMethod.type, count))\n : ''\n const paramsDiff = rMethod\n ? diffToString(compareParams(lMethod, rMethod, count))\n : ''\n const bodyDiff = rMethod\n ? diffToString(compareBodies(lMethod, rMethod, count))\n : ''\n const responseDiff = rMethod\n ? diffToString(compareResponses(lMethod, rMethod, count))\n : ''\n result = {\n name: lMethod.name,\n id: lMethod.id,\n lStatus: lMethod.status,\n rStatus: rMethod ? rMethod.status : '',\n typeDiff,\n paramsDiff,\n bodyDiff,\n responseDiff,\n diffCount: count,\n }\n } else if (!lMethod && rMethod) {\n result = {\n name: rMethod.name,\n id: rMethod.id,\n lStatus: '',\n rStatus: rMethod.status,\n typeDiff: '',\n paramsDiff: '',\n bodyDiff: '',\n responseDiff: '',\n diffCount: count,\n }\n }\n\n return result!\n}\n\nexport type DiffFilter = (\n delta: DiffRow,\n lMethod?: IMethod,\n rMethod?: IMethod\n) => boolean\n\n/**\n * Include when:\n * - lMethod is missing\n * - rMethod is missing\n * - params differ\n * - types differ\n * @param delta\n * @param lMethod\n * @param rMethod\n */\nexport const includeDiffs: DiffFilter = (delta, lMethod, rMethod) =>\n !lMethod ||\n !rMethod! ||\n delta.lStatus !== delta.rStatus ||\n !!delta.paramsDiff ||\n !!delta.typeDiff ||\n !!delta.bodyDiff ||\n !!delta.responseDiff\n\n/**\n * Compares two specs and returns a diff object\n * @param lSpec left-side spec\n * @param rSpec right-side spec\n * @param include evaluates to true if the comparison should be included\n */\nexport const compareSpecs = (\n lSpec: IApiModel,\n rSpec: IApiModel,\n include: DiffFilter = includeDiffs\n) => {\n const specSort = (a: IMethod, b: IMethod) => a.id.localeCompare(b.id)\n\n const lMethods = Object.values(lSpec.methods).sort(specSort)\n const rMethods = Object.values(rSpec.methods).sort(specSort)\n\n const lLength = lMethods.length\n const rLength = rMethods.length\n let lIndex = 0\n let rIndex = 0\n const diff: DiffRow[] = []\n\n while (lIndex < lLength || rIndex < rLength) {\n let lMethod: IMethod | undefined = lMethods[lIndex]\n let rMethod: IMethod | undefined = rMethods[rIndex]\n\n if (!lMethod) {\n rIndex++\n } else if (!rMethod) {\n lIndex++\n } else if (lMethod.id < rMethod.id) {\n rMethod = undefined\n lIndex++\n } else if (rMethod.id < lMethod.id) {\n lMethod = undefined\n rIndex++\n } else {\n lIndex++\n rIndex++\n }\n\n const delta = computeDiff(lMethod, rMethod)\n if (include(delta, lMethod, rMethod)) {\n diff.push(delta)\n }\n }\n return diff\n}\n"],"mappings":"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"}
|