@looker/sdk-codegen 21.7.4 → 21.8.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.
Files changed (71) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/lib/codeGen.d.ts +1 -1
  3. package/lib/codeGen.js +28 -154
  4. package/lib/codeGen.js.map +1 -1
  5. package/lib/codeGenerators.js +0 -16
  6. package/lib/codeGenerators.js.map +1 -1
  7. package/lib/csharp.gen.js +3 -71
  8. package/lib/csharp.gen.js.map +1 -1
  9. package/lib/declarationInfo.js +0 -7
  10. package/lib/declarationInfo.js.map +1 -1
  11. package/lib/esm/codeGen.js +48 -157
  12. package/lib/esm/codeGen.js.map +1 -1
  13. package/lib/esm/codeGenerators.js +28 -20
  14. package/lib/esm/codeGenerators.js.map +1 -1
  15. package/lib/esm/csharp.gen.js +19 -75
  16. package/lib/esm/csharp.gen.js.map +1 -1
  17. package/lib/esm/declarationInfo.js +10 -7
  18. package/lib/esm/declarationInfo.js.map +1 -1
  19. package/lib/esm/exampleInfo.js +24 -23
  20. package/lib/esm/exampleInfo.js.map +1 -1
  21. package/lib/esm/go.gen.js +18 -92
  22. package/lib/esm/go.gen.js.map +1 -1
  23. package/lib/esm/index.js +148 -13
  24. package/lib/esm/index.js.map +1 -1
  25. package/lib/esm/kotlin.gen.js +23 -118
  26. package/lib/esm/kotlin.gen.js.map +1 -1
  27. package/lib/esm/pseudo.gen.js +14 -24
  28. package/lib/esm/pseudo.gen.js.map +1 -1
  29. package/lib/esm/python.gen.js +19 -138
  30. package/lib/esm/python.gen.js.map +1 -1
  31. package/lib/esm/sdkModels.js +100 -432
  32. package/lib/esm/sdkModels.js.map +1 -1
  33. package/lib/esm/specConverter.js +58 -88
  34. package/lib/esm/specConverter.js.map +1 -1
  35. package/lib/esm/specDiff.js +36 -51
  36. package/lib/esm/specDiff.js.map +1 -1
  37. package/lib/esm/swift.gen.js +25 -137
  38. package/lib/esm/swift.gen.js.map +1 -1
  39. package/lib/esm/testUtils/index.js +17 -0
  40. package/lib/esm/testUtils/index.js.map +1 -0
  41. package/lib/esm/testUtils/testUtils.js +66 -0
  42. package/lib/esm/testUtils/testUtils.js.map +1 -0
  43. package/lib/esm/typescript.gen.js +24 -125
  44. package/lib/esm/typescript.gen.js.map +1 -1
  45. package/lib/exampleInfo.js +1 -31
  46. package/lib/exampleInfo.js.map +1 -1
  47. package/lib/go.gen.js +3 -87
  48. package/lib/go.gen.js.map +1 -1
  49. package/lib/index.js +0 -26
  50. package/lib/index.js.map +1 -1
  51. package/lib/kotlin.gen.js +7 -113
  52. package/lib/kotlin.gen.js.map +1 -1
  53. package/lib/pseudo.gen.js +3 -24
  54. package/lib/pseudo.gen.js.map +1 -1
  55. package/lib/python.gen.js +3 -133
  56. package/lib/python.gen.js.map +1 -1
  57. package/lib/sdkModels.js +8 -438
  58. package/lib/sdkModels.js.map +1 -1
  59. package/lib/specConverter.js +6 -106
  60. package/lib/specConverter.js.map +1 -1
  61. package/lib/specDiff.js +1 -56
  62. package/lib/specDiff.js.map +1 -1
  63. package/lib/swift.gen.js +3 -128
  64. package/lib/swift.gen.js.map +1 -1
  65. package/lib/testUtils/index.js +0 -2
  66. package/lib/testUtils/index.js.map +1 -1
  67. package/lib/testUtils/testUtils.js +1 -17
  68. package/lib/testUtils/testUtils.js.map +1 -1
  69. package/lib/typescript.gen.js +5 -117
  70. package/lib/typescript.gen.js.map +1 -1
  71. 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.compareSpecs = exports.includeDiffs = exports.mdDiffRow = exports.mdHeaderRow = exports.csvDiffRow = exports.csvHeaderRow = exports.compareResponses = exports.compareBodies = exports.compareParams = exports.compareTypes = exports.compareEnumTypes = exports.countDiffs = exports.startCount = void 0;
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
8
  var DiffCompare;
11
-
12
9
  (function (DiffCompare) {
13
10
  DiffCompare[DiffCompare["RightMissing"] = -1] = "RightMissing";
14
11
  DiffCompare[DiffCompare["Equal"] = 0] = "Equal";
15
12
  DiffCompare[DiffCompare["LeftMissing"] = 1] = "LeftMissing";
16
13
  })(DiffCompare || (DiffCompare = {}));
17
-
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
@@ -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":["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"],"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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"}