@looker/sdk-codegen 21.7.3 → 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 +23 -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
@@ -1,38 +1,39 @@
1
- import { EnumType, ArrayType } from './sdkModels';
2
- var DiffCompare;
1
+ "use strict";
3
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;
4
9
  (function (DiffCompare) {
5
10
  DiffCompare[DiffCompare["RightMissing"] = -1] = "RightMissing";
6
11
  DiffCompare[DiffCompare["Equal"] = 0] = "Equal";
7
12
  DiffCompare[DiffCompare["LeftMissing"] = 1] = "LeftMissing";
8
13
  })(DiffCompare || (DiffCompare = {}));
9
-
10
- export var startCount = () => {
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
- export var compareEnumTypes = (lType, rType, count) => {
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
- export var compareTypes = (lType, rType, count) => {
76
- if (lType instanceof EnumType) {
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
- export var compareParams = (lMethod, rMethod, count) => {
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
- export var compareBodies = (lMethod, rMethod, count) => {
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
- export var compareResponses = (lMethod, rMethod, count) => {
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
- export var csvHeaderRow = 'method name,"Op + URI",left status,right status,typeDiff,paramDiff,bodyDiff,responseDiff,diffCount';
211
- export var csvDiffRow = diff => {
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
- export var mdHeaderRow = "\n| method name | Op + URI | 3.1 | 4.0 | typeDiff | paramDiff | bodyDiff | responseDiff | diffCount |\n| ------------ | -------- | --- | --- | ------------ | --------- | -------- | ------------ | --------- |";
216
- export 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), " |");
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
- export var includeDiffs = (delta, lMethod, rMethod) => !lMethod || !rMethod || delta.lStatus !== delta.rStatus || !!delta.paramsDiff || !!delta.typeDiff || !!delta.bodyDiff || !!delta.responseDiff;
276
- export var compareSpecs = function compareSpecs(lSpec, rSpec) {
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
@@ -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":["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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"}