@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/specDiff.js
CHANGED
|
@@ -3,18 +3,14 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
7
|
-
|
|
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;
|
|
8
7
|
var _sdkModels = require("./sdkModels");
|
|
9
|
-
|
|
10
|
-
var DiffCompare;
|
|
11
|
-
|
|
12
|
-
(function (DiffCompare) {
|
|
8
|
+
var DiffCompare = function (DiffCompare) {
|
|
13
9
|
DiffCompare[DiffCompare["RightMissing"] = -1] = "RightMissing";
|
|
14
10
|
DiffCompare[DiffCompare["Equal"] = 0] = "Equal";
|
|
15
11
|
DiffCompare[DiffCompare["LeftMissing"] = 1] = "LeftMissing";
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
return DiffCompare;
|
|
13
|
+
}(DiffCompare || {});
|
|
18
14
|
var startCount = () => {
|
|
19
15
|
return {
|
|
20
16
|
changed: 0,
|
|
@@ -22,27 +18,22 @@ var startCount = () => {
|
|
|
22
18
|
removed: 0
|
|
23
19
|
};
|
|
24
20
|
};
|
|
25
|
-
|
|
26
21
|
exports.startCount = startCount;
|
|
27
|
-
|
|
28
22
|
var diffCompare = (lKey, rKey) => {
|
|
29
23
|
if (lKey && rKey) return lKey.localeCompare(rKey);
|
|
30
24
|
if (lKey) return DiffCompare.RightMissing;
|
|
31
25
|
return DiffCompare.LeftMissing;
|
|
32
26
|
};
|
|
33
|
-
|
|
34
27
|
var countDiffs = function countDiffs(count, lKeys, rKeys) {
|
|
35
28
|
var comparer = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : diffCompare;
|
|
36
29
|
lKeys = lKeys.sort((a, b) => a.localeCompare(b));
|
|
37
30
|
rKeys = rKeys.sort((a, b) => a.localeCompare(b));
|
|
38
31
|
var l = 0;
|
|
39
32
|
var r = 0;
|
|
40
|
-
|
|
41
33
|
while (l < lKeys.length || r < rKeys.length) {
|
|
42
34
|
var lk = lKeys[l];
|
|
43
35
|
var rk = rKeys[r];
|
|
44
36
|
var comp = comparer(lk, rk);
|
|
45
|
-
|
|
46
37
|
switch (comp) {
|
|
47
38
|
case DiffCompare.LeftMissing:
|
|
48
39
|
{
|
|
@@ -50,14 +41,12 @@ var countDiffs = function countDiffs(count, lKeys, rKeys) {
|
|
|
50
41
|
r++;
|
|
51
42
|
break;
|
|
52
43
|
}
|
|
53
|
-
|
|
54
44
|
case DiffCompare.RightMissing:
|
|
55
45
|
{
|
|
56
46
|
count.removed++;
|
|
57
47
|
l++;
|
|
58
48
|
break;
|
|
59
49
|
}
|
|
60
|
-
|
|
61
50
|
default:
|
|
62
51
|
{
|
|
63
52
|
l++;
|
|
@@ -65,12 +54,9 @@ var countDiffs = function countDiffs(count, lKeys, rKeys) {
|
|
|
65
54
|
}
|
|
66
55
|
}
|
|
67
56
|
}
|
|
68
|
-
|
|
69
57
|
return count;
|
|
70
58
|
};
|
|
71
|
-
|
|
72
59
|
exports.countDiffs = countDiffs;
|
|
73
|
-
|
|
74
60
|
var compareEnumTypes = (lType, rType, count) => {
|
|
75
61
|
var lNum = lType;
|
|
76
62
|
var rNum = rType;
|
|
@@ -85,27 +71,21 @@ var compareEnumTypes = (lType, rType, count) => {
|
|
|
85
71
|
rhs: rVal
|
|
86
72
|
};
|
|
87
73
|
};
|
|
88
|
-
|
|
89
74
|
exports.compareEnumTypes = compareEnumTypes;
|
|
90
|
-
|
|
91
75
|
var compareTypes = (lType, rType, count) => {
|
|
92
76
|
if (lType instanceof _sdkModels.EnumType) {
|
|
93
77
|
return compareEnumTypes(lType, rType, count);
|
|
94
78
|
}
|
|
95
|
-
|
|
96
79
|
if (lType instanceof _sdkModels.ArrayType) {
|
|
97
80
|
lType = lType.elementType;
|
|
98
81
|
}
|
|
99
|
-
|
|
100
82
|
if (rType instanceof _sdkModels.ArrayType) {
|
|
101
83
|
rType = rType.elementType;
|
|
102
84
|
}
|
|
103
|
-
|
|
104
85
|
if (lType.asHashString() === rType.asHashString()) return;
|
|
105
86
|
var diff = {};
|
|
106
87
|
countDiffs(count, Object.keys(lType.properties), Object.keys(rType.properties), (lKey, rKey) => {
|
|
107
88
|
var comp = diffCompare(lKey, rKey);
|
|
108
|
-
|
|
109
89
|
switch (comp) {
|
|
110
90
|
case DiffCompare.LeftMissing:
|
|
111
91
|
{
|
|
@@ -115,7 +95,6 @@ var compareTypes = (lType, rType, count) => {
|
|
|
115
95
|
};
|
|
116
96
|
break;
|
|
117
97
|
}
|
|
118
|
-
|
|
119
98
|
case DiffCompare.RightMissing:
|
|
120
99
|
{
|
|
121
100
|
diff[lKey] = {
|
|
@@ -124,14 +103,12 @@ var compareTypes = (lType, rType, count) => {
|
|
|
124
103
|
};
|
|
125
104
|
break;
|
|
126
105
|
}
|
|
127
|
-
|
|
128
106
|
default:
|
|
129
107
|
{
|
|
130
108
|
var lhsVal = lType.properties[lKey];
|
|
131
109
|
var rhsVal = rType.properties[rKey];
|
|
132
110
|
var lhs = lhsVal.summary();
|
|
133
111
|
var rhs = rhsVal.summary();
|
|
134
|
-
|
|
135
112
|
if (lhs !== rhs) {
|
|
136
113
|
count.changed++;
|
|
137
114
|
diff[lKey] = {
|
|
@@ -141,15 +118,12 @@ var compareTypes = (lType, rType, count) => {
|
|
|
141
118
|
}
|
|
142
119
|
}
|
|
143
120
|
}
|
|
144
|
-
|
|
145
121
|
return comp;
|
|
146
122
|
});
|
|
147
123
|
if (Object.keys(diff).length === 0) return;
|
|
148
124
|
return diff;
|
|
149
125
|
};
|
|
150
|
-
|
|
151
126
|
exports.compareTypes = compareTypes;
|
|
152
|
-
|
|
153
127
|
var compareParams = (lMethod, rMethod, count) => {
|
|
154
128
|
var lParams = {};
|
|
155
129
|
var rParams = {};
|
|
@@ -157,16 +131,13 @@ var compareParams = (lMethod, rMethod, count) => {
|
|
|
157
131
|
rMethod.allParams.forEach(p => rParams[p.name] = p);
|
|
158
132
|
countDiffs(count, Object.keys(lParams), Object.keys(rParams), (lKey, rKey) => {
|
|
159
133
|
var comp = diffCompare(lKey, rKey);
|
|
160
|
-
|
|
161
134
|
if (comp === 0) {
|
|
162
135
|
var lsh = lParams[lKey].signature();
|
|
163
136
|
var rsh = rParams[rKey].signature();
|
|
164
|
-
|
|
165
137
|
if (lsh !== rsh) {
|
|
166
138
|
count.changed++;
|
|
167
139
|
}
|
|
168
140
|
}
|
|
169
|
-
|
|
170
141
|
return comp;
|
|
171
142
|
});
|
|
172
143
|
var lSignature = lMethod.signature();
|
|
@@ -177,9 +148,7 @@ var compareParams = (lMethod, rMethod, count) => {
|
|
|
177
148
|
rhs: rSignature
|
|
178
149
|
};
|
|
179
150
|
};
|
|
180
|
-
|
|
181
151
|
exports.compareParams = compareParams;
|
|
182
|
-
|
|
183
152
|
var compareBodies = (lMethod, rMethod, count) => {
|
|
184
153
|
var lParams = {};
|
|
185
154
|
var rParams = {};
|
|
@@ -207,9 +176,7 @@ var compareBodies = (lMethod, rMethod, count) => {
|
|
|
207
176
|
rhs: rSide
|
|
208
177
|
};
|
|
209
178
|
};
|
|
210
|
-
|
|
211
179
|
exports.compareBodies = compareBodies;
|
|
212
|
-
|
|
213
180
|
var compareResponses = (lMethod, rMethod, count) => {
|
|
214
181
|
var lSide = lMethod.responses.map(r => {
|
|
215
182
|
return {
|
|
@@ -232,35 +199,27 @@ var compareResponses = (lMethod, rMethod, count) => {
|
|
|
232
199
|
rhs: rSide
|
|
233
200
|
};
|
|
234
201
|
};
|
|
235
|
-
|
|
236
202
|
exports.compareResponses = compareResponses;
|
|
237
203
|
var csvHeaderRow = 'method name,"Op + URI",left status,right status,typeDiff,paramDiff,bodyDiff,responseDiff,diffCount';
|
|
238
204
|
exports.csvHeaderRow = csvHeaderRow;
|
|
239
|
-
|
|
240
205
|
var csvDiffRow = diff => {
|
|
241
206
|
var diffCount = JSON.stringify(diff.diffCount).replace(/"/g, "'");
|
|
242
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, "\"");
|
|
243
208
|
};
|
|
244
|
-
|
|
245
209
|
exports.csvDiffRow = csvDiffRow;
|
|
246
210
|
var mdHeaderRow = "\n| method name | Op + URI | 3.1 | 4.0 | typeDiff | paramDiff | bodyDiff | responseDiff | diffCount |\n| ------------ | -------- | --- | --- | ------------ | --------- | -------- | ------------ | --------- |";
|
|
247
211
|
exports.mdHeaderRow = mdHeaderRow;
|
|
248
|
-
|
|
249
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), " |");
|
|
250
|
-
|
|
251
213
|
exports.mdDiffRow = mdDiffRow;
|
|
252
|
-
|
|
253
214
|
var diffToString = diff => {
|
|
254
215
|
if (!diff) return '';
|
|
255
216
|
var result = JSON.stringify(diff, null, 2);
|
|
256
217
|
if (result === '{}') return '';
|
|
257
218
|
return "\"".concat(result.replace(/"/g, "'"), "\"");
|
|
258
219
|
};
|
|
259
|
-
|
|
260
220
|
var computeDiff = (lMethod, rMethod) => {
|
|
261
221
|
if (!lMethod && !rMethod) throw new Error('At least one method is required.');
|
|
262
222
|
var count = startCount();
|
|
263
|
-
|
|
264
223
|
var countStatus = () => {
|
|
265
224
|
if (!rMethod) {
|
|
266
225
|
count.removed++;
|
|
@@ -270,10 +229,8 @@ var computeDiff = (lMethod, rMethod) => {
|
|
|
270
229
|
if (lMethod.status !== rMethod.status) count.changed++;
|
|
271
230
|
}
|
|
272
231
|
};
|
|
273
|
-
|
|
274
232
|
var result;
|
|
275
233
|
countStatus();
|
|
276
|
-
|
|
277
234
|
if (lMethod) {
|
|
278
235
|
var typeDiff = rMethod ? diffToString(compareTypes(lMethod.type, rMethod.type, count)) : '';
|
|
279
236
|
var paramsDiff = rMethod ? diffToString(compareParams(lMethod, rMethod, count)) : '';
|
|
@@ -303,19 +260,13 @@ var computeDiff = (lMethod, rMethod) => {
|
|
|
303
260
|
diffCount: count
|
|
304
261
|
};
|
|
305
262
|
}
|
|
306
|
-
|
|
307
263
|
return result;
|
|
308
264
|
};
|
|
309
|
-
|
|
310
265
|
var includeDiffs = (delta, lMethod, rMethod) => !lMethod || !rMethod || delta.lStatus !== delta.rStatus || !!delta.paramsDiff || !!delta.typeDiff || !!delta.bodyDiff || !!delta.responseDiff;
|
|
311
|
-
|
|
312
266
|
exports.includeDiffs = includeDiffs;
|
|
313
|
-
|
|
314
267
|
var compareSpecs = function compareSpecs(lSpec, rSpec) {
|
|
315
268
|
var include = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : includeDiffs;
|
|
316
|
-
|
|
317
269
|
var specSort = (a, b) => a.id.localeCompare(b.id);
|
|
318
|
-
|
|
319
270
|
var lMethods = Object.values(lSpec.methods).sort(specSort);
|
|
320
271
|
var rMethods = Object.values(rSpec.methods).sort(specSort);
|
|
321
272
|
var lLength = lMethods.length;
|
|
@@ -323,11 +274,9 @@ var compareSpecs = function compareSpecs(lSpec, rSpec) {
|
|
|
323
274
|
var lIndex = 0;
|
|
324
275
|
var rIndex = 0;
|
|
325
276
|
var diff = [];
|
|
326
|
-
|
|
327
277
|
while (lIndex < lLength || rIndex < rLength) {
|
|
328
278
|
var _lMethod = lMethods[lIndex];
|
|
329
279
|
var _rMethod = rMethods[rIndex];
|
|
330
|
-
|
|
331
280
|
if (!_lMethod) {
|
|
332
281
|
rIndex++;
|
|
333
282
|
} else if (!_rMethod) {
|
|
@@ -342,16 +291,12 @@ var compareSpecs = function compareSpecs(lSpec, rSpec) {
|
|
|
342
291
|
lIndex++;
|
|
343
292
|
rIndex++;
|
|
344
293
|
}
|
|
345
|
-
|
|
346
294
|
var _delta = computeDiff(_lMethod, _rMethod);
|
|
347
|
-
|
|
348
295
|
if (include(_delta, _lMethod, _rMethod)) {
|
|
349
296
|
diff.push(_delta);
|
|
350
297
|
}
|
|
351
298
|
}
|
|
352
|
-
|
|
353
299
|
return diff;
|
|
354
300
|
};
|
|
355
|
-
|
|
356
301
|
exports.compareSpecs = compareSpecs;
|
|
357
302
|
//# sourceMappingURL=specDiff.js.map
|
package/lib/specDiff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/specDiff.ts"],"names":["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","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","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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"}
|