@looker/sdk-codegen 21.8.1 → 21.9.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 (78) hide show
  1. package/CHANGELOG.md +128 -167
  2. package/README.md +0 -1
  3. package/lib/codeGen.d.ts +1 -1
  4. package/lib/codeGen.js +4 -6
  5. package/lib/codeGen.js.map +1 -1
  6. package/lib/codeGenerators.d.ts +1 -1
  7. package/lib/codeGenerators.js +2 -4
  8. package/lib/codeGenerators.js.map +1 -1
  9. package/lib/csharp.gen.d.ts +1 -1
  10. package/lib/csharp.gen.js +2 -2
  11. package/lib/csharp.gen.js.map +1 -1
  12. package/lib/declarationInfo.d.ts +3 -3
  13. package/lib/declarationInfo.js +1 -2
  14. package/lib/declarationInfo.js.map +1 -1
  15. package/lib/esm/codeGen.js +14 -23
  16. package/lib/esm/codeGen.js.map +1 -1
  17. package/lib/esm/codeGenerators.js +17 -28
  18. package/lib/esm/codeGenerators.js.map +1 -1
  19. package/lib/esm/csharp.gen.js +11 -18
  20. package/lib/esm/csharp.gen.js.map +1 -1
  21. package/lib/esm/declarationInfo.js +3 -10
  22. package/lib/esm/declarationInfo.js.map +1 -1
  23. package/lib/esm/exampleInfo.js +9 -24
  24. package/lib/esm/exampleInfo.js.map +1 -1
  25. package/lib/esm/go.gen.js +11 -18
  26. package/lib/esm/go.gen.js.map +1 -1
  27. package/lib/esm/index.js +13 -148
  28. package/lib/esm/index.js.map +1 -1
  29. package/lib/esm/kotlin.gen.js +11 -18
  30. package/lib/esm/kotlin.gen.js.map +1 -1
  31. package/lib/esm/pseudo.gen.js +6 -13
  32. package/lib/esm/pseudo.gen.js.map +1 -1
  33. package/lib/esm/python.gen.js +15 -19
  34. package/lib/esm/python.gen.js.map +1 -1
  35. package/lib/esm/sdkModels.js +52 -96
  36. package/lib/esm/sdkModels.js.map +1 -1
  37. package/lib/esm/specConverter.js +29 -57
  38. package/lib/esm/specConverter.js.map +1 -1
  39. package/lib/esm/specDiff.js +17 -36
  40. package/lib/esm/specDiff.js.map +1 -1
  41. package/lib/esm/swift.gen.js +17 -24
  42. package/lib/esm/swift.gen.js.map +1 -1
  43. package/lib/esm/testUtils/index.js +1 -16
  44. package/lib/esm/testUtils/index.js.map +1 -1
  45. package/lib/esm/testUtils/testUtils.js +12 -25
  46. package/lib/esm/testUtils/testUtils.js.map +1 -1
  47. package/lib/esm/typescript.gen.js +16 -23
  48. package/lib/esm/typescript.gen.js.map +1 -1
  49. package/lib/exampleInfo.d.ts +6 -6
  50. package/lib/exampleInfo.js +1 -2
  51. package/lib/exampleInfo.js.map +1 -1
  52. package/lib/go.gen.js +3 -3
  53. package/lib/go.gen.js.map +1 -1
  54. package/lib/index.js.map +1 -1
  55. package/lib/kotlin.gen.d.ts +1 -1
  56. package/lib/kotlin.gen.js +2 -2
  57. package/lib/kotlin.gen.js.map +1 -1
  58. package/lib/pseudo.gen.js +2 -2
  59. package/lib/pseudo.gen.js.map +1 -1
  60. package/lib/python.gen.js +6 -3
  61. package/lib/python.gen.js.map +1 -1
  62. package/lib/sdkModels.d.ts +13 -13
  63. package/lib/sdkModels.js +15 -25
  64. package/lib/sdkModels.js.map +1 -1
  65. package/lib/specConverter.d.ts +6 -9
  66. package/lib/specConverter.js +12 -20
  67. package/lib/specConverter.js.map +1 -1
  68. package/lib/specDiff.d.ts +4 -4
  69. package/lib/specDiff.js +4 -8
  70. package/lib/specDiff.js.map +1 -1
  71. package/lib/swift.gen.js +2 -2
  72. package/lib/swift.gen.js.map +1 -1
  73. package/lib/testUtils/index.js.map +1 -1
  74. package/lib/testUtils/testUtils.js +4 -6
  75. package/lib/testUtils/testUtils.js.map +1 -1
  76. package/lib/typescript.gen.js +4 -4
  77. package/lib/typescript.gen.js.map +1 -1
  78. package/package.json +6 -6
