@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.
Files changed (71) hide show
  1. package/CHANGELOG.md +20 -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 +103 -435
  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 +39 -54
  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 +20 -450
  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 +4 -59
  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,52 +1,48 @@
1
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
2
-
3
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
4
-
5
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
-
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.upgradeSpecObject = exports.upgradeSpec = exports.swapXLookerTags = exports.swapRef = exports.structName = exports.openApiStyle = exports.loadSpecs = exports.isSwagger = exports.isOpenApi = exports.include31 = exports.getSpecsFromVersions = exports.getSpecLinks = exports.getLookerSpecs = exports.fixConversionObjects = exports.fixConversion = exports.defaultMimeFormats = exports.convertResponses = exports.convertPathsAndBodies = exports.convertParam = exports.convertOp = exports.convertDefs = void 0;
7
+ var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
8
+ var _sdkModels = require("./sdkModels");
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
11
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
12
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
13
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
14
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
7
15
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
8
-
9
16
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
10
-
11
- import isEmpty from 'lodash/isEmpty';
12
- import { ApiModel } from './sdkModels';
13
-
14
17
  var warn = warning => {
15
18
  throw new Error(warning);
16
19
  };
17
-
18
20
  var appJson = 'application/json';
19
- export var include31 = ver => {
21
+ var include31 = ver => {
20
22
  return ver.status && ver.version && ver.swagger_url && ver.status !== 'internal_test' && ver.status !== 'deprecated' && ver.status !== 'legacy' || /\b3.1\b/.test(ver.version || '');
21
23
  };
22
- export var getSpecsFromVersions = function () {
24
+ exports.include31 = include31;
25
+ var getSpecsFromVersions = function () {
23
26
  var _ref = _asyncToGenerator(function* (versions) {
24
27
  var fetcher = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
25
28
  var include = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : include31;
26
29
  var items = {};
27
-
28
30
  var uniqueId = v => {
29
31
  var _v$status;
30
-
31
32
  var specKey = v.version || 'api';
32
33
  var max = ((_v$status = v.status) === null || _v$status === void 0 ? void 0 : _v$status.length) || 0;
33
34
  var frag = 1;
34
-
35
35
  while (items[specKey]) {
36
36
  if (frag <= max) {
37
37
  var _v$status2;
38
-
39
38
  specKey = "".concat(v.version).concat((_v$status2 = v.status) === null || _v$status2 === void 0 ? void 0 : _v$status2.substr(0, frag));
40
39
  } else {
41
40
  specKey = "".concat(v.version).concat(v.status).concat(frag);
42
41
  }
43
-
44
42
  frag++;
45
43
  }
46
-
47
44
  return specKey;
48
45
  };
49
-
50
46
  if (versions.supported_versions) {
51
47
  for (var v of versions.supported_versions) {
52
48
  if (v.status && v.version && v.swagger_url) {
@@ -58,29 +54,27 @@ export var getSpecsFromVersions = function () {
58
54
  isDefault: v.status === 'current',
59
55
  specURL: v.swagger_url
60
56
  };
61
-
62
57
  if (fetcher) {
63
58
  _spec.api = yield fetcher(_spec);
64
59
  }
65
-
66
60
  items[_spec.key] = _spec;
67
61
  }
68
62
  }
69
63
  }
70
64
  }
71
-
72
65
  return items;
73
66
  });
74
-
75
67
  return function getSpecsFromVersions(_x) {
76
68
  return _ref.apply(this, arguments);
77
69
  };
78
70
  }();
79
- export var defaultMimeFormats = {
71
+ exports.getSpecsFromVersions = getSpecsFromVersions;
72
+ var defaultMimeFormats = {
80
73
  produces: [appJson],
81
74
  consumes: [appJson]
82
75
  };
83
- export var swapXLookerTags = spec => {
76
+ exports.defaultMimeFormats = defaultMimeFormats;
77
+ var swapXLookerTags = spec => {
84
78
  var swaps = [{
85
79
  pattern: /x-looker-nullable/gi,
86
80
  replacement: 'nullable'
@@ -96,32 +90,28 @@ export var swapXLookerTags = spec => {
96
90
  });
97
91
  return spec;
98
92
  };
99
- export var openApiStyle = collectionFormat => {
93
+ exports.swapXLookerTags = swapXLookerTags;
94
+ var openApiStyle = collectionFormat => {
100
95
  if (!collectionFormat) return undefined;
101
96
  var styles = {
102
97
  csv: 'simple',
103
98
  pipes: 'pipeDelimited',
104
99
  ssv: 'spaceDelimited'
105
100
  };
106
-
107
101
  if (collectionFormat in styles) {
108
102
  return styles[collectionFormat];
109
103
  }
110
-
111
104
  return undefined;
112
105
  };
113
-
106
+ exports.openApiStyle = openApiStyle;
114
107
  var findOpenApiParam = (api, endpoint, verb, name) => {
115
108
  var result = api.paths[endpoint][verb].parameters.find(p => p.name === name);
116
-
117
109
  if (!result) {
118
110
  warn("Missing parameter: ".concat(endpoint, " ").concat(verb, " parameter ").concat(name));
119
111
  }
120
-
121
112
  return result;
122
113
  };
123
-
124
- export var fixConversionObjects = (api, swagger) => {
114
+ var fixConversionObjects = (api, swagger) => {
125
115
  var paths = swagger.paths;
126
116
  var fixes = [];
127
117
  Object.entries(paths).forEach(_ref2 => {
@@ -130,41 +120,33 @@ export var fixConversionObjects = (api, swagger) => {
130
120
  var [httpMethod, method] = _ref3;
131
121
  var operation = method;
132
122
  var params = operation.parameters;
133
-
134
123
  if (params) {
135
124
  Object.entries(params).forEach(_ref4 => {
136
125
  var [, p] = _ref4;
137
126
  var param = p;
138
-
139
127
  if (param.name === 'body' && param.in === 'body') {
140
128
  if ('required' in param) {
141
129
  var required = param.required;
142
130
  var fix = "".concat(endpoint, "::").concat(operation.operationId, " setting requestBody.required to ").concat(required);
143
131
  var requestBody = api.paths[endpoint][httpMethod].requestBody;
144
-
145
132
  if (!requestBody) {
146
133
  warn("Failed to find \"requestBody\" in OAS for swagger \"body param\" fix: ".concat(fix));
147
134
  } else {
148
135
  if (requestBody.required !== required) {
149
136
  fixes.push(fix);
150
137
  }
151
-
152
138
  requestBody.required = required;
153
139
  }
154
140
  }
155
141
  }
156
-
157
142
  if (param.collectionFormat) {
158
143
  var format = param.collectionFormat;
159
144
  var style = openApiStyle(format);
160
-
161
145
  if (style === undefined) {
162
146
  warn("OAS style conversion failed: collectionFormat '".concat(param.collectionFormat, "' is unknown"));
163
147
  } else {
164
148
  var _fix = "".concat(endpoint, "::").concat(operation.operationId, " ").concat(param.name, " '").concat(format, "' -> '").concat(style, "'");
165
-
166
149
  var newParam = findOpenApiParam(api, endpoint, httpMethod, param.name);
167
-
168
150
  if (newParam && newParam.style !== style) {
169
151
  newParam.style = style;
170
152
  fixes.push(_fix);
@@ -180,53 +162,53 @@ export var fixConversionObjects = (api, swagger) => {
180
162
  spec: JSON.stringify(api)
181
163
  };
182
164
  };
183
- export var isSwagger = spec => spec.swagger !== undefined;
184
- export var isOpenApi = spec => spec.openapi !== undefined;
185
- export var fixConversion = (openApiSpec, swaggerSpec) => {
165
+ exports.fixConversionObjects = fixConversionObjects;
166
+ var isSwagger = spec => spec.swagger !== undefined;
167
+ exports.isSwagger = isSwagger;
168
+ var isOpenApi = spec => spec.openapi !== undefined;
169
+ exports.isOpenApi = isOpenApi;
170
+ var fixConversion = (openApiSpec, swaggerSpec) => {
186
171
  return fixConversionObjects(JSON.parse(openApiSpec), JSON.parse(swaggerSpec));
187
172
  };
188
- export var swapRef = ref => ref.replace(/#\/definitions\//g, '#/components/schemas/');
189
- export var structName = ref => {
173
+ exports.fixConversion = fixConversion;
174
+ var swapRef = ref => ref.replace(/#\/definitions\//g, '#/components/schemas/');
175
+ exports.swapRef = swapRef;
176
+ var structName = ref => {
190
177
  if (!ref) return undefined;
191
178
  var parts = ref.split('/');
192
179
  return parts[parts.length - 1];
193
180
  };
194
- export var convertParam = param => {
181
+ exports.structName = structName;
182
+ var convertParam = param => {
195
183
  var schema = {
196
184
  type: param.type
197
185
  };
198
-
199
186
  var result = _objectSpread({}, param);
200
-
201
187
  delete result.type;
202
-
203
188
  if (param.format) {
204
189
  schema.format = param.format;
205
190
  delete result.format;
206
191
  }
207
-
208
192
  if (param.collectionFormat) {
209
193
  result.style = openApiStyle(param.collectionFormat);
210
194
  delete result.collectionFormat;
211
195
  }
212
-
213
196
  if (param.items) {
214
197
  schema.items = param.items;
215
198
  result.explode = false;
216
199
  delete result.items;
217
200
  }
218
-
219
201
  result.schema = schema;
220
202
  return result;
221
203
  };
222
- export var convertResponses = function convertResponses(responses) {
204
+ exports.convertParam = convertParam;
205
+ var convertResponses = function convertResponses(responses) {
223
206
  var formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultMimeFormats;
224
207
  Object.entries(responses).forEach(_ref5 => {
225
208
  var [code, response] = _ref5;
226
209
  responses[code] = {
227
210
  description: response.description
228
211
  };
229
-
230
212
  if (response.schema) {
231
213
  var content = {};
232
214
  formats.produces.forEach(format => content[format] = {
@@ -237,46 +219,38 @@ export var convertResponses = function convertResponses(responses) {
237
219
  });
238
220
  return responses;
239
221
  };
240
- export var convertOp = function convertOp(op) {
222
+ exports.convertResponses = convertResponses;
223
+ var convertOp = function convertOp(op) {
241
224
  var formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultMimeFormats;
242
225
  var moveKeys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
243
-
244
226
  var moveKey = (key, value) => {
245
227
  if (!moveKeys || !(key in op)) return value;
246
228
  if (!value) value = op[key];
247
-
248
229
  if (value) {
249
230
  delete op[key];
250
231
  op[key] = value;
251
232
  }
252
-
253
233
  return value;
254
234
  };
255
-
256
235
  var {
257
236
  produces,
258
237
  consumes
259
238
  } = formats;
260
239
  var body = {};
261
-
262
240
  if (op.produces) {
263
241
  produces = op.produces;
264
242
  delete op.produces;
265
243
  }
266
-
267
244
  if (op.consumes) {
268
245
  consumes = op.consumes;
269
246
  delete op.consumes;
270
247
  }
271
-
272
248
  if (op.parameters) {
273
249
  var params = _objectSpread({}, op.parameters);
274
-
275
250
  op.parameters = [];
276
251
  Object.values(params).forEach(p => {
277
252
  if (p.in === 'body') {
278
253
  op.requestBody = {};
279
-
280
254
  if (p.schema) {
281
255
  op.requestBody.content = {
282
256
  [consumes[0]]: {
@@ -284,7 +258,6 @@ export var convertOp = function convertOp(op) {
284
258
  }
285
259
  };
286
260
  }
287
-
288
261
  op.requestBody.description = p.description;
289
262
  if ('required' in p) op.requestBody.required = p.required;
290
263
  } else {
@@ -293,19 +266,16 @@ export var convertOp = function convertOp(op) {
293
266
  });
294
267
  if (op.parameters.length === 0) delete op.parameters;
295
268
  }
296
-
297
269
  moveKey('responses', convertResponses(op.responses, {
298
270
  produces,
299
271
  consumes
300
272
  }));
301
273
  moveKey('deprecated');
302
274
  var xdep = 'x-looker-deprecated';
303
-
304
275
  if (xdep in op) {
305
276
  op.deprecated = op[xdep];
306
277
  delete op[xdep];
307
278
  }
308
-
309
279
  moveKey('x-looker-status');
310
280
  moveKey('x-looker-activity-type');
311
281
  moveKey('x-looker-rate-limited');
@@ -314,7 +284,8 @@ export var convertOp = function convertOp(op) {
314
284
  body
315
285
  };
316
286
  };
317
- export var convertPathsAndBodies = function convertPathsAndBodies(paths) {
287
+ exports.convertOp = convertOp;
288
+ var convertPathsAndBodies = function convertPathsAndBodies(paths) {
318
289
  var formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultMimeFormats;
319
290
  var result = {
320
291
  paths: {},
@@ -336,12 +307,12 @@ export var convertPathsAndBodies = function convertPathsAndBodies(paths) {
336
307
  });
337
308
  return result;
338
309
  };
339
- export var convertDefs = defs => {
310
+ exports.convertPathsAndBodies = convertPathsAndBodies;
311
+ var convertDefs = defs => {
340
312
  Object.entries(defs).forEach(_ref9 => {
341
313
  var [_, struct] = _ref9;
342
314
  Object.entries(struct.properties).forEach(_ref10 => {
343
315
  var [name, prop] = _ref10;
344
-
345
316
  if (prop.$ref) {
346
317
  struct.properties[name] = {
347
318
  $ref: prop.$ref
@@ -351,15 +322,14 @@ export var convertDefs = defs => {
351
322
  });
352
323
  return defs;
353
324
  };
354
- export var upgradeSpecObject = spec => {
325
+ exports.convertDefs = convertDefs;
326
+ var upgradeSpecObject = spec => {
355
327
  if (isOpenApi(spec)) {
356
328
  return JSON.parse(swapXLookerTags(JSON.stringify(spec)));
357
329
  }
358
-
359
330
  if (!isSwagger(spec)) {
360
331
  throw new Error('Input is not a Swagger or OpenAPI specification');
361
332
  }
362
-
363
333
  var cleanup = swapRef(swapXLookerTags(JSON.stringify(spec)));
364
334
  spec = JSON.parse(cleanup);
365
335
  var consumes = spec.consumes || [appJson];
@@ -388,25 +358,26 @@ export var upgradeSpecObject = spec => {
388
358
  };
389
359
  return api;
390
360
  };
391
- export var upgradeSpec = spec => {
361
+ exports.upgradeSpecObject = upgradeSpecObject;
362
+ var upgradeSpec = spec => {
392
363
  if (typeof spec === 'string') spec = JSON.parse(spec);
393
364
  return JSON.stringify(upgradeSpecObject(spec));
394
365
  };
395
- export var getLookerSpecs = function () {
366
+ exports.upgradeSpec = upgradeSpec;
367
+ var getLookerSpecs = function () {
396
368
  var _ref11 = _asyncToGenerator(function* (sdk, serverUrl) {
397
369
  var versionUrl = "".concat(serverUrl, "/versions");
398
370
  var versions = yield sdk.ok(sdk.get(versionUrl));
399
371
  return versions;
400
372
  });
401
-
402
373
  return function getLookerSpecs(_x2, _x3) {
403
374
  return _ref11.apply(this, arguments);
404
375
  };
405
376
  }();
406
- export var getSpecLinks = function getSpecLinks(versions) {
377
+ exports.getLookerSpecs = getLookerSpecs;
378
+ var getSpecLinks = function getSpecLinks(versions) {
407
379
  var include = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : spec => spec.version > '2.99';
408
380
  var prefix = "Release ".concat(versions.looker_release_version, " API ");
409
-
410
381
  var deriveSpec = spec => {
411
382
  var status = spec.swagger_url === versions.current_version.swagger_url ? 'current' : spec.status;
412
383
  return {
@@ -417,25 +388,24 @@ export var getSpecLinks = function getSpecLinks(versions) {
417
388
  api: {}
418
389
  };
419
390
  };
420
-
421
391
  var specs = versions.supported_versions.filter(v => include(v)).map(v => deriveSpec(v));
422
392
  return specs;
423
393
  };
424
- export var loadSpecs = function () {
394
+ exports.getSpecLinks = getSpecLinks;
395
+ var loadSpecs = function () {
425
396
  var _ref12 = _asyncToGenerator(function* (sdk, links) {
426
397
  for (var _spec2 of links) {
427
- if (isEmpty(_spec2.api)) {
398
+ if ((0, _isEmpty.default)(_spec2.api)) {
428
399
  var content = yield sdk.ok(sdk.get(_spec2.url));
429
400
  var json = typeof content === 'string' ? JSON.parse(content) : content;
430
- _spec2.api = ApiModel.fromJson(upgradeSpecObject(json));
401
+ _spec2.api = _sdkModels.ApiModel.fromJson(upgradeSpecObject(json));
431
402
  }
432
403
  }
433
-
434
404
  return links;
435
405
  });
436
-
437
406
  return function loadSpecs(_x4, _x5) {
438
407
  return _ref12.apply(this, arguments);
439
408
  };
440
409
  }();
410
+ exports.loadSpecs = loadSpecs;
441
411
  //# sourceMappingURL=specConverter.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/specConverter.ts"],"names":["isEmpty","ApiModel","warn","warning","Error","appJson","include31","ver","status","version","swagger_url","test","getSpecsFromVersions","versions","fetcher","undefined","include","items","uniqueId","v","specKey","max","length","frag","substr","supported_versions","spec","key","isDefault","specURL","api","defaultMimeFormats","produces","consumes","swapXLookerTags","swaps","pattern","replacement","forEach","swap","replace","openApiStyle","collectionFormat","styles","csv","pipes","ssv","findOpenApiParam","endpoint","verb","name","result","paths","parameters","find","p","fixConversionObjects","swagger","fixes","Object","entries","op","httpMethod","method","operation","params","param","in","required","fix","operationId","requestBody","push","format","style","newParam","JSON","stringify","isSwagger","isOpenApi","openapi","fixConversion","openApiSpec","swaggerSpec","parse","swapRef","ref","structName","parts","split","convertParam","schema","type","explode","convertResponses","responses","formats","code","response","description","content","convertOp","moveKeys","moveKey","value","body","values","xdep","deprecated","convertPathsAndBodies","requestBodies","path","entry","ep","convertDefs","defs","_","struct","properties","prop","$ref","upgradeSpecObject","cleanup","schemas","definitions","info","tags","servers","url","schemes","host","basePath","components","upgradeSpec","getLookerSpecs","sdk","serverUrl","versionUrl","ok","get","getSpecLinks","prefix","looker_release_version","deriveSpec","current_version","specs","filter","map","loadSpecs","links","json","fromJson"],"mappings":";;;;;;;;;;AA0BA,OAAOA,OAAP,MAAoB,gBAApB;AAGA,SAASC,QAAT,QAAyB,aAAzB;;AAEA,IAAMC,IAAI,GAAIC,OAAD,IAAqB;AAChC,QAAM,IAAIC,KAAJ,CAAUD,OAAV,CAAN;AACD,CAFD;;AAIA,IAAME,OAAO,GAAG,kBAAhB;AAsGA,OAAO,IAAMC,SAAS,GAAIC,GAAD,IAA6B;AACpD,SACGA,GAAG,CAACC,MAAJ,IACCD,GAAG,CAACE,OADL,IAECF,GAAG,CAACG,WAFL,IAGCH,GAAG,CAACC,MAAJ,KAAe,eAHhB,IAICD,GAAG,CAACC,MAAJ,KAAe,YAJhB,IAKCD,GAAG,CAACC,MAAJ,KAAe,QALjB,IAMA,UAAUG,IAAV,CAAeJ,GAAG,CAACE,OAAJ,IAAe,EAA9B,CAPF;AASD,CAVM;AAkBP,OAAO,IAAMG,oBAAoB;AAAA,+BAAG,WAClCC,QADkC,EAIZ;AAAA,QAFtBC,OAEsB,uEAFaC,SAEb;AAAA,QADtBC,OACsB,uEADIV,SACJ;AACtB,QAAMW,KAAK,GAAG,EAAd;;AAMA,QAAMC,QAAQ,GAAIC,CAAD,IAA2B;AAAA;;AAC1C,UAAIC,OAAO,GAAGD,CAAC,CAACV,OAAF,IAAa,KAA3B;AACA,UAAMY,GAAG,GAAG,cAAAF,CAAC,CAACX,MAAF,wDAAUc,MAAV,KAAoB,CAAhC;AACA,UAAIC,IAAI,GAAG,CAAX;;AACA,aAAON,KAAK,CAACG,OAAD,CAAZ,EAAuB;AACrB,YAAIG,IAAI,IAAIF,GAAZ,EAAiB;AAAA;;AAEfD,UAAAA,OAAO,aAAMD,CAAC,CAACV,OAAR,uBAAkBU,CAAC,CAACX,MAApB,+CAAkB,WAAUgB,MAAV,CAAiB,CAAjB,EAAoBD,IAApB,CAAlB,CAAP;AACD,SAHD,MAGO;AACLH,UAAAA,OAAO,aAAMD,CAAC,CAACV,OAAR,SAAkBU,CAAC,CAACX,MAApB,SAA6Be,IAA7B,CAAP;AACD;;AACDA,QAAAA,IAAI;AACL;;AACD,aAAOH,OAAP;AACD,KAdD;;AAgBA,QAAIP,QAAQ,CAACY,kBAAb,EAAiC;AAC/B,WAAK,IAAMN,CAAX,IAAgBN,QAAQ,CAACY,kBAAzB,EAA6C;AAE3C,YAAIN,CAAC,CAACX,MAAF,IAAYW,CAAC,CAACV,OAAd,IAAyBU,CAAC,CAACT,WAA/B,EAA4C;AAC1C,cAAIM,OAAO,CAACG,CAAD,CAAX,EAAgB;AACd,gBAAMO,KAAc,GAAG;AACrBC,cAAAA,GAAG,EAAET,QAAQ,CAACC,CAAD,CADQ;AAErBX,cAAAA,MAAM,EAAEW,CAAC,CAACX,MAFW;AAGrBC,cAAAA,OAAO,EAAEU,CAAC,CAACV,OAHU;AAIrBmB,cAAAA,SAAS,EAAET,CAAC,CAACX,MAAF,KAAa,SAJH;AAKrBqB,cAAAA,OAAO,EAAEV,CAAC,CAACT;AALU,aAAvB;;AAOA,gBAAII,OAAJ,EAAa;AACXY,cAAAA,KAAI,CAACI,GAAL,SAAiBhB,OAAO,CAACY,KAAD,CAAxB;AACD;;AACDT,YAAAA,KAAK,CAACS,KAAI,CAACC,GAAN,CAAL,GAAkBD,KAAlB;AACD;AACF;AACF;AACF;;AACD,WAAOT,KAAP;AACD,GAhDgC;;AAAA,kBAApBL,oBAAoB;AAAA;AAAA;AAAA,GAA1B;AA0FP,OAAO,IAAMmB,kBAA+B,GAAG;AAC7CC,EAAAA,QAAQ,EAAE,CAAC3B,OAAD,CADmC;AAE7C4B,EAAAA,QAAQ,EAAE,CAAC5B,OAAD;AAFmC,CAAxC;AAsBP,OAAO,IAAM6B,eAAe,GAAIR,IAAD,IAAkB;AAC/C,MAAMS,KAAK,GAAG,CACZ;AAAEC,IAAAA,OAAO,EAAE,qBAAX;AAAkCC,IAAAA,WAAW,EAAE;AAA/C,GADY,EAEZ;AAAED,IAAAA,OAAO,EAAE,mBAAX;AAAgCC,IAAAA,WAAW,EAAE;AAA7C,GAFY,EAGZ;AAAED,IAAAA,OAAO,EAAE,uBAAX;AAAoCC,IAAAA,WAAW,EAAE;AAAjD,GAHY,CAAd;AAKAF,EAAAA,KAAK,CAACG,OAAN,CAAeC,IAAD,IAAU;AACtBb,IAAAA,IAAI,GAAGA,IAAI,CAACc,OAAL,CAAaD,IAAI,CAACH,OAAlB,EAA2BG,IAAI,CAACF,WAAhC,CAAP;AACD,GAFD;AAGA,SAAOX,IAAP;AACD,CAVM;AAqBP,OAAO,IAAMe,YAAY,GACvBC,gBAD0B,IAEA;AAC1B,MAAI,CAACA,gBAAL,EAAuB,OAAO3B,SAAP;AACvB,MAAM4B,MAAgD,GAAG;AACvDC,IAAAA,GAAG,EAAE,QADkD;AAEvDC,IAAAA,KAAK,EAAE,eAFgD;AAGvDC,IAAAA,GAAG,EAAE;AAHkD,GAAzD;;AAKA,MAAIJ,gBAAgB,IAAIC,MAAxB,EAAgC;AAC9B,WAAOA,MAAM,CAACD,gBAAD,CAAb;AACD;;AACD,SAAO3B,SAAP;AACD,CAbM;;AAuBP,IAAMgC,gBAAgB,GAAG,CACvBjB,GADuB,EAEvBkB,QAFuB,EAGvBC,IAHuB,EAIvBC,IAJuB,KAKpB;AACH,MAAMC,MAAM,GAAGrB,GAAG,CAACsB,KAAJ,CAAUJ,QAAV,EAAoBC,IAApB,EAA0BI,UAA1B,CAAqCC,IAArC,CACZC,CAAD,IAAyBA,CAAC,CAACL,IAAF,KAAWA,IADvB,CAAf;;AAGA,MAAI,CAACC,MAAL,EAAa;AACXjD,IAAAA,IAAI,8BAAuB8C,QAAvB,cAAmCC,IAAnC,wBAAqDC,IAArD,EAAJ;AACD;;AACD,SAAOC,MAAP;AACD,CAbD;;AA6BA,OAAO,IAAMK,oBAAoB,GAAG,CAAC1B,GAAD,EAAW2B,OAAX,KAA4B;AAC9D,MAAML,KAAK,GAAGK,OAAO,CAACL,KAAtB;AACA,MAAMM,KAAe,GAAG,EAAxB;AACAC,EAAAA,MAAM,CAACC,OAAP,CAAeR,KAAf,EAAsBd,OAAtB,CAA8B,SAAoB;AAAA,QAAnB,CAACU,QAAD,EAAWa,EAAX,CAAmB;AAChDF,IAAAA,MAAM,CAACC,OAAP,CAAeC,EAAf,EAA0BvB,OAA1B,CAAkC,SAA0B;AAAA,UAAzB,CAACwB,UAAD,EAAaC,MAAb,CAAyB;AAC1D,UAAMC,SAAS,GAAGD,MAAlB;AACA,UAAME,MAAM,GAAGD,SAAS,CAACX,UAAzB;;AACA,UAAIY,MAAJ,EAAY;AACVN,QAAAA,MAAM,CAACC,OAAP,CAAeK,MAAf,EAAuB3B,OAAvB,CAA+B,SAAW;AAAA,cAAV,GAAGiB,CAAH,CAAU;AACxC,cAAMW,KAAK,GAAGX,CAAd;;AACA,cAAIW,KAAK,CAAChB,IAAN,KAAe,MAAf,IAAyBgB,KAAK,CAACC,EAAN,KAAa,MAA1C,EAAkD;AAEhD,gBAAI,cAAcD,KAAlB,EAAyB;AAEvB,kBAAME,QAAQ,GAAGF,KAAK,CAACE,QAAvB;AACA,kBAAMC,GAAG,aAAMrB,QAAN,eAAmBgB,SAAS,CAACM,WAA7B,8CAA4EF,QAA5E,CAAT;AACA,kBAAMG,WAAW,GAAGzC,GAAG,CAACsB,KAAJ,CAAUJ,QAAV,EAAoBc,UAApB,EAAgCS,WAApD;;AACA,kBAAI,CAACA,WAAL,EAAkB;AAChBrE,gBAAAA,IAAI,iFACmEmE,GADnE,EAAJ;AAGD,eAJD,MAIO;AACL,oBAAIE,WAAW,CAACH,QAAZ,KAAyBA,QAA7B,EAAuC;AACrCV,kBAAAA,KAAK,CAACc,IAAN,CAAWH,GAAX;AACD;;AACDE,gBAAAA,WAAW,CAACH,QAAZ,GAAuBA,QAAvB;AACD;AACF;AACF;;AAED,cAAIF,KAAK,CAACxB,gBAAV,EAA4B;AAE1B,gBAAM+B,MAAM,GAAGP,KAAK,CAACxB,gBAArB;AACA,gBAAMgC,KAAK,GAAGjC,YAAY,CAACgC,MAAD,CAA1B;;AACA,gBAAIC,KAAK,KAAK3D,SAAd,EAAyB;AACvBb,cAAAA,IAAI,0DACgDgE,KAAK,CAACxB,gBADtD,kBAAJ;AAGD,aAJD,MAIO;AACL,kBAAM2B,IAAG,aAAMrB,QAAN,eAAmBgB,SAAS,CAACM,WAA7B,cAA4CJ,KAAK,CAAChB,IAAlD,eAA2DuB,MAA3D,mBAA0EC,KAA1E,MAAT;;AACA,kBAAMC,QAAQ,GAAG5B,gBAAgB,CAC/BjB,GAD+B,EAE/BkB,QAF+B,EAG/Bc,UAH+B,EAI/BI,KAAK,CAAChB,IAJyB,CAAjC;;AAMA,kBAAIyB,QAAQ,IAAIA,QAAQ,CAACD,KAAT,KAAmBA,KAAnC,EAA0C;AACxCC,gBAAAA,QAAQ,CAACD,KAAT,GAAiBA,KAAjB;AACAhB,gBAAAA,KAAK,CAACc,IAAN,CAAWH,IAAX;AACD;AACF;AACF;AACF,SA5CD;AA6CD;AACF,KAlDD;AAmDD,GApDD;AAsDA,SAAO;AAAEX,IAAAA,KAAF;AAAShC,IAAAA,IAAI,EAAEkD,IAAI,CAACC,SAAL,CAAe/C,GAAf;AAAf,GAAP;AACD,CA1DM;AAgEP,OAAO,IAAMgD,SAAS,GAAIpD,IAAD,IAAeA,IAAI,CAAC+B,OAAL,KAAiB1C,SAAlD;AAMP,OAAO,IAAMgE,SAAS,GAAIrD,IAAD,IAAeA,IAAI,CAACsD,OAAL,KAAiBjE,SAAlD;AAYP,OAAO,IAAMkE,aAAa,GAAG,CAC3BC,WAD2B,EAE3BC,WAF2B,KAGJ;AACvB,SAAO3B,oBAAoB,CAACoB,IAAI,CAACQ,KAAL,CAAWF,WAAX,CAAD,EAA0BN,IAAI,CAACQ,KAAL,CAAWD,WAAX,CAA1B,CAA3B;AACD,CALM;AAaP,OAAO,IAAME,OAAO,GAAIC,GAAD,IACrBA,GAAG,CAAC9C,OAAJ,CAAY,mBAAZ,EAAiC,uBAAjC,CADK;AAOP,OAAO,IAAM+C,UAAU,GAAID,GAAD,IAAiB;AACzC,MAAI,CAACA,GAAL,EAAU,OAAOvE,SAAP;AACV,MAAMyE,KAAK,GAAGF,GAAG,CAACG,KAAJ,CAAU,GAAV,CAAd;AACA,SAAOD,KAAK,CAACA,KAAK,CAAClE,MAAN,GAAe,CAAhB,CAAZ;AACD,CAJM;AAWP,OAAO,IAAMoE,YAAY,GAAIxB,KAAD,IAAgB;AAC1C,MAAMyB,MAAW,GAAG;AAAEC,IAAAA,IAAI,EAAE1B,KAAK,CAAC0B;AAAd,GAApB;;AACA,MAAMzC,MAAM,qBAAQe,KAAR,CAAZ;;AACA,SAAOf,MAAM,CAACyC,IAAd;;AACA,MAAI1B,KAAK,CAACO,MAAV,EAAkB;AAChBkB,IAAAA,MAAM,CAAClB,MAAP,GAAgBP,KAAK,CAACO,MAAtB;AACA,WAAOtB,MAAM,CAACsB,MAAd;AACD;;AACD,MAAIP,KAAK,CAACxB,gBAAV,EAA4B;AAC1BS,IAAAA,MAAM,CAACuB,KAAP,GAAejC,YAAY,CAACyB,KAAK,CAACxB,gBAAP,CAA3B;AACA,WAAOS,MAAM,CAACT,gBAAd;AACD;;AACD,MAAIwB,KAAK,CAACjD,KAAV,EAAiB;AACf0E,IAAAA,MAAM,CAAC1E,KAAP,GAAeiD,KAAK,CAACjD,KAArB;AACAkC,IAAAA,MAAM,CAAC0C,OAAP,GAAiB,KAAjB;AACA,WAAO1C,MAAM,CAAClC,KAAd;AACD;;AACDkC,EAAAA,MAAM,CAACwC,MAAP,GAAgBA,MAAhB;AACA,SAAOxC,MAAP;AACD,CAnBM;AA0BP,OAAO,IAAM2C,gBAAgB,GAAG,SAAnBA,gBAAmB,CAC9BC,SAD8B,EAG3B;AAAA,MADHC,OACG,uEADOjE,kBACP;AACH4B,EAAAA,MAAM,CAACC,OAAP,CAAemC,SAAf,EAA0BzD,OAA1B,CAAkC,SAAsB;AAAA,QAArB,CAAC2D,IAAD,EAAOC,QAAP,CAAqB;AACtDH,IAAAA,SAAS,CAACE,IAAD,CAAT,GAAkB;AAChBE,MAAAA,WAAW,EAAED,QAAQ,CAACC;AADN,KAAlB;;AAGA,QAAID,QAAQ,CAACP,MAAb,EAAqB;AACnB,UAAMS,OAAO,GAAG,EAAhB;AACAJ,MAAAA,OAAO,CAAChE,QAAR,CAAiBM,OAAjB,CACGmC,MAAD,IAAa2B,OAAO,CAAC3B,MAAD,CAAP,GAAkB;AAAEkB,QAAAA,MAAM,EAAEO,QAAQ,CAACP;AAAnB,OADjC;AAGAI,MAAAA,SAAS,CAACE,IAAD,CAAT,CAAgBG,OAAhB,GAA0BA,OAA1B;AACD;AACF,GAXD;AAYA,SAAOL,SAAP;AACD,CAjBM;AA0BP,OAAO,IAAMM,SAAS,GAAG,SAAZA,SAAY,CACvBxC,EADuB,EAIpB;AAAA,MAFHmC,OAEG,uEAFOjE,kBAEP;AAAA,MADHuE,QACG,uEADQ,KACR;;AAEH,MAAMC,OAAO,GAAG,CAAC5E,GAAD,EAAc6E,KAAd,KAA8B;AAC5C,QAAI,CAACF,QAAD,IAAa,EAAE3E,GAAG,IAAIkC,EAAT,CAAjB,EAA+B,OAAO2C,KAAP;AAC/B,QAAI,CAACA,KAAL,EAAYA,KAAK,GAAG3C,EAAE,CAAClC,GAAD,CAAV;;AACZ,QAAI6E,KAAJ,EAAW;AACT,aAAO3C,EAAE,CAAClC,GAAD,CAAT;AACAkC,MAAAA,EAAE,CAAClC,GAAD,CAAF,GAAU6E,KAAV;AACD;;AACD,WAAOA,KAAP;AACD,GARD;;AAUA,MAAI;AAAExE,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,MAAyB+D,OAA7B;AACA,MAAMS,IAAI,GAAG,EAAb;;AACA,MAAI5C,EAAE,CAAC7B,QAAP,EAAiB;AACfA,IAAAA,QAAQ,GAAG6B,EAAE,CAAC7B,QAAd;AACA,WAAO6B,EAAE,CAAC7B,QAAV;AACD;;AACD,MAAI6B,EAAE,CAAC5B,QAAP,EAAiB;AACfA,IAAAA,QAAQ,GAAG4B,EAAE,CAAC5B,QAAd;AACA,WAAO4B,EAAE,CAAC5B,QAAV;AACD;;AACD,MAAI4B,EAAE,CAACR,UAAP,EAAmB;AAEjB,QAAMY,MAAM,qBAAQJ,EAAE,CAACR,UAAX,CAAZ;;AACAQ,IAAAA,EAAE,CAACR,UAAH,GAAgB,EAAhB;AACAM,IAAAA,MAAM,CAAC+C,MAAP,CAAczC,MAAd,EAAsB3B,OAAtB,CAA+BiB,CAAD,IAAY;AACxC,UAAIA,CAAC,CAACY,EAAF,KAAS,MAAb,EAAqB;AAEnBN,QAAAA,EAAE,CAACU,WAAH,GAAiB,EAAjB;;AAIA,YAAIhB,CAAC,CAACoC,MAAN,EAAc;AACZ9B,UAAAA,EAAE,CAACU,WAAH,CAAe6B,OAAf,GAAyB;AAAE,aAACnE,QAAQ,CAAC,CAAD,CAAT,GAAe;AAAE0D,cAAAA,MAAM,EAAEpC,CAAC,CAACoC;AAAZ;AAAjB,WAAzB;AACD;;AACD9B,QAAAA,EAAE,CAACU,WAAH,CAAe4B,WAAf,GAA6B5C,CAAC,CAAC4C,WAA/B;AACA,YAAI,cAAc5C,CAAlB,EAAqBM,EAAE,CAACU,WAAH,CAAeH,QAAf,GAA0Bb,CAAC,CAACa,QAA5B;AAKtB,OAfD,MAeO;AACLP,QAAAA,EAAE,CAACR,UAAH,CAAcmB,IAAd,CAAmBkB,YAAY,CAACnC,CAAD,CAA/B;AACD;AACF,KAnBD;AAoBA,QAAIM,EAAE,CAACR,UAAH,CAAc/B,MAAd,KAAyB,CAA7B,EAAgC,OAAOuC,EAAE,CAACR,UAAV;AACjC;;AACDkD,EAAAA,OAAO,CAAC,WAAD,EAAcT,gBAAgB,CAACjC,EAAE,CAACkC,SAAJ,EAAe;AAAE/D,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,GAAf,CAA9B,CAAP;AACAsE,EAAAA,OAAO,CAAC,YAAD,CAAP;AACA,MAAMI,IAAI,GAAG,qBAAb;;AACA,MAAIA,IAAI,IAAI9C,EAAZ,EAAgB;AACdA,IAAAA,EAAE,CAAC+C,UAAH,GAAgB/C,EAAE,CAAC8C,IAAD,CAAlB;AACA,WAAO9C,EAAE,CAAC8C,IAAD,CAAT;AACD;;AACDJ,EAAAA,OAAO,CAAC,iBAAD,CAAP;AACAA,EAAAA,OAAO,CAAC,wBAAD,CAAP;AACAA,EAAAA,OAAO,CAAC,uBAAD,CAAP;AACA,SAAO;AAAE1C,IAAAA,EAAF;AAAM4C,IAAAA;AAAN,GAAP;AACD,CA/DM;AAsEP,OAAO,IAAMI,qBAAqB,GAAG,SAAxBA,qBAAwB,CACnCzD,KADmC,EAGhC;AAAA,MADH4C,OACG,uEADOjE,kBACP;AACH,MAAMoB,MAAM,GAAG;AAAEC,IAAAA,KAAK,EAAE,EAAT;AAAa0D,IAAAA,aAAa,EAAE;AAA5B,GAAf;AACAnD,EAAAA,MAAM,CAACC,OAAP,CAAeR,KAAf,EAAsBd,OAAtB,CAA8B,SAAmB;AAAA,QAAlB,CAACyE,IAAD,EAAOC,KAAP,CAAkB;AAC/C7D,IAAAA,MAAM,CAACC,KAAP,CAAa2D,IAAb,IAAqB,EAArB;AAEA,QAAM/D,QAAmB,GAAGgE,KAA5B;AACArD,IAAAA,MAAM,CAACC,OAAP,CAAeZ,QAAf,EAAyBV,OAAzB,CAAiC,SAAgB;AAAA,UAAf,CAACW,IAAD,EAAOY,EAAP,CAAe;AAC/C,UAAMoD,EAAE,GAAGZ,SAAS,CAACxC,EAAD,EAAKmC,OAAL,CAApB;AACA7C,MAAAA,MAAM,CAACC,KAAP,CAAa2D,IAAb,EAAmB9D,IAAnB,IAA2BgE,EAAE,CAACpD,EAA9B;AACAF,MAAAA,MAAM,CAACC,OAAP,CAAeqD,EAAE,CAACR,IAAlB,EAAqCnE,OAArC,CAA6C,SAAkB;AAAA,YAAjB,CAACY,IAAD,EAAOuD,IAAP,CAAiB;AAC7DtD,QAAAA,MAAM,CAAC2D,aAAP,CAAqB5D,IAArB,IAA6BuD,IAA7B;AACD,OAFD;AAGD,KAND;AAOD,GAXD;AAYA,SAAOtD,MAAP;AACD,CAlBM;AAwBP,OAAO,IAAM+D,WAAW,GAAIC,IAAD,IAAgC;AACzDxD,EAAAA,MAAM,CAACC,OAAP,CAAeuD,IAAf,EAAqB7E,OAArB,CAA6B,SAAiB;AAAA,QAAhB,CAAC8E,CAAD,EAAIC,MAAJ,CAAgB;AAC5C1D,IAAAA,MAAM,CAACC,OAAP,CAAeyD,MAAM,CAACC,UAAtB,EAA+ChF,OAA/C,CAAuD,UAAkB;AAAA,UAAjB,CAACY,IAAD,EAAOqE,IAAP,CAAiB;;AACvE,UAAIA,IAAI,CAACC,IAAT,EAAe;AAEbH,QAAAA,MAAM,CAACC,UAAP,CAAkBpE,IAAlB,IAA0B;AAAEsE,UAAAA,IAAI,EAAED,IAAI,CAACC;AAAb,SAA1B;AACD;AACF,KALD;AAMD,GAPD;AAQA,SAAOL,IAAP;AACD,CAVM;AAiBP,OAAO,IAAMM,iBAAiB,GAAI/F,IAAD,IAAe;AAC9C,MAAIqD,SAAS,CAACrD,IAAD,CAAb,EAAqB;AACnB,WAAOkD,IAAI,CAACQ,KAAL,CAAWlD,eAAe,CAAC0C,IAAI,CAACC,SAAL,CAAenD,IAAf,CAAD,CAA1B,CAAP;AACD;;AACD,MAAI,CAACoD,SAAS,CAACpD,IAAD,CAAd,EAAsB;AACpB,UAAM,IAAItB,KAAJ,CAAU,iDAAV,CAAN;AACD;;AACD,MAAMsH,OAAO,GAAGrC,OAAO,CAACnD,eAAe,CAAC0C,IAAI,CAACC,SAAL,CAAenD,IAAf,CAAD,CAAhB,CAAvB;AACAA,EAAAA,IAAI,GAAGkD,IAAI,CAACQ,KAAL,CAAWsC,OAAX,CAAP;AACA,MAAMzF,QAAQ,GAAGP,IAAI,CAACO,QAAL,IAAiB,CAAC5B,OAAD,CAAlC;AACA,MAAM2B,QAAQ,GAAGN,IAAI,CAACM,QAAL,IAAiB,CAAC3B,OAAD,CAAlC;AACA,MAAM2F,OAAO,GAAG;AAAEhE,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,GAAhB;AACA,MAAM;AAAEmB,IAAAA,KAAF;AAAS0D,IAAAA;AAAT,MAA2BD,qBAAqB,CAACnF,IAAI,CAAC0B,KAAN,EAAa4C,OAAb,CAAtD;AAGA,MAAM2B,OAAO,GAAGT,WAAW,CAACxF,IAAI,CAACkG,WAAN,CAA3B;AACA,MAAM9F,GAAG,GAAG;AACVkD,IAAAA,OAAO,EAAE,OADC;AAEV6C,IAAAA,IAAI,EAAEnG,IAAI,CAACmG,IAFD;AAGVC,IAAAA,IAAI,EAAEpG,IAAI,CAACoG,IAHD;AAIV1E,IAAAA,KAJU;AAKV2E,IAAAA,OAAO,EAAE,CAAC;AAAEC,MAAAA,GAAG,YAAKtG,IAAI,CAACuG,OAAL,CAAa,CAAb,CAAL,gBAA0BvG,IAAI,CAACwG,IAA/B,SAAsCxG,IAAI,CAACyG,QAA3C;AAAL,KAAD,CALC;AAMVC,IAAAA,UAAU,EAAE;AACVtB,MAAAA,aADU;AAEVa,MAAAA,OAAO,EAAEA;AAFC;AANF,GAAZ;AAYA,SAAO7F,GAAP;AACD,CA7BM;AAmCP,OAAO,IAAMuG,WAAW,GAAI3G,IAAD,IAA4C;AACrE,MAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8BA,IAAI,GAAGkD,IAAI,CAACQ,KAAL,CAAW1D,IAAX,CAAP;AAC9B,SAAOkD,IAAI,CAACC,SAAL,CAAe4C,iBAAiB,CAAC/F,IAAD,CAAhC,CAAP;AACD,CAHM;AAUP,OAAO,IAAM4G,cAAc;AAAA,iCAAG,WAAOC,GAAP,EAAwBC,SAAxB,EAA8C;AAC1E,QAAMC,UAAU,aAAMD,SAAN,cAAhB;AACA,QAAM3H,QAAQ,SAAS0H,GAAG,CAACG,EAAJ,CAAOH,GAAG,CAACI,GAAJ,CAAgCF,UAAhC,CAAP,CAAvB;AACA,WAAO5H,QAAP;AACD,GAJ0B;;AAAA,kBAAdyH,cAAc;AAAA;AAAA;AAAA,GAApB;AAYP,OAAO,IAAMM,YAAY,GAAG,SAAfA,YAAe,CAC1B/H,QAD0B,EAGvB;AAAA,MADHG,OACG,uEADQU,IAAD,IAAqBA,IAAI,CAACjB,OAAL,GAAe,MAC3C;AACH,MAAMoI,MAAM,qBAAchI,QAAQ,CAACiI,sBAAvB,UAAZ;;AACA,MAAMC,UAAU,GAAIrH,IAAD,IAAmC;AACpD,QAAMlB,MAAM,GACVkB,IAAI,CAAChB,WAAL,KAAqBG,QAAQ,CAACmI,eAAT,CAAyBtI,WAA9C,GACI,SADJ,GAEIgB,IAAI,CAAClB,MAHX;AAIA,WAAO;AACL0C,MAAAA,IAAI,YAAK2F,MAAL,SAAcnH,IAAI,CAACjB,OAAnB,CADC;AAELA,MAAAA,OAAO,EAAEiB,IAAI,CAACjB,OAFT;AAGLD,MAAAA,MAHK;AAILwH,MAAAA,GAAG,EAAEtG,IAAI,CAAChB,WAJL;AAKLoB,MAAAA,GAAG,EAAE;AALA,KAAP;AAOD,GAZD;;AAaA,MAAMmH,KAAK,GAAGpI,QAAQ,CAACY,kBAAT,CACXyH,MADW,CACH/H,CAAD,IAAOH,OAAO,CAACG,CAAD,CADV,EAEXgI,GAFW,CAENhI,CAAD,IAAO4H,UAAU,CAAC5H,CAAD,CAFV,CAAd;AAGA,SAAO8H,KAAP;AACD,CAtBM;AA6BP,OAAO,IAAMG,SAAS;AAAA,iCAAG,WAAOb,GAAP,EAAwBc,KAAxB,EAA6C;AACpE,SAAK,IAAM3H,MAAX,IAAmB2H,KAAnB,EAA0B;AACxB,UAAIrJ,OAAO,CAAC0B,MAAI,CAACI,GAAN,CAAX,EAAuB;AAErB,YAAMsE,OAAO,SAASmC,GAAG,CAACG,EAAJ,CAAsBH,GAAG,CAACI,GAAJ,CAAQjH,MAAI,CAACsG,GAAb,CAAtB,CAAtB;AACA,YAAMsB,IAAI,GAAG,OAAOlD,OAAP,KAAmB,QAAnB,GAA8BxB,IAAI,CAACQ,KAAL,CAAWgB,OAAX,CAA9B,GAAoDA,OAAjE;AACA1E,QAAAA,MAAI,CAACI,GAAL,GAAW7B,QAAQ,CAACsJ,QAAT,CAAkB9B,iBAAiB,CAAC6B,IAAD,CAAnC,CAAX;AACD;AACF;;AACD,WAAOD,KAAP;AACD,GAVqB;;AAAA,kBAATD,SAAS;AAAA;AAAA;AAAA,GAAf","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 isEmpty from 'lodash/isEmpty'\nimport type { APIMethods } from '@looker/sdk-rtl'\nimport type { ArgValues, IApiModel, KeyedCollection } from './sdkModels'\nimport { ApiModel } from './sdkModels'\n\nconst warn = (warning: string) => {\n throw new Error(warning)\n}\n\nconst appJson = 'application/json'\n\n/** This declaration is duplicated DIRECTLY from @looker/sdk API 4.0 models to detach dependency */\nexport interface IApiVersion {\n /**\n * Current Looker release version number (read-only)\n */\n looker_release_version?: string\n current_version?: IApiVersionElement\n /**\n * Array of versions supported by this Looker instance (read-only)\n */\n supported_versions?: IApiVersionElement[]\n /**\n * API server base url (read-only)\n */\n api_server_url?: string\n /**\n * Web server base url (read-only)\n */\n web_server_url?: string\n}\n\n/** This declaration is duplicated DIRECTLY from @looker/sdk API 4.0 models to detach dependency */\nexport interface IApiVersionElement {\n /**\n * Version number as it appears in '/api/xxx/' urls (read-only)\n */\n version?: string | null\n /**\n * Full version number including minor version (read-only)\n */\n full_version?: string | null\n /**\n * Status of this version (read-only)\n */\n status?: string | null\n /**\n * Url for swagger.json for this version (read-only)\n */\n swagger_url?: string | null\n}\n\n/**\n * Describes the mime types supported by an operation\n */\nexport interface MimeFormats {\n /**\n * Output types produced by an operation\n */\n produces: string[]\n /**\n * Input types accepted by an operation\n */\n consumes: string[]\n}\n\n/** codegen specification item */\nexport interface SpecItem {\n /** Key for specification in collection. Duplicated for atomic passing */\n key: string\n /** API version status */\n status: string // 'current' | 'deprecated' | 'experimental' | 'stable'\n /** API version of spec */\n version: string\n /** true if this is the default spec */\n isDefault: boolean\n /** Compiled version of spec */\n api?: ApiModel\n /** URL for retrieving spec */\n specURL?: string\n /** string content of spec */\n specContent?: string\n}\n\n/** Keyed collection of specification items */\nexport type SpecList = KeyedCollection<SpecItem>\n\n/**\n * Looker specification version item from versions payload\n */\nexport interface ISpecItem {\n /** Abbreviated version of the API */\n version: string\n /** Semantic version of the API */\n full_version: string\n /** Usually legacy, stable, experimental, current */\n status: string\n /** Link to the swagger specification */\n swagger_url: string\n}\n\n/**\n * Callback for fetching and compiling specification to ApiModel\n */\nexport type SpecFetcher = (spec: SpecItem) => Promise<ApiModel | undefined>\nexport type IncludeVersion = (version: IApiVersionElement) => boolean\n\n/**\n * Should this specification version be included?\n * @param ver to check\n */\nexport const include31 = (ver: IApiVersionElement) => {\n return (\n (ver.status &&\n ver.version &&\n ver.swagger_url &&\n ver.status !== 'internal_test' &&\n ver.status !== 'deprecated' &&\n ver.status !== 'legacy') ||\n /\\b3.1\\b/.test(ver.version || '') // unfortunately, need to hard-code this for API Explorer's spec selector\n )\n}\n\n/**\n * Return all public API specifications from an ApiVersion payload\n * @param versions payload from a Looker server\n * @param fetcher fetches and compiles spec to ApiModel\n * @param include test for specification version inclusion\n */\nexport const getSpecsFromVersions = async (\n versions: IApiVersion,\n fetcher: SpecFetcher | undefined = undefined,\n include: IncludeVersion = include31\n): Promise<SpecList> => {\n const items = {}\n\n /**\n * Create a unique spec key for this version\n * @param v version to identify\n */\n const uniqueId = (v: IApiVersionElement) => {\n let specKey = v.version || 'api'\n const max = v.status?.length || 0\n let frag = 1\n while (items[specKey]) {\n if (frag <= max) {\n // More than one spec for this version\n specKey = `${v.version}${v.status?.substr(0, frag)}`\n } else {\n specKey = `${v.version}${v.status}${frag}`\n }\n frag++\n }\n return specKey\n }\n\n if (versions.supported_versions) {\n for (const v of versions.supported_versions) {\n // Tell TypeScript these are all defined because IApiVersion definition is lax\n if (v.status && v.version && v.swagger_url) {\n if (include(v)) {\n const spec: SpecItem = {\n key: uniqueId(v),\n status: v.status,\n version: v.version,\n isDefault: v.status === 'current',\n specURL: v.swagger_url,\n }\n if (fetcher) {\n spec.api = await fetcher(spec)\n }\n items[spec.key] = spec\n }\n }\n }\n }\n return items\n}\n\n/**\n * Payload returned by the Looker /versions endpoint\n */\nexport interface ILookerVersions {\n /** This Looker version */\n looker_release_version: string\n /** The current/default API version */\n current_version: ISpecItem\n /** All API versions */\n supported_versions: ISpecItem[]\n /** API server url */\n api_server_url: string\n /** Web server url */\n web_server_url: string\n}\n\n// TODO this work was duplicated in API Explorer. Need to merge and use one version.\n\n/**\n * Api Specification with on-demand determination of values\n */\nexport interface IApiSpecLink {\n /** Name of the specification */\n name: string\n /** API version */\n version: string\n /** API version status */\n status: string\n /** Location of the specification */\n url: string\n /** Parsed content. Will be loaded on demand but is assigned to an empty object by default. */\n api: IApiModel\n}\n\n// TODO this work was duplicated in API Explorer. Need to merge and use one version.\nexport type SpecLinks = IApiSpecLink[]\n\n/**\n * Defaults the mime formats for producing and consuming\n */\nexport const defaultMimeFormats: MimeFormats = {\n produces: [appJson],\n consumes: [appJson],\n}\n/**\n * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#style-values\n */\ntype OpenApiParameterStyle =\n | 'matrix'\n | 'label'\n | 'form'\n | 'simple'\n | 'spaceDelimited'\n | 'pipeDelimited'\n | 'deepObject'\n | undefined\n\n/**\n * Replaces x-looker-nullable with nullable for parameters and properties in a string\n * @param {string} spec\n * @returns {Promise<string>} name of the file written\n */\nexport const swapXLookerTags = (spec: string) => {\n const swaps = [\n { pattern: /x-looker-nullable/gi, replacement: 'nullable' },\n { pattern: /x-looker-values/gi, replacement: 'enum' },\n { pattern: /x-looker-deprecated/gi, replacement: 'deprecated' },\n ]\n swaps.forEach((swap) => {\n spec = spec.replace(swap.pattern, swap.replacement)\n })\n return spec\n}\n\n/**\n * Convert OpenAPI 2 collectionFormat to OpenApi 3 style\n *\n * See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.3.md#style-values for\n * conversion guidelines\n *\n * @param collectionFormat string\n * @returns the converted style, or undefined\n */\nexport const openApiStyle = (\n collectionFormat: string\n): OpenApiParameterStyle => {\n if (!collectionFormat) return undefined\n const styles: { [key: string]: OpenApiParameterStyle } = {\n csv: 'simple',\n pipes: 'pipeDelimited',\n ssv: 'spaceDelimited',\n }\n if (collectionFormat in styles) {\n return styles[collectionFormat]\n }\n return undefined\n}\n\n/**\n * Utility function to find the named parameter for an OpenAPI endpoint\n * @param api JSON structure of OpenAPI spec\n * @param endpoint url pattern for endpoint\n * @param verb HTTP method to locate\n * @param name name of parameter to find\n * @returns the matched parameter, or undefined\n */\nconst findOpenApiParam = (\n api: any,\n endpoint: string,\n verb: string,\n name: string\n) => {\n const result = api.paths[endpoint][verb].parameters.find(\n (p: { name: string }) => p.name === name\n )\n if (!result) {\n warn(`Missing parameter: ${endpoint} ${verb} parameter ${name}`)\n }\n return result\n}\n\n/**\n * Results of the spec conversion\n */\nexport interface IConversionResults {\n /**\n * JSON.stringify of the spec\n */\n spec: string\n /**\n * List of fixes to the spec\n */\n fixes: string[]\n}\n\nexport const fixConversionObjects = (api: any, swagger: any) => {\n const paths = swagger.paths\n const fixes: string[] = []\n Object.entries(paths).forEach(([endpoint, op]) => {\n Object.entries(op as any).forEach(([httpMethod, method]) => {\n const operation = method as any\n const params = operation.parameters\n if (params) {\n Object.entries(params).forEach(([, p]) => {\n const param = p as any\n if (param.name === 'body' && param.in === 'body') {\n // Set `required` in requestBody\n if ('required' in param) {\n // explicitly setting required value\n const required = param.required\n const fix = `${endpoint}::${operation.operationId} setting requestBody.required to ${required}`\n const requestBody = api.paths[endpoint][httpMethod].requestBody\n if (!requestBody) {\n warn(\n `Failed to find \"requestBody\" in OAS for swagger \"body param\" fix: ${fix}`\n )\n } else {\n if (requestBody.required !== required) {\n fixes.push(fix)\n }\n requestBody.required = required\n }\n }\n }\n\n if (param.collectionFormat) {\n // Set style from collectionFormat if it's not set\n const format = param.collectionFormat\n const style = openApiStyle(format)\n if (style === undefined) {\n warn(\n `OAS style conversion failed: collectionFormat '${param.collectionFormat}' is unknown`\n )\n } else {\n const fix = `${endpoint}::${operation.operationId} ${param.name} '${format}' -> '${style}'`\n const newParam = findOpenApiParam(\n api,\n endpoint,\n httpMethod,\n param.name\n )\n if (newParam && newParam.style !== style) {\n newParam.style = style\n fixes.push(fix)\n }\n }\n }\n })\n }\n })\n })\n\n return { fixes, spec: JSON.stringify(api) }\n}\n\n/**\n * Returns true if this spec is a swagger specification\n * @param spec to check\n */\nexport const isSwagger = (spec: any) => spec.swagger !== undefined\n\n/**\n * Returns true spec is an OpenAPI specification\n * @param spec to check\n */\nexport const isOpenApi = (spec: any) => spec.openapi !== undefined\n\n/**\n * This is a post-fix operation for the OpenAPI converter which currently misses this type of conversion\n *\n * - Converts missing swagger collectionFormat values to OpenAPI styles\n * - Flags OAS.requestBody as required or optional\n *\n * @param openApiSpec converted OpenAPI spec\n * @param swaggerSpec original swagger spec that may contain missed conversions\n * @returns modified openApiSpec and fix log in IConversionResults\n */\nexport const fixConversion = (\n openApiSpec: string,\n swaggerSpec: string\n): IConversionResults => {\n return fixConversionObjects(JSON.parse(openApiSpec), JSON.parse(swaggerSpec))\n}\n\n/**\n * Convert a swagger structure ref to an OpenAPI structure ref\n *\n * TODO update this to the typescript that understands replaceAll\n * @param ref string reference to convert\n */\nexport const swapRef = (ref: string) =>\n ref.replace(/#\\/definitions\\//g, '#/components/schemas/')\n\n/**\n * Get the name of the structure from the reference string\n * @param ref to partse\n */\nexport const structName = (ref: string) => {\n if (!ref) return undefined\n const parts = ref.split('/')\n return parts[parts.length - 1]\n}\n\n/**\n * Moves type, format, items to schema\n * Converts collectionFormat to style\n * @param param to convert\n */\nexport const convertParam = (param: any) => {\n const schema: any = { type: param.type }\n const result = { ...param }\n delete result.type\n if (param.format) {\n schema.format = param.format\n delete result.format\n }\n if (param.collectionFormat) {\n result.style = openApiStyle(param.collectionFormat)\n delete result.collectionFormat\n }\n if (param.items) {\n schema.items = param.items\n result.explode = false\n delete result.items\n }\n result.schema = schema\n return result\n}\n\n/**\n * Convert responses for the right response formats\n * @param responses response to convert\n * @param formats mime formats\n */\nexport const convertResponses = (\n responses: ArgValues,\n formats = defaultMimeFormats\n) => {\n Object.entries(responses).forEach(([code, response]) => {\n responses[code] = {\n description: response.description,\n }\n if (response.schema) {\n const content = {}\n formats.produces.forEach(\n (format) => (content[format] = { schema: response.schema })\n )\n responses[code].content = content\n }\n })\n return responses\n}\n\n/**\n * Convert an operation\n * Assign schemas in params, create request bodies, update $refs\n * @param op operation to convert\n * @param formats mime format consumer and producer\n * @param moveKeys true to move keys for reference OAS comparison\n */\nexport const convertOp = (\n op: ArgValues,\n formats = defaultMimeFormats,\n moveKeys = false\n) => {\n // If keys need to be shuffled for file comparison reasons, uncomment this function\n const moveKey = (key: string, value?: any) => {\n if (!moveKeys || !(key in op)) return value\n if (!value) value = op[key]\n if (value) {\n delete op[key]\n op[key] = value\n }\n return value\n }\n\n let { produces, consumes } = formats\n const body = {}\n if (op.produces) {\n produces = op.produces\n delete op.produces\n }\n if (op.consumes) {\n consumes = op.consumes\n delete op.consumes\n }\n if (op.parameters) {\n // Copy parameters before rebuilding\n const params = { ...op.parameters }\n op.parameters = []\n Object.values(params).forEach((p: any) => {\n if (p.in === 'body') {\n // const struct = structName(p.schema?.$ref)\n op.requestBody = {}\n // if (struct) {\n // op.requestBody.$ref = `#/components/requestBodies/${struct}`\n // }\n if (p.schema) {\n op.requestBody.content = { [consumes[0]]: { schema: p.schema } }\n }\n op.requestBody.description = p.description\n if ('required' in p) op.requestBody.required = p.required\n // if (struct) {\n // body[struct] = { ...op.requestBody }\n // body[struct].$ref = `#/components/schema/${struct}`\n // }\n } else {\n op.parameters.push(convertParam(p))\n }\n })\n if (op.parameters.length === 0) delete op.parameters\n }\n moveKey('responses', convertResponses(op.responses, { produces, consumes }))\n moveKey('deprecated')\n const xdep = 'x-looker-deprecated'\n if (xdep in op) {\n op.deprecated = op[xdep]\n delete op[xdep]\n }\n moveKey('x-looker-status')\n moveKey('x-looker-activity-type')\n moveKey('x-looker-rate-limited')\n return { op, body }\n}\n\n/**\n * Assign schemas and request bodies\n * @param paths to process\n * @param formats mime response types\n */\nexport const convertPathsAndBodies = (\n paths: ArgValues,\n formats = defaultMimeFormats\n) => {\n const result = { paths: {}, requestBodies: {} }\n Object.entries(paths).forEach(([path, entry]) => {\n result.paths[path] = {}\n // Hack to accommodate linting limitations\n const endpoint: ArgValues = entry\n Object.entries(endpoint).forEach(([verb, op]) => {\n const ep = convertOp(op, formats)\n result.paths[path][verb] = ep.op\n Object.entries(ep.body as ArgValues).forEach(([name, body]) => {\n result.requestBodies[name] = body\n })\n })\n })\n return result\n}\n\n/**\n * Convert structure definitions\n * @param defs to convert\n */\nexport const convertDefs = (defs: ArgValues): ArgValues => {\n Object.entries(defs).forEach(([_, struct]) => {\n Object.entries(struct.properties as ArgValues).forEach(([name, prop]) => {\n if (prop.$ref) {\n // Evidently OAS only wants the ref for the property type\n struct.properties[name] = { $ref: prop.$ref }\n }\n })\n })\n return defs\n}\n\n/**\n * On-demand conversion of swagger to openAPI specification\n * @param spec to possibly convert\n * @returns OpenAPI version of the specification or throws error if not Swagger or OpenAPI\n */\nexport const upgradeSpecObject = (spec: any) => {\n if (isOpenApi(spec)) {\n return JSON.parse(swapXLookerTags(JSON.stringify(spec)))\n }\n if (!isSwagger(spec)) {\n throw new Error('Input is not a Swagger or OpenAPI specification')\n }\n const cleanup = swapRef(swapXLookerTags(JSON.stringify(spec)))\n spec = JSON.parse(cleanup)\n const consumes = spec.consumes || [appJson]\n const produces = spec.produces || [appJson]\n const formats = { produces, consumes }\n const { paths, requestBodies } = convertPathsAndBodies(spec.paths, formats)\n // TODO create a requestBodies entry for every struct used > 1x?\n // TODO reassign op.requestBody for all requestBodies entries?\n const schemas = convertDefs(spec.definitions)\n const api = {\n openapi: '3.0.0',\n info: spec.info,\n tags: spec.tags,\n paths,\n servers: [{ url: `${spec.schemes[0]}://${spec.host}${spec.basePath}` }],\n components: {\n requestBodies,\n schemas: schemas,\n },\n }\n // const result = fixConversionObjects(api, spec)\n return api\n}\n\n/**\n * Upgrade a spec to OpenAPI if it's not already an OpenAPI spec\n * @param spec to upgrade\n */\nexport const upgradeSpec = (spec: string | Record<string, unknown>) => {\n if (typeof spec === 'string') spec = JSON.parse(spec)\n return JSON.stringify(upgradeSpecObject(spec))\n}\n\n/**\n * Fetches specs via /versions payload from the API server url\n * @param sdk APIMethods implementation that supports authenticating a request\n * @param serverUrl base url of the /versions server. Typically something like https://my.looker.com:19999 or https://my.looker.com\n */\nexport const getLookerSpecs = async (sdk: APIMethods, serverUrl: string) => {\n const versionUrl = `${serverUrl}/versions`\n const versions = await sdk.ok(sdk.get<ILookerVersions, Error>(versionUrl))\n return versions\n}\n\n// TODO this work was duplicated in API Explorer. Need to merge and use one version.\n/**\n * Convert a Looker versions payload into API specification links\n * @param versions\n * @param include lambda that returns true to include a spec item in the list\n */\nexport const getSpecLinks = (\n versions: ILookerVersions,\n include = (spec: ISpecItem) => spec.version > '2.99'\n) => {\n const prefix = `Release ${versions.looker_release_version} API `\n const deriveSpec = (spec: ISpecItem): IApiSpecLink => {\n const status =\n spec.swagger_url === versions.current_version.swagger_url\n ? 'current'\n : spec.status\n return {\n name: `${prefix}${spec.version}`,\n version: spec.version,\n status,\n url: spec.swagger_url,\n api: {} as IApiModel,\n }\n }\n const specs = versions.supported_versions\n .filter((v) => include(v))\n .map((v) => deriveSpec(v))\n return specs\n}\n\n/**\n * Fetch and parse API specifications from the established links\n * @param sdk APIMethods implementation that supports authenticating a request\n * @param links list of specifications to load\n */\nexport const loadSpecs = async (sdk: APIMethods, links: SpecLinks) => {\n for (const spec of links) {\n if (isEmpty(spec.api)) {\n // Not parsed yet\n const content = await sdk.ok<string, Error>(sdk.get(spec.url))\n const json = typeof content === 'string' ? JSON.parse(content) : content\n spec.api = ApiModel.fromJson(upgradeSpecObject(json))\n }\n }\n return links\n}\n"],"file":"specConverter.js"}
1
+ {"version":3,"file":"specConverter.js","names":["_isEmpty","_interopRequireDefault","require","_sdkModels","obj","__esModule","default","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","value","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","asyncGeneratorStep","gen","resolve","reject","_next","_throw","info","error","done","Promise","then","_asyncToGenerator","fn","self","args","err","warn","warning","Error","appJson","include31","ver","status","version","swagger_url","test","exports","getSpecsFromVersions","_ref","versions","fetcher","include","items","uniqueId","v","_v$status","specKey","max","frag","_v$status2","concat","substr","supported_versions","spec","isDefault","specURL","api","_x","defaultMimeFormats","produces","consumes","swapXLookerTags","swaps","pattern","replacement","swap","replace","openApiStyle","collectionFormat","styles","csv","pipes","ssv","findOpenApiParam","endpoint","verb","name","result","paths","parameters","find","p","fixConversionObjects","swagger","fixes","entries","_ref2","op","_ref3","httpMethod","method","operation","params","_ref4","param","in","required","fix","operationId","requestBody","format","style","newParam","JSON","stringify","isSwagger","isOpenApi","openapi","fixConversion","openApiSpec","swaggerSpec","parse","swapRef","ref","structName","parts","split","convertParam","schema","type","explode","convertResponses","responses","formats","_ref5","code","response","description","content","convertOp","moveKeys","moveKey","body","values","xdep","deprecated","convertPathsAndBodies","requestBodies","_ref6","path","entry","_ref7","ep","_ref8","convertDefs","defs","_ref9","_","struct","properties","_ref10","prop","$ref","upgradeSpecObject","cleanup","schemas","definitions","tags","servers","url","schemes","host","basePath","components","upgradeSpec","getLookerSpecs","_ref11","sdk","serverUrl","versionUrl","ok","get","_x2","_x3","getSpecLinks","prefix","looker_release_version","deriveSpec","current_version","specs","map","loadSpecs","_ref12","links","isEmpty","json","ApiModel","fromJson","_x4","_x5"],"sources":["../../src/specConverter.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 isEmpty from 'lodash/isEmpty'\nimport type { APIMethods } from '@looker/sdk-rtl'\nimport type { ArgValues, IApiModel, KeyedCollection } from './sdkModels'\nimport { ApiModel } from './sdkModels'\n\nconst warn = (warning: string) => {\n throw new Error(warning)\n}\n\nconst appJson = 'application/json'\n\n/** This declaration is duplicated DIRECTLY from @looker/sdk API 4.0 models to detach dependency */\nexport interface IApiVersion {\n /**\n * Current Looker release version number (read-only)\n */\n looker_release_version?: string\n current_version?: IApiVersionElement\n /**\n * Array of versions supported by this Looker instance (read-only)\n */\n supported_versions?: IApiVersionElement[]\n /**\n * API server base url (read-only)\n */\n api_server_url?: string\n /**\n * Web server base url (read-only)\n */\n web_server_url?: string\n}\n\n/** This declaration is duplicated DIRECTLY from @looker/sdk API 4.0 models to detach dependency */\nexport interface IApiVersionElement {\n /**\n * Version number as it appears in '/api/xxx/' urls (read-only)\n */\n version?: string | null\n /**\n * Full version number including minor version (read-only)\n */\n full_version?: string | null\n /**\n * Status of this version (read-only)\n */\n status?: string | null\n /**\n * Url for swagger.json for this version (read-only)\n */\n swagger_url?: string | null\n}\n\n/**\n * Describes the mime types supported by an operation\n */\nexport interface MimeFormats {\n /**\n * Output types produced by an operation\n */\n produces: string[]\n /**\n * Input types accepted by an operation\n */\n consumes: string[]\n}\n\n/** codegen specification item */\nexport interface SpecItem {\n /** Key for specification in collection. Duplicated for atomic passing */\n key: string\n /** API version status */\n status: string // 'current' | 'deprecated' | 'experimental' | 'stable'\n /** API version of spec */\n version: string\n /** true if this is the default spec */\n isDefault: boolean\n /** Compiled version of spec */\n api?: ApiModel\n /** URL for retrieving spec */\n specURL?: string\n /** string content of spec */\n specContent?: string\n}\n\n/** Keyed collection of specification items */\nexport type SpecList = KeyedCollection<SpecItem>\n\n/**\n * Looker specification version item from versions payload\n */\nexport interface ISpecItem {\n /** Abbreviated version of the API */\n version: string\n /** Semantic version of the API */\n full_version: string\n /** Usually legacy, stable, experimental, current */\n status: string\n /** Link to the swagger specification */\n swagger_url: string\n}\n\n/**\n * Callback for fetching and compiling specification to ApiModel\n */\nexport type SpecFetcher = (spec: SpecItem) => Promise<ApiModel | undefined>\nexport type IncludeVersion = (version: IApiVersionElement) => boolean\n\n/**\n * Should this specification version be included?\n * @param ver to check\n */\nexport const include31 = (ver: IApiVersionElement) => {\n return (\n (ver.status &&\n ver.version &&\n ver.swagger_url &&\n ver.status !== 'internal_test' &&\n ver.status !== 'deprecated' &&\n ver.status !== 'legacy') ||\n /\\b3.1\\b/.test(ver.version || '') // unfortunately, need to hard-code this for API Explorer's spec selector\n )\n}\n\n/**\n * Return all public API specifications from an ApiVersion payload\n * @param versions payload from a Looker server\n * @param fetcher fetches and compiles spec to ApiModel\n * @param include test for specification version inclusion\n */\nexport const getSpecsFromVersions = async (\n versions: IApiVersion,\n fetcher: SpecFetcher | undefined = undefined,\n include: IncludeVersion = include31\n): Promise<SpecList> => {\n const items = {}\n\n /**\n * Create a unique spec key for this version\n * @param v version to identify\n */\n const uniqueId = (v: IApiVersionElement) => {\n let specKey = v.version || 'api'\n const max = v.status?.length || 0\n let frag = 1\n while (items[specKey]) {\n if (frag <= max) {\n // More than one spec for this version\n specKey = `${v.version}${v.status?.substr(0, frag)}`\n } else {\n specKey = `${v.version}${v.status}${frag}`\n }\n frag++\n }\n return specKey\n }\n\n if (versions.supported_versions) {\n for (const v of versions.supported_versions) {\n // Tell TypeScript these are all defined because IApiVersion definition is lax\n if (v.status && v.version && v.swagger_url) {\n if (include(v)) {\n const spec: SpecItem = {\n key: uniqueId(v),\n status: v.status,\n version: v.version,\n isDefault: v.status === 'current',\n specURL: v.swagger_url,\n }\n if (fetcher) {\n spec.api = await fetcher(spec)\n }\n items[spec.key] = spec\n }\n }\n }\n }\n return items\n}\n\n/**\n * Payload returned by the Looker /versions endpoint\n */\nexport interface ILookerVersions {\n /** This Looker version */\n looker_release_version: string\n /** The current/default API version */\n current_version: ISpecItem\n /** All API versions */\n supported_versions: ISpecItem[]\n /** API server url */\n api_server_url: string\n /** Web server url */\n web_server_url: string\n}\n\n// TODO this work was duplicated in API Explorer. Need to merge and use one version.\n\n/**\n * Api Specification with on-demand determination of values\n */\nexport interface IApiSpecLink {\n /** Name of the specification */\n name: string\n /** API version */\n version: string\n /** API version status */\n status: string\n /** Location of the specification */\n url: string\n /** Parsed content. Will be loaded on demand but is assigned to an empty object by default. */\n api: IApiModel\n}\n\n// TODO this work was duplicated in API Explorer. Need to merge and use one version.\nexport type SpecLinks = IApiSpecLink[]\n\n/**\n * Defaults the mime formats for producing and consuming\n */\nexport const defaultMimeFormats: MimeFormats = {\n produces: [appJson],\n consumes: [appJson],\n}\n/**\n * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#style-values\n */\ntype OpenApiParameterStyle =\n | 'matrix'\n | 'label'\n | 'form'\n | 'simple'\n | 'spaceDelimited'\n | 'pipeDelimited'\n | 'deepObject'\n | undefined\n\n/**\n * Replaces x-looker-nullable with nullable for parameters and properties in a string\n * @param {string} spec\n * @returns {Promise<string>} name of the file written\n */\nexport const swapXLookerTags = (spec: string) => {\n const swaps = [\n { pattern: /x-looker-nullable/gi, replacement: 'nullable' },\n { pattern: /x-looker-values/gi, replacement: 'enum' },\n { pattern: /x-looker-deprecated/gi, replacement: 'deprecated' },\n ]\n swaps.forEach((swap) => {\n spec = spec.replace(swap.pattern, swap.replacement)\n })\n return spec\n}\n\n/**\n * Convert OpenAPI 2 collectionFormat to OpenApi 3 style\n *\n * See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.3.md#style-values for\n * conversion guidelines\n *\n * @param collectionFormat string\n * @returns the converted style, or undefined\n */\nexport const openApiStyle = (\n collectionFormat: string\n): OpenApiParameterStyle => {\n if (!collectionFormat) return undefined\n const styles: { [key: string]: OpenApiParameterStyle } = {\n csv: 'simple',\n pipes: 'pipeDelimited',\n ssv: 'spaceDelimited',\n }\n if (collectionFormat in styles) {\n return styles[collectionFormat]\n }\n return undefined\n}\n\n/**\n * Utility function to find the named parameter for an OpenAPI endpoint\n * @param api JSON structure of OpenAPI spec\n * @param endpoint url pattern for endpoint\n * @param verb HTTP method to locate\n * @param name name of parameter to find\n * @returns the matched parameter, or undefined\n */\nconst findOpenApiParam = (\n api: any,\n endpoint: string,\n verb: string,\n name: string\n) => {\n const result = api.paths[endpoint][verb].parameters.find(\n (p: { name: string }) => p.name === name\n )\n if (!result) {\n warn(`Missing parameter: ${endpoint} ${verb} parameter ${name}`)\n }\n return result\n}\n\n/**\n * Results of the spec conversion\n */\nexport interface IConversionResults {\n /**\n * JSON.stringify of the spec\n */\n spec: string\n /**\n * List of fixes to the spec\n */\n fixes: string[]\n}\n\nexport const fixConversionObjects = (api: any, swagger: any) => {\n const paths = swagger.paths\n const fixes: string[] = []\n Object.entries(paths).forEach(([endpoint, op]) => {\n Object.entries(op as any).forEach(([httpMethod, method]) => {\n const operation = method as any\n const params = operation.parameters\n if (params) {\n Object.entries(params).forEach(([, p]) => {\n const param = p as any\n if (param.name === 'body' && param.in === 'body') {\n // Set `required` in requestBody\n if ('required' in param) {\n // explicitly setting required value\n const required = param.required\n const fix = `${endpoint}::${operation.operationId} setting requestBody.required to ${required}`\n const requestBody = api.paths[endpoint][httpMethod].requestBody\n if (!requestBody) {\n warn(\n `Failed to find \"requestBody\" in OAS for swagger \"body param\" fix: ${fix}`\n )\n } else {\n if (requestBody.required !== required) {\n fixes.push(fix)\n }\n requestBody.required = required\n }\n }\n }\n\n if (param.collectionFormat) {\n // Set style from collectionFormat if it's not set\n const format = param.collectionFormat\n const style = openApiStyle(format)\n if (style === undefined) {\n warn(\n `OAS style conversion failed: collectionFormat '${param.collectionFormat}' is unknown`\n )\n } else {\n const fix = `${endpoint}::${operation.operationId} ${param.name} '${format}' -> '${style}'`\n const newParam = findOpenApiParam(\n api,\n endpoint,\n httpMethod,\n param.name\n )\n if (newParam && newParam.style !== style) {\n newParam.style = style\n fixes.push(fix)\n }\n }\n }\n })\n }\n })\n })\n\n return { fixes, spec: JSON.stringify(api) }\n}\n\n/**\n * Returns true if this spec is a swagger specification\n * @param spec to check\n */\nexport const isSwagger = (spec: any) => spec.swagger !== undefined\n\n/**\n * Returns true spec is an OpenAPI specification\n * @param spec to check\n */\nexport const isOpenApi = (spec: any) => spec.openapi !== undefined\n\n/**\n * This is a post-fix operation for the OpenAPI converter which currently misses this type of conversion\n *\n * - Converts missing swagger collectionFormat values to OpenAPI styles\n * - Flags OAS.requestBody as required or optional\n *\n * @param openApiSpec converted OpenAPI spec\n * @param swaggerSpec original swagger spec that may contain missed conversions\n * @returns modified openApiSpec and fix log in IConversionResults\n */\nexport const fixConversion = (\n openApiSpec: string,\n swaggerSpec: string\n): IConversionResults => {\n return fixConversionObjects(JSON.parse(openApiSpec), JSON.parse(swaggerSpec))\n}\n\n/**\n * Convert a swagger structure ref to an OpenAPI structure ref\n *\n * TODO update this to the typescript that understands replaceAll\n * @param ref string reference to convert\n */\nexport const swapRef = (ref: string) =>\n ref.replace(/#\\/definitions\\//g, '#/components/schemas/')\n\n/**\n * Get the name of the structure from the reference string\n * @param ref to partse\n */\nexport const structName = (ref: string) => {\n if (!ref) return undefined\n const parts = ref.split('/')\n return parts[parts.length - 1]\n}\n\n/**\n * Moves type, format, items to schema\n * Converts collectionFormat to style\n * @param param to convert\n */\nexport const convertParam = (param: any) => {\n const schema: any = { type: param.type }\n const result = { ...param }\n delete result.type\n if (param.format) {\n schema.format = param.format\n delete result.format\n }\n if (param.collectionFormat) {\n result.style = openApiStyle(param.collectionFormat)\n delete result.collectionFormat\n }\n if (param.items) {\n schema.items = param.items\n result.explode = false\n delete result.items\n }\n result.schema = schema\n return result\n}\n\n/**\n * Convert responses for the right response formats\n * @param responses response to convert\n * @param formats mime formats\n */\nexport const convertResponses = (\n responses: ArgValues,\n formats = defaultMimeFormats\n) => {\n Object.entries(responses).forEach(([code, response]) => {\n responses[code] = {\n description: response.description,\n }\n if (response.schema) {\n const content = {}\n formats.produces.forEach(\n (format) => (content[format] = { schema: response.schema })\n )\n responses[code].content = content\n }\n })\n return responses\n}\n\n/**\n * Convert an operation\n * Assign schemas in params, create request bodies, update $refs\n * @param op operation to convert\n * @param formats mime format consumer and producer\n * @param moveKeys true to move keys for reference OAS comparison\n */\nexport const convertOp = (\n op: ArgValues,\n formats = defaultMimeFormats,\n moveKeys = false\n) => {\n // If keys need to be shuffled for file comparison reasons, uncomment this function\n const moveKey = (key: string, value?: any) => {\n if (!moveKeys || !(key in op)) return value\n if (!value) value = op[key]\n if (value) {\n delete op[key]\n op[key] = value\n }\n return value\n }\n\n let { produces, consumes } = formats\n const body = {}\n if (op.produces) {\n produces = op.produces\n delete op.produces\n }\n if (op.consumes) {\n consumes = op.consumes\n delete op.consumes\n }\n if (op.parameters) {\n // Copy parameters before rebuilding\n const params = { ...op.parameters }\n op.parameters = []\n Object.values(params).forEach((p: any) => {\n if (p.in === 'body') {\n // const struct = structName(p.schema?.$ref)\n op.requestBody = {}\n // if (struct) {\n // op.requestBody.$ref = `#/components/requestBodies/${struct}`\n // }\n if (p.schema) {\n op.requestBody.content = { [consumes[0]]: { schema: p.schema } }\n }\n op.requestBody.description = p.description\n if ('required' in p) op.requestBody.required = p.required\n // if (struct) {\n // body[struct] = { ...op.requestBody }\n // body[struct].$ref = `#/components/schema/${struct}`\n // }\n } else {\n op.parameters.push(convertParam(p))\n }\n })\n if (op.parameters.length === 0) delete op.parameters\n }\n moveKey('responses', convertResponses(op.responses, { produces, consumes }))\n moveKey('deprecated')\n const xdep = 'x-looker-deprecated'\n if (xdep in op) {\n op.deprecated = op[xdep]\n delete op[xdep]\n }\n moveKey('x-looker-status')\n moveKey('x-looker-activity-type')\n moveKey('x-looker-rate-limited')\n return { op, body }\n}\n\n/**\n * Assign schemas and request bodies\n * @param paths to process\n * @param formats mime response types\n */\nexport const convertPathsAndBodies = (\n paths: ArgValues,\n formats = defaultMimeFormats\n) => {\n const result = { paths: {}, requestBodies: {} }\n Object.entries(paths).forEach(([path, entry]) => {\n result.paths[path] = {}\n // Hack to accommodate linting limitations\n const endpoint: ArgValues = entry\n Object.entries(endpoint).forEach(([verb, op]) => {\n const ep = convertOp(op, formats)\n result.paths[path][verb] = ep.op\n Object.entries(ep.body as ArgValues).forEach(([name, body]) => {\n result.requestBodies[name] = body\n })\n })\n })\n return result\n}\n\n/**\n * Convert structure definitions\n * @param defs to convert\n */\nexport const convertDefs = (defs: ArgValues): ArgValues => {\n Object.entries(defs).forEach(([_, struct]) => {\n Object.entries(struct.properties as ArgValues).forEach(([name, prop]) => {\n if (prop.$ref) {\n // Evidently OAS only wants the ref for the property type\n struct.properties[name] = { $ref: prop.$ref }\n }\n })\n })\n return defs\n}\n\n/**\n * On-demand conversion of swagger to openAPI specification\n * @param spec to possibly convert\n * @returns OpenAPI version of the specification or throws error if not Swagger or OpenAPI\n */\nexport const upgradeSpecObject = (spec: any) => {\n if (isOpenApi(spec)) {\n return JSON.parse(swapXLookerTags(JSON.stringify(spec)))\n }\n if (!isSwagger(spec)) {\n throw new Error('Input is not a Swagger or OpenAPI specification')\n }\n const cleanup = swapRef(swapXLookerTags(JSON.stringify(spec)))\n spec = JSON.parse(cleanup)\n const consumes = spec.consumes || [appJson]\n const produces = spec.produces || [appJson]\n const formats = { produces, consumes }\n const { paths, requestBodies } = convertPathsAndBodies(spec.paths, formats)\n // TODO create a requestBodies entry for every struct used > 1x?\n // TODO reassign op.requestBody for all requestBodies entries?\n const schemas = convertDefs(spec.definitions)\n const api = {\n openapi: '3.0.0',\n info: spec.info,\n tags: spec.tags,\n paths,\n servers: [{ url: `${spec.schemes[0]}://${spec.host}${spec.basePath}` }],\n components: {\n requestBodies,\n schemas: schemas,\n },\n }\n // const result = fixConversionObjects(api, spec)\n return api\n}\n\n/**\n * Upgrade a spec to OpenAPI if it's not already an OpenAPI spec\n * @param spec to upgrade\n */\nexport const upgradeSpec = (spec: string | Record<string, unknown>) => {\n if (typeof spec === 'string') spec = JSON.parse(spec)\n return JSON.stringify(upgradeSpecObject(spec))\n}\n\n/**\n * Fetches specs via /versions payload from the API server url\n * @param sdk APIMethods implementation that supports authenticating a request\n * @param serverUrl base url of the /versions server. Typically something like https://my.looker.com:19999 or https://my.looker.com\n */\nexport const getLookerSpecs = async (sdk: APIMethods, serverUrl: string) => {\n const versionUrl = `${serverUrl}/versions`\n const versions = await sdk.ok(sdk.get<ILookerVersions, Error>(versionUrl))\n return versions\n}\n\n// TODO this work was duplicated in API Explorer. Need to merge and use one version.\n/**\n * Convert a Looker versions payload into API specification links\n * @param versions\n * @param include lambda that returns true to include a spec item in the list\n */\nexport const getSpecLinks = (\n versions: ILookerVersions,\n include = (spec: ISpecItem) => spec.version > '2.99'\n) => {\n const prefix = `Release ${versions.looker_release_version} API `\n const deriveSpec = (spec: ISpecItem): IApiSpecLink => {\n const status =\n spec.swagger_url === versions.current_version.swagger_url\n ? 'current'\n : spec.status\n return {\n name: `${prefix}${spec.version}`,\n version: spec.version,\n status,\n url: spec.swagger_url,\n api: {} as IApiModel,\n }\n }\n const specs = versions.supported_versions\n .filter((v) => include(v))\n .map((v) => deriveSpec(v))\n return specs\n}\n\n/**\n * Fetch and parse API specifications from the established links\n * @param sdk APIMethods implementation that supports authenticating a request\n * @param links list of specifications to load\n */\nexport const loadSpecs = async (sdk: APIMethods, links: SpecLinks) => {\n for (const spec of links) {\n if (isEmpty(spec.api)) {\n // Not parsed yet\n const content = await sdk.ok<string, Error>(sdk.get(spec.url))\n const json = typeof content === 'string' ? JSON.parse(content) : content\n spec.api = ApiModel.fromJson(upgradeSpecObject(json))\n }\n }\n return links\n}\n"],"mappings":"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"}