@@ -27,15 +27,15 @@ export interface SpecItem {
27
27
  specURL?: string;
28
28
  specContent?: string;
29
29
  }
30
- export declare type SpecList = KeyedCollection<SpecItem>;
30
+ export type SpecList = KeyedCollection<SpecItem>;
31
31
  export interface ISpecItem {
32
32
  version: string;
33
33
  full_version: string;
34
34
  status: string;
35
35
  swagger_url: string;
36
36
  }
37
- export declare type SpecFetcher = (spec: SpecItem) => Promise<ApiModel | undefined>;
38
- export declare type IncludeVersion = (version: IApiVersionElement) => boolean;
37
+ export type SpecFetcher = (spec: SpecItem) => Promise<ApiModel | undefined>;
38
+ export type IncludeVersion = (version: IApiVersionElement) => boolean;
39
39
  export declare const include31: (ver: IApiVersionElement) => boolean;
40
40
  export declare const getSpecsFromVersions: (versions: IApiVersion, fetcher?: SpecFetcher | undefined, include?: IncludeVersion) => Promise<SpecList>;
41
41
  export interface ILookerVersions {
@@ -52,9 +52,9 @@ export interface IApiSpecLink {
52
52
  url: string;
53
53
  api: IApiModel;
54
54
  }
55
- export declare type SpecLinks = IApiSpecLink[];
55
+ export type SpecLinks = IApiSpecLink[];
56
56
  export declare const defaultMimeFormats: MimeFormats;
57
- declare type OpenApiParameterStyle = 'matrix' | 'label' | 'form' | 'simple' | 'spaceDelimited' | 'pipeDelimited' | 'deepObject' | undefined;
57
+ type OpenApiParameterStyle = 'matrix' | 'label' | 'form' | 'simple' | 'spaceDelimited' | 'pipeDelimited' | 'deepObject' | undefined;
58
58
  export declare const swapXLookerTags: (spec: string) => string;
59
59
  export declare const openApiStyle: (collectionFormat: string) => OpenApiParameterStyle;
60
60
  export interface IConversionResults {
@@ -76,10 +76,7 @@ export declare const convertOp: (op: ArgValues, formats?: MimeFormats, moveKeys?
76
76
  op: ArgValues;
77
77
  body: {};
78
78
  };
79
- export declare const convertPathsAndBodies: (paths: ArgValues, formats?: MimeFormats) => {
80
- paths: {};
81
- requestBodies: {};
82
- };
79
+ export declare const convertPathsAndBodies: (paths: ArgValues, formats?: MimeFormats) => any;
83
80
  export declare const convertDefs: (defs: ArgValues) => ArgValues;
84
81
  export declare const upgradeSpecObject: (spec: any) => any;
85
82
  export declare const upgradeSpec: (spec: string | Record<string, unknown>) => string;
@@ -7,11 +7,11 @@ exports.upgradeSpecObject = exports.upgradeSpec = exports.swapXLookerTags = expo
7
7
  var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
8
8
  var _sdkModels = require("./sdkModels");
9
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; }
10
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
11
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12
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); }
13
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
14
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
15
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); } }
16
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); }); }; }
17
17
  var warn = warning => {
@@ -22,7 +22,7 @@ var include31 = ver => {
22
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 || '');
23
23
  };
24
24
  exports.include31 = include31;
25
- var getSpecsFromVersions = function () {
25
+ var getSpecsFromVersions = exports.getSpecsFromVersions = function () {
26
26
  var _ref = _asyncToGenerator(function* (versions) {
27
27
  var fetcher = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
28
28
  var include = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : include31;
@@ -68,12 +68,10 @@ var getSpecsFromVersions = function () {
68
68
  return _ref.apply(this, arguments);
69
69
  };
70
70
  }();
71
- exports.getSpecsFromVersions = getSpecsFromVersions;
72
- var defaultMimeFormats = {
71
+ var defaultMimeFormats = exports.defaultMimeFormats = {
73
72
  produces: [appJson],
74
73
  consumes: [appJson]
75
74
  };
76
- exports.defaultMimeFormats = defaultMimeFormats;
77
75
  var swapXLookerTags = spec => {
78
76
  var swaps = [{
79
77
  pattern: /x-looker-nullable/gi,
@@ -202,7 +200,7 @@ var convertParam = param => {
202
200
  return result;
203
201
  };
204
202
  exports.convertParam = convertParam;
205
- var convertResponses = function convertResponses(responses) {
203
+ var convertResponses = exports.convertResponses = function convertResponses(responses) {
206
204
  var formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultMimeFormats;
207
205
  Object.entries(responses).forEach(_ref5 => {
208
206
  var [code, response] = _ref5;
@@ -219,8 +217,7 @@ var convertResponses = function convertResponses(responses) {
219
217
  });
220
218
  return responses;
221
219
  };
222
- exports.convertResponses = convertResponses;
223
- var convertOp = function convertOp(op) {
220
+ var convertOp = exports.convertOp = function convertOp(op) {
224
221
  var formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultMimeFormats;
225
222
  var moveKeys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
226
223
  var moveKey = (key, value) => {
@@ -284,8 +281,7 @@ var convertOp = function convertOp(op) {
284
281
  body
285
282
  };
286
283
  };
287
- exports.convertOp = convertOp;
288
- var convertPathsAndBodies = function convertPathsAndBodies(paths) {
284
+ var convertPathsAndBodies = exports.convertPathsAndBodies = function convertPathsAndBodies(paths) {
289
285
  var formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultMimeFormats;
290
286
  var result = {
291
287
  paths: {},
@@ -307,7 +303,6 @@ var convertPathsAndBodies = function convertPathsAndBodies(paths) {
307
303
  });
308
304
  return result;
309
305
  };
310
- exports.convertPathsAndBodies = convertPathsAndBodies;
311
306
  var convertDefs = defs => {
312
307
  Object.entries(defs).forEach(_ref9 => {
313
308
  var [_, struct] = _ref9;
@@ -364,7 +359,7 @@ var upgradeSpec = spec => {
364
359
  return JSON.stringify(upgradeSpecObject(spec));
365
360
  };
366
361
  exports.upgradeSpec = upgradeSpec;
367
- var getLookerSpecs = function () {
362
+ var getLookerSpecs = exports.getLookerSpecs = function () {
368
363
  var _ref11 = _asyncToGenerator(function* (sdk, serverUrl) {
369
364
  var versionUrl = "".concat(serverUrl, "/versions");
370
365
  var versions = yield sdk.ok(sdk.get(versionUrl));
@@ -374,8 +369,7 @@ var getLookerSpecs = function () {
374
369
  return _ref11.apply(this, arguments);
375
370
  };
376
371
  }();
377
- exports.getLookerSpecs = getLookerSpecs;
378
- var getSpecLinks = function getSpecLinks(versions) {
372
+ var getSpecLinks = exports.getSpecLinks = function getSpecLinks(versions) {
379
373
  var include = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : spec => spec.version > '2.99';
380
374
  var prefix = "Release ".concat(versions.looker_release_version, " API ");
381
375
  var deriveSpec = spec => {
@@ -391,8 +385,7 @@ var getSpecLinks = function getSpecLinks(versions) {
391
385
  var specs = versions.supported_versions.filter(v => include(v)).map(v => deriveSpec(v));
392
386
  return specs;
393
387
  };
394
- exports.getSpecLinks = getSpecLinks;
395
- var loadSpecs = function () {
388
+ var loadSpecs = exports.loadSpecs = function () {
396
389
  var _ref12 = _asyncToGenerator(function* (sdk, links) {
397
390
  for (var _spec2 of links) {
398
391
  if ((0, _isEmpty.default)(_spec2.api)) {
@@ -407,5 +400,4 @@ var loadSpecs = function () {
407
400
  return _ref12.apply(this, arguments);
408
401
  };
409
402
  }();
410
- exports.loadSpecs = loadSpecs;
411
403
  //# sourceMappingURL=specConverter.js.map
@@ -1 +1 @@
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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"}
1
+ {"version":3,"file":"specConverter.js","names":["_isEmpty","_interopRequireDefault","require","_sdkModels","obj","__esModule","default","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","key","value","_toPropertyKey","configurable","writable","i","_toPrimitive","String","Symbol","toPrimitive","call","TypeError","Number","asyncGeneratorStep","gen","resolve","reject","_next","_throw","arg","info","error","done","Promise","then","_asyncToGenerator","fn","self","args","err","undefined","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: any = {};\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: any = {};\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: any = { 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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"}
package/lib/specDiff.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { IMethod, IType, KeyedCollection, IApiModel } from './sdkModels';
1
+ import type { IApiModel, IMethod, IType, KeyedCollection } from './sdkModels';
2
2
  interface ITypeDelta {
3
3
  lhs: string;
4
4
  rhs: string;
@@ -8,8 +8,8 @@ export interface DiffCount {
8
8
  added: number;
9
9
  removed: number;
10
10
  }
11
- export declare type TypeDelta = KeyedCollection<ITypeDelta>;
12
- export declare type DiffTracker = (lKey: string, rKey: string) => number;
11
+ export type TypeDelta = KeyedCollection<ITypeDelta>;
12
+ export type DiffTracker = (lKey: string, rKey: string) => number;
13
13
  export declare const startCount: () => DiffCount;
14
14
  export declare const countDiffs: (count: DiffCount, lKeys: string[], rKeys: string[], comparer?: DiffTracker) => DiffCount;
15
15
  export declare const compareEnumTypes: (lType: IType, rType: IType, count: DiffCount) => {
@@ -67,7 +67,7 @@ export interface DiffRow {
67
67
  responseDiff: string;
68
68
  diffCount: DiffCount;
69
69
  }
70
- export declare type DiffFilter = (delta: DiffRow, lMethod?: IMethod, rMethod?: IMethod) => boolean;
70
+ export type DiffFilter = (delta: DiffRow, lMethod?: IMethod, rMethod?: IMethod) => boolean;
71
71
  export declare const includeDiffs: DiffFilter;
72
72
  export declare const compareSpecs: (lSpec: IApiModel, rSpec: IApiModel, include?: DiffFilter) => DiffRow[];
73
73
  export {};
package/lib/specDiff.js CHANGED
@@ -24,7 +24,7 @@ var diffCompare = (lKey, rKey) => {
24
24
  if (lKey) return DiffCompare.RightMissing;
25
25
  return DiffCompare.LeftMissing;
26
26
  };
27
- var countDiffs = function countDiffs(count, lKeys, rKeys) {
27
+ var countDiffs = exports.countDiffs = function countDiffs(count, lKeys, rKeys) {
28
28
  var comparer = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : diffCompare;
29
29
  lKeys = lKeys.sort((a, b) => a.localeCompare(b));
30
30
  rKeys = rKeys.sort((a, b) => a.localeCompare(b));
@@ -56,7 +56,6 @@ var countDiffs = function countDiffs(count, lKeys, rKeys) {
56
56
  }
57
57
  return count;
58
58
  };
59
- exports.countDiffs = countDiffs;
60
59
  var compareEnumTypes = (lType, rType, count) => {
61
60
  var lNum = lType;
62
61
  var rNum = rType;
@@ -200,15 +199,13 @@ var compareResponses = (lMethod, rMethod, count) => {
200
199
  };
201
200
  };
202
201
  exports.compareResponses = compareResponses;
203
- var csvHeaderRow = 'method name,"Op + URI",left status,right status,typeDiff,paramDiff,bodyDiff,responseDiff,diffCount';
204
- exports.csvHeaderRow = csvHeaderRow;
202
+ var csvHeaderRow = exports.csvHeaderRow = 'method name,"Op + URI",left status,right status,typeDiff,paramDiff,bodyDiff,responseDiff,diffCount';
205
203
  var csvDiffRow = diff => {
206
204
  var diffCount = JSON.stringify(diff.diffCount).replace(/"/g, "'");
207
205
  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, "\"");
208
206
  };
209
207
  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;
208
+ var mdHeaderRow = exports.mdHeaderRow = "\n| method name | Op + URI | 3.1 | 4.0 | typeDiff | paramDiff | bodyDiff | responseDiff | diffCount |\n| ------------ | -------- | --- | --- | ------------ | --------- | -------- | ------------ | --------- |";
212
209
  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
210
  exports.mdDiffRow = mdDiffRow;
214
211
  var diffToString = diff => {
@@ -264,7 +261,7 @@ var computeDiff = (lMethod, rMethod) => {
264
261
  };
265
262
  var includeDiffs = (delta, lMethod, rMethod) => !lMethod || !rMethod || delta.lStatus !== delta.rStatus || !!delta.paramsDiff || !!delta.typeDiff || !!delta.bodyDiff || !!delta.responseDiff;
266
263
  exports.includeDiffs = includeDiffs;
267
- var compareSpecs = function compareSpecs(lSpec, rSpec) {
264
+ var compareSpecs = exports.compareSpecs = function compareSpecs(lSpec, rSpec) {
268
265
  var include = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : includeDiffs;
269
266
  var specSort = (a, b) => a.id.localeCompare(b.id);
270
267
  var lMethods = Object.values(lSpec.methods).sort(specSort);
@@ -298,5 +295,4 @@ var compareSpecs = function compareSpecs(lSpec, rSpec) {
298
295
  }
299
296
  return diff;
300
297
  };
301
- exports.compareSpecs = compareSpecs;
302
298
  //# sourceMappingURL=specDiff.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"specDiff.js","names":["_sdkModels","require","DiffCompare","startCount","changed","added","removed","exports","diffCompare","lKey","rKey","localeCompare","RightMissing","LeftMissing","countDiffs","count","lKeys","rKeys","comparer","arguments","length","undefined","sort","a","b","l","r","lk","rk","comp","compareEnumTypes","lType","rType","lNum","rNum","values","map","v","toString","lVal","JSON","stringify","rVal","lhs","rhs","compareTypes","EnumType","ArrayType","elementType","asHashString","diff","Object","keys","properties","summary","lhsVal","rhsVal","compareParams","lMethod","rMethod","lParams","rParams","allParams","forEach","p","name","lsh","signature","rsh","lSignature","rSignature","compareBodies","bodyParams","lSide","type","fullName","required","rSide","compareResponses","responses","statusCode","mediaType","csvHeaderRow","csvDiffRow","diffCount","replace","concat","id","lStatus","rStatus","typeDiff","paramsDiff","bodyDiff","responseDiff","mdHeaderRow","mdDiffRow","diffToString","result","computeDiff","Error","countStatus","status","includeDiffs","delta","compareSpecs","lSpec","rSpec","include","specSort","lMethods","methods","rMethods","lLength","rLength","lIndex","rIndex","push"],"sources":["../src/specDiff.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { IMethod, IType, KeyedCollection, IApiModel } from './sdkModels'\nimport { EnumType, ArrayType } from './sdkModels'\n\ninterface ITypeDelta {\n lhs: string\n rhs: string\n}\n\nenum DiffCompare {\n RightMissing = -1,\n Equal = 0,\n LeftMissing = 1,\n}\n\nexport interface DiffCount {\n changed: number\n added: number\n removed: number\n}\n\nexport type TypeDelta = KeyedCollection<ITypeDelta>\n\nexport type DiffTracker = (lKey: string, rKey: string) => number\n\nexport const startCount = (): DiffCount => {\n return { changed: 0, added: 0, removed: 0 }\n}\n\nconst diffCompare = (lKey: string, rKey: string) => {\n if (lKey && rKey) return lKey.localeCompare(rKey)\n if (lKey) return DiffCompare.RightMissing\n return DiffCompare.LeftMissing\n}\n\nexport const countDiffs = (\n count: DiffCount,\n lKeys: string[],\n rKeys: string[],\n comparer: DiffTracker = diffCompare\n) => {\n lKeys = lKeys.sort((a, b) => a.localeCompare(b))\n rKeys = rKeys.sort((a, b) => a.localeCompare(b))\n let l = 0\n let r = 0\n while (l < lKeys.length || r < rKeys.length) {\n const lk = lKeys[l]\n const rk = rKeys[r]\n const comp = comparer(lk, rk)\n switch (comp) {\n case DiffCompare.LeftMissing: {\n count.added++\n r++\n break\n }\n case DiffCompare.RightMissing: {\n count.removed++\n l++\n break\n }\n default: {\n l++\n r++\n }\n }\n }\n return count\n}\n\nexport const compareEnumTypes = (\n lType: IType,\n rType: IType,\n count: DiffCount\n) => {\n const lNum = lType as EnumType\n const rNum = rType as EnumType\n const lKeys = lNum.values.map((v) => v.toString())\n const rKeys = rNum.values.map((v) => v.toString())\n countDiffs(count, lKeys, rKeys)\n const lVal = JSON.stringify(lKeys)\n const rVal = JSON.stringify(rKeys)\n if (lVal === rVal) return\n return {\n lhs: lVal,\n rhs: rVal,\n }\n}\n\n/**\n * Compares two types and returns an object of non-matching entries\n * @param lType\n * @param rType\n * @param count change tracking\n */\nexport const compareTypes = (lType: IType, rType: IType, count: DiffCount) => {\n if (lType instanceof EnumType) {\n return compareEnumTypes(lType, rType, count)\n }\n\n if (lType instanceof ArrayType) {\n lType = lType.elementType\n }\n\n if (rType instanceof ArrayType) {\n rType = rType.elementType\n }\n\n if (lType.asHashString() === rType.asHashString()) return\n\n const diff: TypeDelta = {}\n countDiffs(\n count,\n Object.keys(lType.properties),\n Object.keys(rType.properties),\n (lKey, rKey) => {\n const comp = diffCompare(lKey, rKey)\n switch (comp) {\n case DiffCompare.LeftMissing: {\n diff[rKey] = {\n lhs: '',\n rhs: rType.properties[rKey].summary(),\n }\n break\n }\n case DiffCompare.RightMissing: {\n diff[lKey] = {\n lhs: lType.properties[lKey].summary(),\n rhs: '',\n }\n break\n }\n default: {\n const lhsVal = lType.properties[lKey]\n const rhsVal = rType.properties[rKey]\n const lhs = lhsVal.summary()\n const rhs = rhsVal.summary()\n if (lhs !== rhs) {\n count.changed++\n diff[lKey] = {\n lhs,\n rhs,\n }\n }\n }\n }\n return comp\n }\n )\n if (Object.keys(diff).length === 0) return\n return diff\n}\n\n/**\n * Compares the params of two methods and returns the signature of both methods\n * if non matching.\n * @param lMethod\n * @param rMethod\n * @param count change tracking\n */\nexport const compareParams = (\n lMethod: IMethod,\n rMethod: IMethod,\n count: DiffCount\n) => {\n const lParams = {}\n const rParams = {}\n lMethod.allParams.forEach((p) => (lParams[p.name] = p))\n rMethod.allParams.forEach((p) => (rParams[p.name] = p))\n // TODO typediff the matching body types?\n countDiffs(\n count,\n Object.keys(lParams),\n Object.keys(rParams),\n (lKey, rKey) => {\n const comp = diffCompare(lKey, rKey)\n if (comp === 0) {\n const lsh = lParams[lKey].signature()\n const rsh = rParams[rKey].signature()\n if (lsh !== rsh) {\n count.changed++\n }\n }\n return comp\n }\n )\n\n const lSignature = lMethod.signature()\n const rSignature = rMethod.signature()\n if (lSignature === rSignature) return\n\n return {\n lhs: lSignature,\n rhs: rSignature,\n }\n}\n\n/**\n * Compares the bodies of two methods and returns diffs if there are any\n * @param lMethod\n * @param rMethod\n * @param count change tracking\n */\nexport const compareBodies = (\n lMethod: IMethod,\n rMethod: IMethod,\n count: DiffCount\n) => {\n const lParams = {}\n const rParams = {}\n lMethod.bodyParams.forEach((p) => (lParams[p.name] = p))\n rMethod.bodyParams.forEach((p) => (rParams[p.name] = p))\n // TODO typediff the matching body types?\n countDiffs(count, Object.keys(lParams), Object.keys(rParams))\n\n const lSide = lMethod.bodyParams.map((p) => {\n return {\n name: p.name,\n type: p.type.fullName,\n required: p.required,\n }\n })\n const rSide = rMethod.bodyParams.map((p) => {\n return {\n name: p.name,\n type: p.type.fullName,\n required: p.required,\n }\n })\n\n if (JSON.stringify(lSide) === JSON.stringify(rSide)) return\n\n count.changed++\n return {\n lhs: lSide,\n rhs: rSide,\n }\n}\n\n/**\n * Compare two response lists, returning diff\n * @param lMethod\n * @param rMethod\n * @param count change tracking\n */\nexport const compareResponses = (\n lMethod: IMethod,\n rMethod: IMethod,\n count: DiffCount\n) => {\n // TODO deep type comparison? Probably diff all types instead\n const lSide = lMethod.responses.map((r) => {\n return {\n statusCode: r.statusCode,\n mediaType: r.mediaType,\n type: r.type.fullName,\n }\n })\n const rSide = rMethod.responses.map((r) => {\n return {\n statusCode: r.statusCode,\n mediaType: r.mediaType,\n type: r.type.fullName,\n }\n })\n if (JSON.stringify(lSide) === JSON.stringify(rSide)) return\n\n count.changed++\n return {\n lhs: lSide,\n rhs: rSide,\n }\n}\n\nexport const csvHeaderRow =\n 'method name,\"Op + URI\",left status,right status,typeDiff,paramDiff,bodyDiff,responseDiff,diffCount'\n\nexport const csvDiffRow = (diff: DiffRow) => {\n const diffCount = JSON.stringify(diff.diffCount).replace(/\"/g, `'`)\n return `\n${diff.name},${diff.id},${diff.lStatus},${diff.rStatus},${diff.typeDiff},${diff.paramsDiff},${diff.bodyDiff},${diff.responseDiff},\"${diffCount}\"`\n}\n\nexport const mdHeaderRow = `\n| method name | Op + URI | 3.1 | 4.0 | typeDiff | paramDiff | bodyDiff | responseDiff | diffCount |\n| ------------ | -------- | --- | --- | ------------ | --------- | -------- | ------------ | --------- |`\n\nexport const mdDiffRow = (diff: DiffRow) => `\n| ${diff.name} | ${diff.id} | ${diff.lStatus} | ${diff.rStatus} | ${\n diff.typeDiff\n} | ${diff.paramsDiff} | ${diff.bodyDiff} | ${\n diff.responseDiff\n} | ${JSON.stringify(diff.diffCount)} |`\n\nconst diffToString = (diff: any) => {\n if (!diff) return ''\n const result = JSON.stringify(diff, null, 2)\n if (result === '{}') return ''\n return `\"${result.replace(/\"/g, \"'\")}\"`\n}\n\nexport interface ComputeDiffInputs {\n lMethod?: IMethod\n rMethod?: IMethod\n}\n\nexport interface DiffRow {\n /** Method name */\n name: string\n /** Method operation and path */\n id: string\n /** Method status in both specs */\n lStatus: string\n rStatus: string\n /** Method type diff if any */\n typeDiff: string\n /** Method params diff if any */\n paramsDiff: string\n /** Body diff if any */\n bodyDiff: string\n /** Response diff if any */\n responseDiff: string\n /** Count of differences */\n diffCount: DiffCount\n}\n\n/**\n * Computes the diff of two methods\n * @param lMethod\n * @param rMethod\n */\nconst computeDiff = (lMethod?: IMethod, rMethod?: IMethod) => {\n if (!lMethod && !rMethod) throw new Error('At least one method is required.')\n\n const count = startCount()\n const countStatus = () => {\n if (!rMethod) {\n count.removed++\n } else if (!lMethod) {\n count.added++\n } else {\n if (lMethod.status !== rMethod.status) count.changed++\n }\n }\n\n let result: DiffRow\n countStatus()\n if (lMethod) {\n const typeDiff = rMethod\n ? diffToString(compareTypes(lMethod.type, rMethod.type, count))\n : ''\n const paramsDiff = rMethod\n ? diffToString(compareParams(lMethod, rMethod, count))\n : ''\n const bodyDiff = rMethod\n ? diffToString(compareBodies(lMethod, rMethod, count))\n : ''\n const responseDiff = rMethod\n ? diffToString(compareResponses(lMethod, rMethod, count))\n : ''\n result = {\n name: lMethod.name,\n id: lMethod.id,\n lStatus: lMethod.status,\n rStatus: rMethod ? rMethod.status : '',\n typeDiff,\n paramsDiff,\n bodyDiff,\n responseDiff,\n diffCount: count,\n }\n } else if (!lMethod && rMethod) {\n result = {\n name: rMethod.name,\n id: rMethod.id,\n lStatus: '',\n rStatus: rMethod.status,\n typeDiff: '',\n paramsDiff: '',\n bodyDiff: '',\n responseDiff: '',\n diffCount: count,\n }\n }\n\n return result!\n}\n\nexport type DiffFilter = (\n delta: DiffRow,\n lMethod?: IMethod,\n rMethod?: IMethod\n) => boolean\n\n/**\n * Include when:\n * - lMethod is missing\n * - rMethod is missing\n * - params differ\n * - types differ\n * @param delta\n * @param lMethod\n * @param rMethod\n */\nexport const includeDiffs: DiffFilter = (delta, lMethod, rMethod) =>\n !lMethod ||\n !rMethod! ||\n delta.lStatus !== delta.rStatus ||\n !!delta.paramsDiff ||\n !!delta.typeDiff ||\n !!delta.bodyDiff ||\n !!delta.responseDiff\n\n/**\n * Compares two specs and returns a diff object\n * @param lSpec left-side spec\n * @param rSpec right-side spec\n * @param include evaluates to true if the comparison should be included\n */\nexport const compareSpecs = (\n lSpec: IApiModel,\n rSpec: IApiModel,\n include: DiffFilter = includeDiffs\n) => {\n const specSort = (a: IMethod, b: IMethod) => a.id.localeCompare(b.id)\n\n const lMethods = Object.values(lSpec.methods).sort(specSort)\n const rMethods = Object.values(rSpec.methods).sort(specSort)\n\n const lLength = lMethods.length\n const rLength = rMethods.length\n let lIndex = 0\n let rIndex = 0\n const diff: DiffRow[] = []\n\n while (lIndex < lLength || rIndex < rLength) {\n let lMethod: IMethod | undefined = lMethods[lIndex]\n let rMethod: IMethod | undefined = rMethods[rIndex]\n\n if (!lMethod) {\n rIndex++\n } else if (!rMethod) {\n lIndex++\n } else if (lMethod.id < rMethod.id) {\n rMethod = undefined\n lIndex++\n } else if (rMethod.id < lMethod.id) {\n lMethod = undefined\n rIndex++\n } else {\n lIndex++\n rIndex++\n }\n\n const delta = computeDiff(lMethod, rMethod)\n if (include(delta, lMethod, rMethod)) {\n diff.push(delta)\n }\n }\n return diff\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"specDiff.js","names":["_sdkModels","require","DiffCompare","startCount","changed","added","removed","exports","diffCompare","lKey","rKey","localeCompare","RightMissing","LeftMissing","countDiffs","count","lKeys","rKeys","comparer","arguments","length","undefined","sort","a","b","l","r","lk","rk","comp","compareEnumTypes","lType","rType","lNum","rNum","values","map","v","toString","lVal","JSON","stringify","rVal","lhs","rhs","compareTypes","EnumType","ArrayType","elementType","asHashString","diff","Object","keys","properties","summary","lhsVal","rhsVal","compareParams","lMethod","rMethod","lParams","rParams","allParams","forEach","p","name","lsh","signature","rsh","lSignature","rSignature","compareBodies","bodyParams","lSide","type","fullName","required","rSide","compareResponses","responses","statusCode","mediaType","csvHeaderRow","csvDiffRow","diffCount","replace","concat","id","lStatus","rStatus","typeDiff","paramsDiff","bodyDiff","responseDiff","mdHeaderRow","mdDiffRow","diffToString","result","computeDiff","Error","countStatus","status","includeDiffs","delta","compareSpecs","lSpec","rSpec","include","specSort","lMethods","methods","rMethods","lLength","rLength","lIndex","rIndex","push"],"sources":["../src/specDiff.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type {\n ArgValues,\n IApiModel,\n IMethod,\n IType,\n KeyedCollection,\n} from './sdkModels';\nimport { ArrayType, EnumType } 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: ArgValues = {};\n const rParams: ArgValues = {};\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: ArgValues = {};\n const rParams: ArgValues = {};\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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"}
package/lib/swift.gen.js CHANGED
@@ -7,8 +7,8 @@ exports.SwiftGen = void 0;
7
7
  var _sdkModels = require("./sdkModels");
8
8
  var _codeGen = require("./codeGen");
9
9
  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; }
10
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
11
- 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); }
10
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
11
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
12
12
  class SwiftGen extends _codeGen.CodeGen {
13
13
  constructor() {
14
14
  super(...arguments);