oas-normalize 11.1.1 → 11.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-DBH3UAUF.cjs → chunk-K75HC34M.cjs} +1 -1
- package/dist/chunk-K75HC34M.cjs.map +1 -0
- package/dist/{chunk-5SLQ5SI2.js → chunk-XOS5M44Y.js} +1 -1
- package/dist/{chunk-5SLQ5SI2.js.map → chunk-XOS5M44Y.js.map} +1 -1
- package/dist/index.cjs +14 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +5 -8
- package/dist/index.js.map +1 -1
- package/dist/lib/types.cjs.map +1 -1
- package/dist/lib/utils.cjs +2 -2
- package/dist/lib/utils.cjs.map +1 -1
- package/dist/lib/utils.js +1 -1
- package/package.json +5 -6
- package/dist/chunk-DBH3UAUF.cjs.map +0 -1
|
@@ -68,4 +68,4 @@ function getAPIDefinitionType(schema) {
|
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
exports.isBuffer = isBuffer; exports.normalizeURL = normalizeURL; exports.getType = getType; exports.isOpenAPI = isOpenAPI; exports.isPostman = isPostman; exports.isSwagger = isSwagger; exports.stringToJSON = stringToJSON; exports.isAPIDefinition = isAPIDefinition; exports.getAPIDefinitionType = getAPIDefinitionType;
|
|
71
|
-
//# sourceMappingURL=chunk-
|
|
71
|
+
//# sourceMappingURL=chunk-K75HC34M.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kanadg/Code/readmeio/oas/packages/oas-normalize/dist/chunk-K75HC34M.cjs","../src/lib/utils.ts"],"names":[],"mappings":"AAAA;ACAA,iFAAkC;AAM3B,SAAS,QAAA,CAAS,GAAA,EAAU;AACjC,EAAA,OACE,IAAA,GAAO,KAAA,GACP,GAAA,CAAI,YAAA,GAAe,KAAA,GACnB,OAAO,GAAA,CAAI,WAAA,CAAY,SAAA,IAAa,WAAA,GACpC,CAAC,CAAC,GAAA,CAAI,WAAA,CAAY,QAAA,CAAS,GAAG,CAAA;AAElC;AAKO,SAAS,YAAA,CAAa,GAAA,EAAa;AACxC,EAAA,GAAA,CAAI,GAAA,CAAI,UAAA,CAAW,qBAAqB,EAAA,GAAK,GAAA,CAAI,QAAA,CAAS,QAAQ,CAAA,EAAG;AACnE,IAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,YAAA,EAAc,2BAA2B,CAAA,CAAE,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA;AAAA,EACrF;AACA,EAAA,OAAO,GAAA;AACT;AAMO,SAAS,OAAA,CAAQ,GAAA,EAAU;AAChC,EAAA,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG;AACjB,IAAA,OAAO,QAAA;AAAA,EACT,EAAA,KAAA,GAAA,CAAW,OAAO,IAAA,IAAQ,QAAA,EAAU;AAClC,IAAA,OAAO,MAAA;AAAA,EACT,EAAA,KAAA,GAAA,CAAW,OAAO,IAAA,IAAQ,QAAA,EAAU;AAClC,IAAA,GAAA,CAAI,GAAA,CAAI,KAAA,CAAM,MAAM,CAAA,EAAG;AACrB,MAAA,OAAO,aAAA;AAAA,IACT,EAAA,KAAA,GAAA,CAAW,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,EAAG;AAE1B,MAAA,OAAO,aAAA;AAAA,IACT,EAAA,KAAA,GAAA,CAAW,GAAA,CAAI,SAAA,CAAU,CAAA,EAAG,CAAC,EAAA,IAAM,MAAA,EAAQ;AACzC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA;AACT;AAMO,SAAS,SAAA,CAAU,MAAA,EAAiC;AACzD,EAAA,OAAO,CAAC,CAAC,MAAA,CAAO,OAAA;AAClB;AAaO,SAAS,SAAA,CAAU,MAAA,EAA0C;AAClE,EAAA,OAAO,CAAC,CAAC,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAC,MAAA,CAAO,IAAA;AACnC;AAMO,SAAS,SAAA,CAAU,MAAA,EAAiC;AACzD,EAAA,OAAO,CAAC,CAAC,MAAA,CAAO,OAAA;AAClB;AAMO,SAAS,YAAA,CAAa,MAAA,EAAmE;AAC9F,EAAA,GAAA,CAAI,OAAO,OAAA,IAAW,QAAA,EAAU;AAC9B,IAAA,OAAO,MAAA;AAAA,EACT,EAAA,KAAA,GAAA,CAAW,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,EAAG;AAEhC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAAA,EAC1B;AAEA,EAAA,OAAO,gBAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,EAAE,MAAA,EAAQ,oBAAY,CAAC,CAAA;AAClD;AAMO,SAAS,eAAA,CAAgB,MAAA,EAAiC;AAC/D,EAAA,OAAO,SAAA,CAAU,MAAM,EAAA,GAAK,SAAA,CAAU,MAAM,EAAA,GAAK,SAAA,CAAU,MAAM,CAAA;AACnE;AAMO,SAAS,oBAAA,CAAqB,MAAA,EAAiC;AACpE,EAAA,GAAA,CAAI,SAAA,CAAU,MAAM,CAAA,EAAG;AACrB,IAAA,OAAO,SAAA;AAAA,EACT,EAAA,KAAA,GAAA,CAAW,SAAA,CAAU,MAAM,CAAA,EAAG;AAC5B,IAAA,OAAO,SAAA;AAAA,EACT,EAAA,KAAA,GAAA,CAAW,SAAA,CAAU,MAAM,CAAA,EAAG;AAC5B,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,OAAO,SAAA;AACT;AD5DA;AACA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,8TAAC","file":"/Users/kanadg/Code/readmeio/oas/packages/oas-normalize/dist/chunk-K75HC34M.cjs","sourcesContent":[null,"import YAML, { JSON_SCHEMA } from 'js-yaml';\n\n/**\n * Determine if a given variable is a `Buffer`.\n *\n */\nexport function isBuffer(obj: any) {\n return (\n obj != null &&\n obj.constructor != null &&\n typeof obj.constructor.isBuffer === 'function' &&\n !!obj.constructor.isBuffer(obj)\n );\n}\n\n/**\n * Converts GitHub blob URLs to raw URLs\n */\nexport function normalizeURL(url: string) {\n if (url.startsWith('https://github.com/') && url.includes('/blob/')) {\n return url.replace('github.com', 'raw.githubusercontent.com').replace('/blob/', '/');\n }\n return url;\n}\n\n/**\n * Determine the type of a given variable. Returns `false` if unrecognized.\n *\n */\nexport function getType(obj: any) {\n if (isBuffer(obj)) {\n return 'buffer';\n } else if (typeof obj === 'object') {\n return 'json';\n } else if (typeof obj === 'string') {\n if (obj.match(/\\s*{/)) {\n return 'string-json';\n } else if (obj.match(/\\n/)) {\n // Not sure about this...\n return 'string-yaml';\n } else if (obj.substring(0, 4) === 'http') {\n return 'url';\n }\n\n return 'path';\n }\n\n return false;\n}\n\n/**\n * Determine if a given schema if an OpenAPI definition.\n *\n */\nexport function isOpenAPI(schema: Record<string, unknown>) {\n return !!schema.openapi;\n}\n\n/**\n * Determine if a given schema is a Postman collection.\n *\n * Unfortunately the Postman schema spec doesn't have anything like `openapi` or `swagger` for us\n * to look at but it does require that `info` and `item` be present and as `item` doesn't exist in\n * OpenAPI or Swagger we can use the combination of those two properties to determine if what we\n * have is a Postman collection.\n *\n * @see {@link https://schema.postman.com/json/collection/v2.0.0/collection.json}\n * @see {@link https://schema.postman.com/json/collection/v2.1.0/collection.json}\n */\nexport function isPostman(schema: Record<string, unknown>): boolean {\n return !!schema.info && !!schema.item;\n}\n\n/**\n * Determine if a given schema if an Swagger definition.\n *\n */\nexport function isSwagger(schema: Record<string, unknown>) {\n return !!schema.swagger;\n}\n\n/**\n * Convert a YAML blob or stringified JSON object into a JSON object.\n *\n */\nexport function stringToJSON(string: Record<string, unknown> | string): Record<string, unknown> {\n if (typeof string === 'object') {\n return string;\n } else if (string.match(/^\\s*{/)) {\n // eslint-disable-next-line try-catch-failsafe/json-parse\n return JSON.parse(string);\n }\n\n return YAML.load(string, { schema: JSON_SCHEMA }) as Record<string, unknown>;\n}\n\n/**\n * Determine if a given schema is an API definition that we can support.\n *\n */\nexport function isAPIDefinition(schema: Record<string, unknown>) {\n return isOpenAPI(schema) || isPostman(schema) || isSwagger(schema);\n}\n\n/**\n * Retrieve the type of API definition that a given schema is.\n *\n */\nexport function getAPIDefinitionType(schema: Record<string, unknown>) {\n if (isOpenAPI(schema)) {\n return 'openapi';\n } else if (isPostman(schema)) {\n return 'postman';\n } else if (isSwagger(schema)) {\n return 'swagger';\n }\n\n return 'unknown';\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/utils.ts"],"sourcesContent":["import YAML, { JSON_SCHEMA } from 'js-yaml';\n\n/**\n * Determine if a given variable is a `Buffer`.\n *\n */\nexport function isBuffer(obj: any) {\n return (\n obj != null &&\n obj.constructor != null &&\n typeof obj.constructor.isBuffer === 'function' &&\n !!obj.constructor.isBuffer(obj)\n );\n}\n\n/**\n * Converts GitHub blob URLs to raw URLs\n */\nexport function normalizeURL(url: string) {\n if (url.startsWith('https://github.com/') && url.includes('/blob/')) {\n return url.replace('github.com', 'raw.githubusercontent.com').replace('/blob/', '/');\n }\n return url;\n}\n\n/**\n * Determine the type of a given variable. Returns `false` if unrecognized.\n *\n */\nexport function getType(obj: any) {\n if (isBuffer(obj)) {\n return 'buffer';\n } else if (typeof obj === 'object') {\n return 'json';\n } else if (typeof obj === 'string') {\n if (obj.match(/\\s*{/)) {\n return 'string-json';\n } else if (obj.match(/\\n/)) {\n // Not sure about this...\n return 'string-yaml';\n } else if (obj.substring(0, 4) === 'http') {\n return 'url';\n }\n\n return 'path';\n }\n\n return false;\n}\n\n/**\n * Determine if a given schema if an OpenAPI definition.\n *\n */\nexport function isOpenAPI(schema: Record<string, unknown>) {\n return !!schema.openapi;\n}\n\n/**\n * Determine if a given schema is a Postman collection.\n *\n * Unfortunately the Postman schema spec doesn't have anything like `openapi` or `swagger` for us\n * to look at but it does require that `info` and `item` be present and as `item` doesn't exist in\n * OpenAPI or Swagger we can use the combination of those two properties to determine if what we\n * have is a Postman collection.\n *\n * @see {@link https://schema.postman.com/json/collection/v2.0.0/collection.json}\n * @see {@link https://schema.postman.com/json/collection/v2.1.0/collection.json}\n */\nexport function isPostman(schema: Record<string, unknown>): boolean {\n return !!schema.info && !!schema.item;\n}\n\n/**\n * Determine if a given schema if an Swagger definition.\n *\n */\nexport function isSwagger(schema: Record<string, unknown>) {\n return !!schema.swagger;\n}\n\n/**\n * Convert a YAML blob or stringified JSON object into a JSON object.\n *\n */\nexport function stringToJSON(string: Record<string, unknown> | string): Record<string, unknown> {\n if (typeof string === 'object') {\n return string;\n } else if (string.match(/^\\s*{/)) {\n return JSON.parse(string);\n }\n\n return YAML.load(string, { schema: JSON_SCHEMA }) as Record<string, unknown>;\n}\n\n/**\n * Determine if a given schema is an API definition that we can support.\n *\n */\nexport function isAPIDefinition(schema: Record<string, unknown>) {\n return isOpenAPI(schema) || isPostman(schema) || isSwagger(schema);\n}\n\n/**\n * Retrieve the type of API definition that a given schema is.\n *\n */\nexport function getAPIDefinitionType(schema: Record<string, unknown>) {\n if (isOpenAPI(schema)) {\n return 'openapi';\n } else if (isPostman(schema)) {\n return 'postman';\n } else if (isSwagger(schema)) {\n return 'swagger';\n }\n\n return 'unknown';\n}\n"],"mappings":";AAAA,OAAO,QAAQ,mBAAmB;AAM3B,SAAS,SAAS,KAAU;AACjC,SACE,OAAO,QACP,IAAI,eAAe,QACnB,OAAO,IAAI,YAAY,aAAa,cACpC,CAAC,CAAC,IAAI,YAAY,SAAS,GAAG;AAElC;AAKO,SAAS,aAAa,KAAa;AACxC,MAAI,IAAI,WAAW,qBAAqB,KAAK,IAAI,SAAS,QAAQ,GAAG;AACnE,WAAO,IAAI,QAAQ,cAAc,2BAA2B,EAAE,QAAQ,UAAU,GAAG;AAAA,EACrF;AACA,SAAO;AACT;AAMO,SAAS,QAAQ,KAAU;AAChC,MAAI,SAAS,GAAG,GAAG;AACjB,WAAO;AAAA,EACT,WAAW,OAAO,QAAQ,UAAU;AAClC,WAAO;AAAA,EACT,WAAW,OAAO,QAAQ,UAAU;AAClC,QAAI,IAAI,MAAM,MAAM,GAAG;AACrB,aAAO;AAAA,IACT,WAAW,IAAI,MAAM,IAAI,GAAG;AAE1B,aAAO;AAAA,IACT,WAAW,IAAI,UAAU,GAAG,CAAC,MAAM,QAAQ;AACzC,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAMO,SAAS,UAAU,QAAiC;AACzD,SAAO,CAAC,CAAC,OAAO;AAClB;AAaO,SAAS,UAAU,QAA0C;AAClE,SAAO,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,OAAO;AACnC;AAMO,SAAS,UAAU,QAAiC;AACzD,SAAO,CAAC,CAAC,OAAO;AAClB;AAMO,SAAS,aAAa,QAAmE;AAC9F,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO;AAAA,EACT,WAAW,OAAO,MAAM,OAAO,GAAG;
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts"],"sourcesContent":["import YAML, { JSON_SCHEMA } from 'js-yaml';\n\n/**\n * Determine if a given variable is a `Buffer`.\n *\n */\nexport function isBuffer(obj: any) {\n return (\n obj != null &&\n obj.constructor != null &&\n typeof obj.constructor.isBuffer === 'function' &&\n !!obj.constructor.isBuffer(obj)\n );\n}\n\n/**\n * Converts GitHub blob URLs to raw URLs\n */\nexport function normalizeURL(url: string) {\n if (url.startsWith('https://github.com/') && url.includes('/blob/')) {\n return url.replace('github.com', 'raw.githubusercontent.com').replace('/blob/', '/');\n }\n return url;\n}\n\n/**\n * Determine the type of a given variable. Returns `false` if unrecognized.\n *\n */\nexport function getType(obj: any) {\n if (isBuffer(obj)) {\n return 'buffer';\n } else if (typeof obj === 'object') {\n return 'json';\n } else if (typeof obj === 'string') {\n if (obj.match(/\\s*{/)) {\n return 'string-json';\n } else if (obj.match(/\\n/)) {\n // Not sure about this...\n return 'string-yaml';\n } else if (obj.substring(0, 4) === 'http') {\n return 'url';\n }\n\n return 'path';\n }\n\n return false;\n}\n\n/**\n * Determine if a given schema if an OpenAPI definition.\n *\n */\nexport function isOpenAPI(schema: Record<string, unknown>) {\n return !!schema.openapi;\n}\n\n/**\n * Determine if a given schema is a Postman collection.\n *\n * Unfortunately the Postman schema spec doesn't have anything like `openapi` or `swagger` for us\n * to look at but it does require that `info` and `item` be present and as `item` doesn't exist in\n * OpenAPI or Swagger we can use the combination of those two properties to determine if what we\n * have is a Postman collection.\n *\n * @see {@link https://schema.postman.com/json/collection/v2.0.0/collection.json}\n * @see {@link https://schema.postman.com/json/collection/v2.1.0/collection.json}\n */\nexport function isPostman(schema: Record<string, unknown>): boolean {\n return !!schema.info && !!schema.item;\n}\n\n/**\n * Determine if a given schema if an Swagger definition.\n *\n */\nexport function isSwagger(schema: Record<string, unknown>) {\n return !!schema.swagger;\n}\n\n/**\n * Convert a YAML blob or stringified JSON object into a JSON object.\n *\n */\nexport function stringToJSON(string: Record<string, unknown> | string): Record<string, unknown> {\n if (typeof string === 'object') {\n return string;\n } else if (string.match(/^\\s*{/)) {\n // eslint-disable-next-line try-catch-failsafe/json-parse\n return JSON.parse(string);\n }\n\n return YAML.load(string, { schema: JSON_SCHEMA }) as Record<string, unknown>;\n}\n\n/**\n * Determine if a given schema is an API definition that we can support.\n *\n */\nexport function isAPIDefinition(schema: Record<string, unknown>) {\n return isOpenAPI(schema) || isPostman(schema) || isSwagger(schema);\n}\n\n/**\n * Retrieve the type of API definition that a given schema is.\n *\n */\nexport function getAPIDefinitionType(schema: Record<string, unknown>) {\n if (isOpenAPI(schema)) {\n return 'openapi';\n } else if (isPostman(schema)) {\n return 'postman';\n } else if (isSwagger(schema)) {\n return 'swagger';\n }\n\n return 'unknown';\n}\n"],"mappings":";AAAA,OAAO,QAAQ,mBAAmB;AAM3B,SAAS,SAAS,KAAU;AACjC,SACE,OAAO,QACP,IAAI,eAAe,QACnB,OAAO,IAAI,YAAY,aAAa,cACpC,CAAC,CAAC,IAAI,YAAY,SAAS,GAAG;AAElC;AAKO,SAAS,aAAa,KAAa;AACxC,MAAI,IAAI,WAAW,qBAAqB,KAAK,IAAI,SAAS,QAAQ,GAAG;AACnE,WAAO,IAAI,QAAQ,cAAc,2BAA2B,EAAE,QAAQ,UAAU,GAAG;AAAA,EACrF;AACA,SAAO;AACT;AAMO,SAAS,QAAQ,KAAU;AAChC,MAAI,SAAS,GAAG,GAAG;AACjB,WAAO;AAAA,EACT,WAAW,OAAO,QAAQ,UAAU;AAClC,WAAO;AAAA,EACT,WAAW,OAAO,QAAQ,UAAU;AAClC,QAAI,IAAI,MAAM,MAAM,GAAG;AACrB,aAAO;AAAA,IACT,WAAW,IAAI,MAAM,IAAI,GAAG;AAE1B,aAAO;AAAA,IACT,WAAW,IAAI,UAAU,GAAG,CAAC,MAAM,QAAQ;AACzC,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAMO,SAAS,UAAU,QAAiC;AACzD,SAAO,CAAC,CAAC,OAAO;AAClB;AAaO,SAAS,UAAU,QAA0C;AAClE,SAAO,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,OAAO;AACnC;AAMO,SAAS,UAAU,QAAiC;AACzD,SAAO,CAAC,CAAC,OAAO;AAClB;AAMO,SAAS,aAAa,QAAmE;AAC9F,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO;AAAA,EACT,WAAW,OAAO,MAAM,OAAO,GAAG;AAEhC,WAAO,KAAK,MAAM,MAAM;AAAA,EAC1B;AAEA,SAAO,KAAK,KAAK,QAAQ,EAAE,QAAQ,YAAY,CAAC;AAClD;AAMO,SAAS,gBAAgB,QAAiC;AAC/D,SAAO,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM;AACnE;AAMO,SAAS,qBAAqB,QAAiC;AACpE,MAAI,UAAU,MAAM,GAAG;AACrB,WAAO;AAAA,EACT,WAAW,UAAU,MAAM,GAAG;AAC5B,WAAO;AAAA,EACT,WAAW,UAAU,MAAM,GAAG;AAC5B,WAAO;AAAA,EACT;AAEA,SAAO;AACT;","names":[]}
|
package/dist/index.cjs
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _chunkK75HC34Mcjs = require('./chunk-K75HC34M.cjs');
|
|
10
10
|
|
|
11
11
|
// src/index.ts
|
|
12
12
|
var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs);
|
|
@@ -21,7 +21,7 @@ var OASNormalize = class _OASNormalize {
|
|
|
21
21
|
enablePaths: false,
|
|
22
22
|
...opts
|
|
23
23
|
};
|
|
24
|
-
this.type =
|
|
24
|
+
this.type = _chunkK75HC34Mcjs.getType.call(void 0, this.file);
|
|
25
25
|
this.cache = {
|
|
26
26
|
load: false,
|
|
27
27
|
bundle: false,
|
|
@@ -32,10 +32,9 @@ var OASNormalize = class _OASNormalize {
|
|
|
32
32
|
* @private
|
|
33
33
|
*/
|
|
34
34
|
async load() {
|
|
35
|
-
if (this.cache.load)
|
|
36
|
-
return Promise.resolve(this.cache.load);
|
|
35
|
+
if (this.cache.load) return Promise.resolve(this.cache.load);
|
|
37
36
|
const resolve = (obj) => {
|
|
38
|
-
const ret =
|
|
37
|
+
const ret = _chunkK75HC34Mcjs.stringToJSON.call(void 0, obj);
|
|
39
38
|
this.cache.load = ret;
|
|
40
39
|
return Promise.resolve(ret);
|
|
41
40
|
};
|
|
@@ -47,7 +46,7 @@ var OASNormalize = class _OASNormalize {
|
|
|
47
46
|
case "buffer":
|
|
48
47
|
return resolve(this.file.toString());
|
|
49
48
|
case "url":
|
|
50
|
-
const resp = await fetch(
|
|
49
|
+
const resp = await fetch(_chunkK75HC34Mcjs.normalizeURL.call(void 0, this.file)).then((res) => res.text());
|
|
51
50
|
return resolve(resp);
|
|
52
51
|
case "path":
|
|
53
52
|
if (!this.opts.enablePaths) {
|
|
@@ -75,10 +74,9 @@ var OASNormalize = class _OASNormalize {
|
|
|
75
74
|
*
|
|
76
75
|
*/
|
|
77
76
|
async bundle() {
|
|
78
|
-
if (this.cache.bundle)
|
|
79
|
-
return Promise.resolve(this.cache.bundle);
|
|
77
|
+
if (this.cache.bundle) return Promise.resolve(this.cache.bundle);
|
|
80
78
|
return this.load().then((schema) => {
|
|
81
|
-
if (
|
|
79
|
+
if (_chunkK75HC34Mcjs.isPostman.call(void 0, schema)) {
|
|
82
80
|
return _OASNormalize.convertPostmanToOpenAPI(schema);
|
|
83
81
|
}
|
|
84
82
|
return schema;
|
|
@@ -92,10 +90,9 @@ var OASNormalize = class _OASNormalize {
|
|
|
92
90
|
*
|
|
93
91
|
*/
|
|
94
92
|
async deref() {
|
|
95
|
-
if (this.cache.deref)
|
|
96
|
-
return Promise.resolve(this.cache.deref);
|
|
93
|
+
if (this.cache.deref) return Promise.resolve(this.cache.deref);
|
|
97
94
|
return this.load().then((schema) => {
|
|
98
|
-
if (
|
|
95
|
+
if (_chunkK75HC34Mcjs.isPostman.call(void 0, schema)) {
|
|
99
96
|
return _OASNormalize.convertPostmanToOpenAPI(schema);
|
|
100
97
|
}
|
|
101
98
|
return schema;
|
|
@@ -116,14 +113,14 @@ var OASNormalize = class _OASNormalize {
|
|
|
116
113
|
}
|
|
117
114
|
parserOptions.validate.colorizeErrors = this.opts.colorizeErrors;
|
|
118
115
|
return this.load().then(async (schema) => {
|
|
119
|
-
if (!
|
|
116
|
+
if (!_chunkK75HC34Mcjs.isPostman.call(void 0, schema)) {
|
|
120
117
|
return schema;
|
|
121
118
|
}
|
|
122
119
|
return _OASNormalize.convertPostmanToOpenAPI(schema);
|
|
123
120
|
}).then(async (schema) => {
|
|
124
|
-
if (!
|
|
121
|
+
if (!_chunkK75HC34Mcjs.isSwagger.call(void 0, schema) && !_chunkK75HC34Mcjs.isOpenAPI.call(void 0, schema)) {
|
|
125
122
|
return Promise.reject(new Error("The supplied API definition is unsupported."));
|
|
126
|
-
} else if (
|
|
123
|
+
} else if (_chunkK75HC34Mcjs.isSwagger.call(void 0, schema)) {
|
|
127
124
|
const baseVersion = parseInt(schema.swagger, 10);
|
|
128
125
|
if (baseVersion === 1) {
|
|
129
126
|
return Promise.reject(new Error("Swagger v1.2 is unsupported."));
|
|
@@ -131,7 +128,7 @@ var OASNormalize = class _OASNormalize {
|
|
|
131
128
|
}
|
|
132
129
|
const clonedSchema = JSON.parse(JSON.stringify(schema));
|
|
133
130
|
return _openapiparser2.default.validate(clonedSchema, parserOptions).then(() => {
|
|
134
|
-
if (!convertToLatest ||
|
|
131
|
+
if (!convertToLatest || _chunkK75HC34Mcjs.isOpenAPI.call(void 0, schema)) {
|
|
135
132
|
return schema;
|
|
136
133
|
}
|
|
137
134
|
return _swagger2openapi2.default.convertObj(schema, { anchors: true }).then((options) => options.openapi);
|
|
@@ -144,7 +141,7 @@ var OASNormalize = class _OASNormalize {
|
|
|
144
141
|
*/
|
|
145
142
|
async version() {
|
|
146
143
|
return this.load().then((schema) => {
|
|
147
|
-
switch (
|
|
144
|
+
switch (_chunkK75HC34Mcjs.getAPIDefinitionType.call(void 0, schema)) {
|
|
148
145
|
case "openapi":
|
|
149
146
|
return {
|
|
150
147
|
specification: "openapi",
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Options } from './lib/types.js';\nimport type { OpenAPI, OpenAPIV2, OpenAPIV3 } from 'openapi-types';\n\nimport fs from 'node:fs';\n\nimport openapiParser from '@readme/openapi-parser';\nimport postmanToOpenAPI from '@readme/postman-to-openapi';\nimport converter from 'swagger2openapi';\n\nimport * as utils from './lib/utils.js';\n\nexport default class OASNormalize {\n cache: {\n bundle?: OpenAPI.Document | false;\n deref?: OpenAPI.Document | false;\n load?: Record<string, unknown> | false;\n };\n\n file: any;\n\n opts: Options;\n\n type: ReturnType<typeof utils.getType>;\n\n constructor(file: any, opts?: Options) {\n this.file = file;\n this.opts = {\n colorizeErrors: false,\n enablePaths: false,\n ...opts,\n };\n\n this.type = utils.getType(this.file);\n\n this.cache = {\n load: false,\n bundle: false,\n deref: false,\n };\n }\n\n /**\n * @private\n */\n async load(): Promise<Record<string, unknown>> {\n if (this.cache.load) return Promise.resolve(this.cache.load);\n\n const resolve = (obj: Parameters<typeof utils.stringToJSON>[0]) => {\n const ret = utils.stringToJSON(obj);\n this.cache.load = ret;\n return Promise.resolve(ret);\n };\n\n switch (this.type) {\n case 'json':\n case 'string-json':\n case 'string-yaml':\n return resolve(this.file);\n\n case 'buffer':\n return resolve(this.file.toString());\n\n case 'url':\n const resp = await fetch(utils.normalizeURL(this.file)).then(res => res.text());\n return resolve(resp);\n\n case 'path':\n // Load a local file\n if (!this.opts.enablePaths) {\n return Promise.reject(new Error('Use `opts.enablePaths` to enable accessing local files.'));\n }\n\n const contents = fs.readFileSync(this.file).toString();\n if (!contents.trim()) {\n return Promise.reject(new Error('No file contents found.'));\n }\n return resolve(contents);\n\n default:\n return Promise.reject(new Error('Could not load this file.'));\n }\n }\n\n /**\n * @private\n */\n static async convertPostmanToOpenAPI(schema: any) {\n return postmanToOpenAPI(JSON.stringify(schema), undefined, { outputFormat: 'json', replaceVars: true }).then(\n JSON.parse,\n );\n }\n\n /**\n * Bundle up the given API definition, resolving any external `$ref` pointers in the process.\n *\n */\n async bundle() {\n if (this.cache.bundle) return Promise.resolve(this.cache.bundle);\n\n return this.load()\n .then(schema => {\n // Though Postman collections don't support `$ref` pointers for us to bundle we'll still\n // upconvert it to an OpenAPI definition file so our returned dataset is always one of\n // those for a Postman dataset.\n if (utils.isPostman(schema)) {\n return OASNormalize.convertPostmanToOpenAPI(schema);\n }\n\n return schema;\n })\n .then(schema => openapiParser.bundle(schema))\n .then(bundle => {\n this.cache.bundle = bundle;\n return bundle;\n });\n }\n\n /**\n * Dereference the given API definition.\n *\n */\n async deref() {\n if (this.cache.deref) return Promise.resolve(this.cache.deref);\n\n return this.load()\n .then(schema => {\n // Though Postman collections don't support `$ref` pointers for us to dereference we'll\n // still upconvert it to an OpenAPI definition file so our returned dataset is always one\n // of those for a Postman dataset.\n if (utils.isPostman(schema)) {\n return OASNormalize.convertPostmanToOpenAPI(schema);\n }\n\n return schema;\n })\n .then(schema => openapiParser.dereference(schema))\n .then(dereferenced => {\n this.cache.deref = dereferenced;\n return dereferenced;\n });\n }\n\n /**\n * Validate, and potentially convert to OpenAPI, a given API definition.\n *\n */\n async validate(\n opts: {\n /**\n * Automatically convert the supplied API definition to the latest version of OpenAPI.\n */\n convertToLatest?: boolean;\n parser?: openapiParser.Options;\n } = { convertToLatest: false },\n ): Promise<OpenAPI.Document> {\n const convertToLatest = opts.convertToLatest;\n const parserOptions = opts.parser || {};\n if (!parserOptions.validate) {\n parserOptions.validate = {};\n }\n\n parserOptions.validate.colorizeErrors = this.opts.colorizeErrors;\n\n return this.load()\n .then(async schema => {\n if (!utils.isPostman(schema)) {\n return schema;\n }\n\n return OASNormalize.convertPostmanToOpenAPI(schema);\n })\n .then(async schema => {\n if (!utils.isSwagger(schema) && !utils.isOpenAPI(schema)) {\n return Promise.reject(new Error('The supplied API definition is unsupported.'));\n } else if (utils.isSwagger(schema)) {\n const baseVersion = parseInt(schema.swagger, 10);\n if (baseVersion === 1) {\n return Promise.reject(new Error('Swagger v1.2 is unsupported.'));\n }\n }\n\n /**\n * `openapiParser.validate()` dereferences schemas at the same time as validation and does\n * not give us an option to disable this. Since all we already have a dereferencing method\n * on this library and our `validate()` method here just needs to tell us if the definition\n * is valid or not we need to clone it before passing it over to `openapi-parser` so as to\n * not run into pass-by-reference problems.\n */\n const clonedSchema = JSON.parse(JSON.stringify(schema));\n\n return openapiParser\n .validate(clonedSchema, parserOptions)\n .then(() => {\n if (!convertToLatest || utils.isOpenAPI(schema)) {\n return schema;\n }\n\n return converter\n .convertObj(schema, { anchors: true })\n .then((options: { openapi: OpenAPI.Document }) => options.openapi);\n })\n .catch(err => Promise.reject(err));\n });\n }\n\n /**\n * Retrieve OpenAPI, Swagger, or Postman version information about the supplied API definition.\n *\n */\n async version(): Promise<{ specification: 'openapi' | 'postman' | 'swagger'; version: string | 'unknown' }> {\n return this.load().then(schema => {\n switch (utils.getAPIDefinitionType(schema)) {\n case 'openapi':\n return {\n specification: 'openapi',\n version: (schema as unknown as OpenAPIV3.Document).openapi,\n };\n\n case 'postman':\n let version = 'unknown';\n if ((schema?.info as Record<string, string>)?.schema) {\n // Though `info.schema` is required by the Postman spec there's no strictness to its\n // contents so we'll do our best to extract a version out of this schema URL that they\n // seem to usually match. If not we'll fallback to treating it as an `unknown` version.\n const match = (schema?.info as Record<string, string>).schema.match(\n /http(s?):\\/\\/schema.getpostman.com\\/json\\/collection\\/v([0-9.]+)\\//,\n );\n\n if (match) {\n version = match[2];\n }\n }\n\n return {\n specification: 'postman',\n version,\n };\n\n case 'swagger':\n return {\n specification: 'swagger',\n version: (schema as unknown as OpenAPIV2.Document).swagger,\n };\n\n default:\n throw new Error('Unknown file detected.');\n }\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/Users/kanadg/Code/readmeio/oas/packages/oas-normalize/dist/index.cjs","../src/index.ts"],"names":[],"mappings":"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","file":"/Users/kanadg/Code/readmeio/oas/packages/oas-normalize/dist/index.cjs","sourcesContent":[null,"import type { Options } from './lib/types.js';\nimport type { OpenAPI, OpenAPIV2, OpenAPIV3 } from 'openapi-types';\n\nimport fs from 'node:fs';\n\nimport openapiParser from '@readme/openapi-parser';\nimport postmanToOpenAPI from '@readme/postman-to-openapi';\nimport converter from 'swagger2openapi';\n\nimport * as utils from './lib/utils.js';\n\nexport default class OASNormalize {\n cache: {\n bundle?: OpenAPI.Document | false;\n deref?: OpenAPI.Document | false;\n load?: Record<string, unknown> | false;\n };\n\n file: any;\n\n opts: Options;\n\n type: ReturnType<typeof utils.getType>;\n\n constructor(file: any, opts?: Options) {\n this.file = file;\n this.opts = {\n colorizeErrors: false,\n enablePaths: false,\n ...opts,\n };\n\n this.type = utils.getType(this.file);\n\n this.cache = {\n load: false,\n bundle: false,\n deref: false,\n };\n }\n\n /**\n * @private\n */\n async load(): Promise<Record<string, unknown>> {\n if (this.cache.load) return Promise.resolve(this.cache.load);\n\n const resolve = (obj: Parameters<typeof utils.stringToJSON>[0]) => {\n const ret = utils.stringToJSON(obj);\n this.cache.load = ret;\n return Promise.resolve(ret);\n };\n\n switch (this.type) {\n case 'json':\n case 'string-json':\n case 'string-yaml':\n return resolve(this.file);\n\n case 'buffer':\n return resolve(this.file.toString());\n\n case 'url':\n const resp = await fetch(utils.normalizeURL(this.file)).then(res => res.text());\n return resolve(resp);\n\n case 'path':\n // Load a local file\n if (!this.opts.enablePaths) {\n return Promise.reject(new Error('Use `opts.enablePaths` to enable accessing local files.'));\n }\n\n const contents = fs.readFileSync(this.file).toString();\n if (!contents.trim()) {\n return Promise.reject(new Error('No file contents found.'));\n }\n return resolve(contents);\n\n default:\n return Promise.reject(new Error('Could not load this file.'));\n }\n }\n\n /**\n * @private\n */\n static async convertPostmanToOpenAPI(schema: any) {\n return postmanToOpenAPI(JSON.stringify(schema), undefined, { outputFormat: 'json', replaceVars: true }).then(\n JSON.parse,\n );\n }\n\n /**\n * Bundle up the given API definition, resolving any external `$ref` pointers in the process.\n *\n */\n async bundle() {\n if (this.cache.bundle) return Promise.resolve(this.cache.bundle);\n\n return this.load()\n .then(schema => {\n // Though Postman collections don't support `$ref` pointers for us to bundle we'll still\n // upconvert it to an OpenAPI definition file so our returned dataset is always one of\n // those for a Postman dataset.\n if (utils.isPostman(schema)) {\n return OASNormalize.convertPostmanToOpenAPI(schema);\n }\n\n return schema;\n })\n .then(schema => openapiParser.bundle(schema))\n .then(bundle => {\n this.cache.bundle = bundle;\n return bundle;\n });\n }\n\n /**\n * Dereference the given API definition.\n *\n */\n async deref() {\n if (this.cache.deref) return Promise.resolve(this.cache.deref);\n\n return this.load()\n .then(schema => {\n // Though Postman collections don't support `$ref` pointers for us to dereference we'll\n // still upconvert it to an OpenAPI definition file so our returned dataset is always one\n // of those for a Postman dataset.\n if (utils.isPostman(schema)) {\n return OASNormalize.convertPostmanToOpenAPI(schema);\n }\n\n return schema;\n })\n .then(schema => openapiParser.dereference(schema))\n .then(dereferenced => {\n this.cache.deref = dereferenced;\n return dereferenced;\n });\n }\n\n /**\n * Validate, and potentially convert to OpenAPI, a given API definition.\n *\n */\n async validate(\n opts: {\n /**\n * Automatically convert the supplied API definition to the latest version of OpenAPI.\n */\n convertToLatest?: boolean;\n parser?: openapiParser.Options;\n } = { convertToLatest: false },\n ): Promise<OpenAPI.Document> {\n const convertToLatest = opts.convertToLatest;\n const parserOptions = opts.parser || {};\n if (!parserOptions.validate) {\n parserOptions.validate = {};\n }\n\n parserOptions.validate.colorizeErrors = this.opts.colorizeErrors;\n\n return this.load()\n .then(async schema => {\n if (!utils.isPostman(schema)) {\n return schema;\n }\n\n return OASNormalize.convertPostmanToOpenAPI(schema);\n })\n .then(async schema => {\n if (!utils.isSwagger(schema) && !utils.isOpenAPI(schema)) {\n return Promise.reject(new Error('The supplied API definition is unsupported.'));\n } else if (utils.isSwagger(schema)) {\n const baseVersion = parseInt(schema.swagger, 10);\n if (baseVersion === 1) {\n return Promise.reject(new Error('Swagger v1.2 is unsupported.'));\n }\n }\n\n /**\n * `openapiParser.validate()` dereferences schemas at the same time as validation and does\n * not give us an option to disable this. Since all we already have a dereferencing method\n * on this library and our `validate()` method here just needs to tell us if the definition\n * is valid or not we need to clone it before passing it over to `openapi-parser` so as to\n * not run into pass-by-reference problems.\n */\n // eslint-disable-next-line try-catch-failsafe/json-parse\n const clonedSchema = JSON.parse(JSON.stringify(schema));\n\n return openapiParser\n .validate(clonedSchema, parserOptions)\n .then(() => {\n if (!convertToLatest || utils.isOpenAPI(schema)) {\n return schema;\n }\n\n return converter\n .convertObj(schema, { anchors: true })\n .then((options: { openapi: OpenAPI.Document }) => options.openapi);\n })\n .catch(err => Promise.reject(err));\n });\n }\n\n /**\n * Retrieve OpenAPI, Swagger, or Postman version information about the supplied API definition.\n *\n */\n async version(): Promise<{ specification: 'openapi' | 'postman' | 'swagger'; version: string | 'unknown' }> {\n return this.load().then(schema => {\n switch (utils.getAPIDefinitionType(schema)) {\n case 'openapi':\n return {\n specification: 'openapi',\n version: (schema as unknown as OpenAPIV3.Document).openapi,\n };\n\n case 'postman':\n let version = 'unknown';\n if ((schema?.info as Record<string, string>)?.schema) {\n // Though `info.schema` is required by the Postman spec there's no strictness to its\n // contents so we'll do our best to extract a version out of this schema URL that they\n // seem to usually match. If not we'll fallback to treating it as an `unknown` version.\n const match = (schema?.info as Record<string, string>).schema.match(\n /http(s?):\\/\\/schema.getpostman.com\\/json\\/collection\\/v([0-9.]+)\\//,\n );\n\n if (match) {\n version = match[2];\n }\n }\n\n return {\n specification: 'postman',\n version,\n };\n\n case 'swagger':\n return {\n specification: 'swagger',\n version: (schema as unknown as OpenAPIV2.Document).swagger,\n };\n\n default:\n throw new Error('Unknown file detected.');\n }\n });\n }\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -6,10 +6,10 @@ import {
|
|
|
6
6
|
isSwagger,
|
|
7
7
|
normalizeURL,
|
|
8
8
|
stringToJSON
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-XOS5M44Y.js";
|
|
10
10
|
|
|
11
11
|
// src/index.ts
|
|
12
|
-
import fs from "fs";
|
|
12
|
+
import fs from "node:fs";
|
|
13
13
|
import openapiParser from "@readme/openapi-parser";
|
|
14
14
|
import postmanToOpenAPI from "@readme/postman-to-openapi";
|
|
15
15
|
import converter from "swagger2openapi";
|
|
@@ -32,8 +32,7 @@ var OASNormalize = class _OASNormalize {
|
|
|
32
32
|
* @private
|
|
33
33
|
*/
|
|
34
34
|
async load() {
|
|
35
|
-
if (this.cache.load)
|
|
36
|
-
return Promise.resolve(this.cache.load);
|
|
35
|
+
if (this.cache.load) return Promise.resolve(this.cache.load);
|
|
37
36
|
const resolve = (obj) => {
|
|
38
37
|
const ret = stringToJSON(obj);
|
|
39
38
|
this.cache.load = ret;
|
|
@@ -75,8 +74,7 @@ var OASNormalize = class _OASNormalize {
|
|
|
75
74
|
*
|
|
76
75
|
*/
|
|
77
76
|
async bundle() {
|
|
78
|
-
if (this.cache.bundle)
|
|
79
|
-
return Promise.resolve(this.cache.bundle);
|
|
77
|
+
if (this.cache.bundle) return Promise.resolve(this.cache.bundle);
|
|
80
78
|
return this.load().then((schema) => {
|
|
81
79
|
if (isPostman(schema)) {
|
|
82
80
|
return _OASNormalize.convertPostmanToOpenAPI(schema);
|
|
@@ -92,8 +90,7 @@ var OASNormalize = class _OASNormalize {
|
|
|
92
90
|
*
|
|
93
91
|
*/
|
|
94
92
|
async deref() {
|
|
95
|
-
if (this.cache.deref)
|
|
96
|
-
return Promise.resolve(this.cache.deref);
|
|
93
|
+
if (this.cache.deref) return Promise.resolve(this.cache.deref);
|
|
97
94
|
return this.load().then((schema) => {
|
|
98
95
|
if (isPostman(schema)) {
|
|
99
96
|
return _OASNormalize.convertPostmanToOpenAPI(schema);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { Options } from './lib/types.js';\nimport type { OpenAPI, OpenAPIV2, OpenAPIV3 } from 'openapi-types';\n\nimport fs from 'node:fs';\n\nimport openapiParser from '@readme/openapi-parser';\nimport postmanToOpenAPI from '@readme/postman-to-openapi';\nimport converter from 'swagger2openapi';\n\nimport * as utils from './lib/utils.js';\n\nexport default class OASNormalize {\n cache: {\n bundle?: OpenAPI.Document | false;\n deref?: OpenAPI.Document | false;\n load?: Record<string, unknown> | false;\n };\n\n file: any;\n\n opts: Options;\n\n type: ReturnType<typeof utils.getType>;\n\n constructor(file: any, opts?: Options) {\n this.file = file;\n this.opts = {\n colorizeErrors: false,\n enablePaths: false,\n ...opts,\n };\n\n this.type = utils.getType(this.file);\n\n this.cache = {\n load: false,\n bundle: false,\n deref: false,\n };\n }\n\n /**\n * @private\n */\n async load(): Promise<Record<string, unknown>> {\n if (this.cache.load) return Promise.resolve(this.cache.load);\n\n const resolve = (obj: Parameters<typeof utils.stringToJSON>[0]) => {\n const ret = utils.stringToJSON(obj);\n this.cache.load = ret;\n return Promise.resolve(ret);\n };\n\n switch (this.type) {\n case 'json':\n case 'string-json':\n case 'string-yaml':\n return resolve(this.file);\n\n case 'buffer':\n return resolve(this.file.toString());\n\n case 'url':\n const resp = await fetch(utils.normalizeURL(this.file)).then(res => res.text());\n return resolve(resp);\n\n case 'path':\n // Load a local file\n if (!this.opts.enablePaths) {\n return Promise.reject(new Error('Use `opts.enablePaths` to enable accessing local files.'));\n }\n\n const contents = fs.readFileSync(this.file).toString();\n if (!contents.trim()) {\n return Promise.reject(new Error('No file contents found.'));\n }\n return resolve(contents);\n\n default:\n return Promise.reject(new Error('Could not load this file.'));\n }\n }\n\n /**\n * @private\n */\n static async convertPostmanToOpenAPI(schema: any) {\n return postmanToOpenAPI(JSON.stringify(schema), undefined, { outputFormat: 'json', replaceVars: true }).then(\n JSON.parse,\n );\n }\n\n /**\n * Bundle up the given API definition, resolving any external `$ref` pointers in the process.\n *\n */\n async bundle() {\n if (this.cache.bundle) return Promise.resolve(this.cache.bundle);\n\n return this.load()\n .then(schema => {\n // Though Postman collections don't support `$ref` pointers for us to bundle we'll still\n // upconvert it to an OpenAPI definition file so our returned dataset is always one of\n // those for a Postman dataset.\n if (utils.isPostman(schema)) {\n return OASNormalize.convertPostmanToOpenAPI(schema);\n }\n\n return schema;\n })\n .then(schema => openapiParser.bundle(schema))\n .then(bundle => {\n this.cache.bundle = bundle;\n return bundle;\n });\n }\n\n /**\n * Dereference the given API definition.\n *\n */\n async deref() {\n if (this.cache.deref) return Promise.resolve(this.cache.deref);\n\n return this.load()\n .then(schema => {\n // Though Postman collections don't support `$ref` pointers for us to dereference we'll\n // still upconvert it to an OpenAPI definition file so our returned dataset is always one\n // of those for a Postman dataset.\n if (utils.isPostman(schema)) {\n return OASNormalize.convertPostmanToOpenAPI(schema);\n }\n\n return schema;\n })\n .then(schema => openapiParser.dereference(schema))\n .then(dereferenced => {\n this.cache.deref = dereferenced;\n return dereferenced;\n });\n }\n\n /**\n * Validate, and potentially convert to OpenAPI, a given API definition.\n *\n */\n async validate(\n opts: {\n /**\n * Automatically convert the supplied API definition to the latest version of OpenAPI.\n */\n convertToLatest?: boolean;\n parser?: openapiParser.Options;\n } = { convertToLatest: false },\n ): Promise<OpenAPI.Document> {\n const convertToLatest = opts.convertToLatest;\n const parserOptions = opts.parser || {};\n if (!parserOptions.validate) {\n parserOptions.validate = {};\n }\n\n parserOptions.validate.colorizeErrors = this.opts.colorizeErrors;\n\n return this.load()\n .then(async schema => {\n if (!utils.isPostman(schema)) {\n return schema;\n }\n\n return OASNormalize.convertPostmanToOpenAPI(schema);\n })\n .then(async schema => {\n if (!utils.isSwagger(schema) && !utils.isOpenAPI(schema)) {\n return Promise.reject(new Error('The supplied API definition is unsupported.'));\n } else if (utils.isSwagger(schema)) {\n const baseVersion = parseInt(schema.swagger, 10);\n if (baseVersion === 1) {\n return Promise.reject(new Error('Swagger v1.2 is unsupported.'));\n }\n }\n\n /**\n * `openapiParser.validate()` dereferences schemas at the same time as validation and does\n * not give us an option to disable this. Since all we already have a dereferencing method\n * on this library and our `validate()` method here just needs to tell us if the definition\n * is valid or not we need to clone it before passing it over to `openapi-parser` so as to\n * not run into pass-by-reference problems.\n */\n const clonedSchema = JSON.parse(JSON.stringify(schema));\n\n return openapiParser\n .validate(clonedSchema, parserOptions)\n .then(() => {\n if (!convertToLatest || utils.isOpenAPI(schema)) {\n return schema;\n }\n\n return converter\n .convertObj(schema, { anchors: true })\n .then((options: { openapi: OpenAPI.Document }) => options.openapi);\n })\n .catch(err => Promise.reject(err));\n });\n }\n\n /**\n * Retrieve OpenAPI, Swagger, or Postman version information about the supplied API definition.\n *\n */\n async version(): Promise<{ specification: 'openapi' | 'postman' | 'swagger'; version: string | 'unknown' }> {\n return this.load().then(schema => {\n switch (utils.getAPIDefinitionType(schema)) {\n case 'openapi':\n return {\n specification: 'openapi',\n version: (schema as unknown as OpenAPIV3.Document).openapi,\n };\n\n case 'postman':\n let version = 'unknown';\n if ((schema?.info as Record<string, string>)?.schema) {\n // Though `info.schema` is required by the Postman spec there's no strictness to its\n // contents so we'll do our best to extract a version out of this schema URL that they\n // seem to usually match. If not we'll fallback to treating it as an `unknown` version.\n const match = (schema?.info as Record<string, string>).schema.match(\n /http(s?):\\/\\/schema.getpostman.com\\/json\\/collection\\/v([0-9.]+)\\//,\n );\n\n if (match) {\n version = match[2];\n }\n }\n\n return {\n specification: 'postman',\n version,\n };\n\n case 'swagger':\n return {\n specification: 'swagger',\n version: (schema as unknown as OpenAPIV2.Document).swagger,\n };\n\n default:\n throw new Error('Unknown file detected.');\n }\n });\n }\n}\n"],"mappings":";;;;;;;;;;;AAGA,OAAO,QAAQ;AAEf,OAAO,mBAAmB;AAC1B,OAAO,sBAAsB;AAC7B,OAAO,eAAe;AAItB,IAAqB,eAArB,MAAqB,cAAa;AAAA,EAahC,YAAY,MAAW,MAAgB;AACrC,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,MACV,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,GAAG;AAAA,IACL;AAEA,SAAK,OAAa,QAAQ,KAAK,IAAI;AAEnC,SAAK,QAAQ;AAAA,MACX,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAyC;AAC7C,QAAI,KAAK,MAAM;AAAM,aAAO,QAAQ,QAAQ,KAAK,MAAM,IAAI;AAE3D,UAAM,UAAU,CAAC,QAAkD;AACjE,YAAM,MAAY,aAAa,GAAG;AAClC,WAAK,MAAM,OAAO;AAClB,aAAO,QAAQ,QAAQ,GAAG;AAAA,IAC5B;AAEA,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,QAAQ,KAAK,IAAI;AAAA,MAE1B,KAAK;AACH,eAAO,QAAQ,KAAK,KAAK,SAAS,CAAC;AAAA,MAErC,KAAK;AACH,cAAM,OAAO,MAAM,MAAY,aAAa,KAAK,IAAI,CAAC,EAAE,KAAK,SAAO,IAAI,KAAK,CAAC;AAC9E,eAAO,QAAQ,IAAI;AAAA,MAErB,KAAK;AAEH,YAAI,CAAC,KAAK,KAAK,aAAa;AAC1B,iBAAO,QAAQ,OAAO,IAAI,MAAM,yDAAyD,CAAC;AAAA,QAC5F;AAEA,cAAM,WAAW,GAAG,aAAa,KAAK,IAAI,EAAE,SAAS;AACrD,YAAI,CAAC,SAAS,KAAK,GAAG;AACpB,iBAAO,QAAQ,OAAO,IAAI,MAAM,yBAAyB,CAAC;AAAA,QAC5D;AACA,eAAO,QAAQ,QAAQ;AAAA,MAEzB;AACE,eAAO,QAAQ,OAAO,IAAI,MAAM,2BAA2B,CAAC;AAAA,IAChE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,wBAAwB,QAAa;AAChD,WAAO,iBAAiB,KAAK,UAAU,MAAM,GAAG,QAAW,EAAE,cAAc,QAAQ,aAAa,KAAK,CAAC,EAAE;AAAA,MACtG,KAAK;AAAA,IACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SAAS;AACb,QAAI,KAAK,MAAM;AAAQ,aAAO,QAAQ,QAAQ,KAAK,MAAM,MAAM;AAE/D,WAAO,KAAK,KAAK,EACd,KAAK,YAAU;AAId,UAAU,UAAU,MAAM,GAAG;AAC3B,eAAO,cAAa,wBAAwB,MAAM;AAAA,MACpD;AAEA,aAAO;AAAA,IACT,CAAC,EACA,KAAK,YAAU,cAAc,OAAO,MAAM,CAAC,EAC3C,KAAK,YAAU;AACd,WAAK,MAAM,SAAS;AACpB,aAAO;AAAA,IACT,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,QAAQ;AACZ,QAAI,KAAK,MAAM;AAAO,aAAO,QAAQ,QAAQ,KAAK,MAAM,KAAK;AAE7D,WAAO,KAAK,KAAK,EACd,KAAK,YAAU;AAId,UAAU,UAAU,MAAM,GAAG;AAC3B,eAAO,cAAa,wBAAwB,MAAM;AAAA,MACpD;AAEA,aAAO;AAAA,IACT,CAAC,EACA,KAAK,YAAU,cAAc,YAAY,MAAM,CAAC,EAChD,KAAK,kBAAgB;AACpB,WAAK,MAAM,QAAQ;AACnB,aAAO;AAAA,IACT,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SACJ,OAMI,EAAE,iBAAiB,MAAM,GACF;AAC3B,UAAM,kBAAkB,KAAK;AAC7B,UAAM,gBAAgB,KAAK,UAAU,CAAC;AACtC,QAAI,CAAC,cAAc,UAAU;AAC3B,oBAAc,WAAW,CAAC;AAAA,IAC5B;AAEA,kBAAc,SAAS,iBAAiB,KAAK,KAAK;AAElD,WAAO,KAAK,KAAK,EACd,KAAK,OAAM,WAAU;AACpB,UAAI,CAAO,UAAU,MAAM,GAAG;AAC5B,eAAO;AAAA,MACT;AAEA,aAAO,cAAa,wBAAwB,MAAM;AAAA,IACpD,CAAC,EACA,KAAK,OAAM,WAAU;AACpB,UAAI,CAAO,UAAU,MAAM,KAAK,CAAO,UAAU,MAAM,GAAG;AACxD,eAAO,QAAQ,OAAO,IAAI,MAAM,6CAA6C,CAAC;AAAA,MAChF,WAAiB,UAAU,MAAM,GAAG;AAClC,cAAM,cAAc,SAAS,OAAO,SAAS,EAAE;AAC/C,YAAI,gBAAgB,GAAG;AACrB,iBAAO,QAAQ,OAAO,IAAI,MAAM,8BAA8B,CAAC;AAAA,QACjE;AAAA,MACF;AASA,YAAM,eAAe,KAAK,MAAM,KAAK,UAAU,MAAM,CAAC;AAEtD,aAAO,cACJ,SAAS,cAAc,aAAa,EACpC,KAAK,MAAM;AACV,YAAI,CAAC,mBAAyB,UAAU,MAAM,GAAG;AAC/C,iBAAO;AAAA,QACT;AAEA,eAAO,UACJ,WAAW,QAAQ,EAAE,SAAS,KAAK,CAAC,EACpC,KAAK,CAAC,YAA2C,QAAQ,OAAO;AAAA,MACrE,CAAC,EACA,MAAM,SAAO,QAAQ,OAAO,GAAG,CAAC;AAAA,IACrC,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,UAAsG;AAC1G,WAAO,KAAK,KAAK,EAAE,KAAK,YAAU;AAChC,cAAc,qBAAqB,MAAM,GAAG;AAAA,QAC1C,KAAK;AACH,iBAAO;AAAA,YACL,eAAe;AAAA,YACf,SAAU,OAAyC;AAAA,UACrD;AAAA,QAEF,KAAK;AACH,cAAI,UAAU;AACd,cAAK,QAAQ,MAAiC,QAAQ;AAIpD,kBAAM,SAAS,QAAQ,MAAgC,OAAO;AAAA,cAC5D;AAAA,YACF;AAEA,gBAAI,OAAO;AACT,wBAAU,MAAM,CAAC;AAAA,YACnB;AAAA,UACF;AAEA,iBAAO;AAAA,YACL,eAAe;AAAA,YACf;AAAA,UACF;AAAA,QAEF,KAAK;AACH,iBAAO;AAAA,YACL,eAAe;AAAA,YACf,SAAU,OAAyC;AAAA,UACrD;AAAA,QAEF;AACE,gBAAM,IAAI,MAAM,wBAAwB;AAAA,MAC5C;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { Options } from './lib/types.js';\nimport type { OpenAPI, OpenAPIV2, OpenAPIV3 } from 'openapi-types';\n\nimport fs from 'node:fs';\n\nimport openapiParser from '@readme/openapi-parser';\nimport postmanToOpenAPI from '@readme/postman-to-openapi';\nimport converter from 'swagger2openapi';\n\nimport * as utils from './lib/utils.js';\n\nexport default class OASNormalize {\n cache: {\n bundle?: OpenAPI.Document | false;\n deref?: OpenAPI.Document | false;\n load?: Record<string, unknown> | false;\n };\n\n file: any;\n\n opts: Options;\n\n type: ReturnType<typeof utils.getType>;\n\n constructor(file: any, opts?: Options) {\n this.file = file;\n this.opts = {\n colorizeErrors: false,\n enablePaths: false,\n ...opts,\n };\n\n this.type = utils.getType(this.file);\n\n this.cache = {\n load: false,\n bundle: false,\n deref: false,\n };\n }\n\n /**\n * @private\n */\n async load(): Promise<Record<string, unknown>> {\n if (this.cache.load) return Promise.resolve(this.cache.load);\n\n const resolve = (obj: Parameters<typeof utils.stringToJSON>[0]) => {\n const ret = utils.stringToJSON(obj);\n this.cache.load = ret;\n return Promise.resolve(ret);\n };\n\n switch (this.type) {\n case 'json':\n case 'string-json':\n case 'string-yaml':\n return resolve(this.file);\n\n case 'buffer':\n return resolve(this.file.toString());\n\n case 'url':\n const resp = await fetch(utils.normalizeURL(this.file)).then(res => res.text());\n return resolve(resp);\n\n case 'path':\n // Load a local file\n if (!this.opts.enablePaths) {\n return Promise.reject(new Error('Use `opts.enablePaths` to enable accessing local files.'));\n }\n\n const contents = fs.readFileSync(this.file).toString();\n if (!contents.trim()) {\n return Promise.reject(new Error('No file contents found.'));\n }\n return resolve(contents);\n\n default:\n return Promise.reject(new Error('Could not load this file.'));\n }\n }\n\n /**\n * @private\n */\n static async convertPostmanToOpenAPI(schema: any) {\n return postmanToOpenAPI(JSON.stringify(schema), undefined, { outputFormat: 'json', replaceVars: true }).then(\n JSON.parse,\n );\n }\n\n /**\n * Bundle up the given API definition, resolving any external `$ref` pointers in the process.\n *\n */\n async bundle() {\n if (this.cache.bundle) return Promise.resolve(this.cache.bundle);\n\n return this.load()\n .then(schema => {\n // Though Postman collections don't support `$ref` pointers for us to bundle we'll still\n // upconvert it to an OpenAPI definition file so our returned dataset is always one of\n // those for a Postman dataset.\n if (utils.isPostman(schema)) {\n return OASNormalize.convertPostmanToOpenAPI(schema);\n }\n\n return schema;\n })\n .then(schema => openapiParser.bundle(schema))\n .then(bundle => {\n this.cache.bundle = bundle;\n return bundle;\n });\n }\n\n /**\n * Dereference the given API definition.\n *\n */\n async deref() {\n if (this.cache.deref) return Promise.resolve(this.cache.deref);\n\n return this.load()\n .then(schema => {\n // Though Postman collections don't support `$ref` pointers for us to dereference we'll\n // still upconvert it to an OpenAPI definition file so our returned dataset is always one\n // of those for a Postman dataset.\n if (utils.isPostman(schema)) {\n return OASNormalize.convertPostmanToOpenAPI(schema);\n }\n\n return schema;\n })\n .then(schema => openapiParser.dereference(schema))\n .then(dereferenced => {\n this.cache.deref = dereferenced;\n return dereferenced;\n });\n }\n\n /**\n * Validate, and potentially convert to OpenAPI, a given API definition.\n *\n */\n async validate(\n opts: {\n /**\n * Automatically convert the supplied API definition to the latest version of OpenAPI.\n */\n convertToLatest?: boolean;\n parser?: openapiParser.Options;\n } = { convertToLatest: false },\n ): Promise<OpenAPI.Document> {\n const convertToLatest = opts.convertToLatest;\n const parserOptions = opts.parser || {};\n if (!parserOptions.validate) {\n parserOptions.validate = {};\n }\n\n parserOptions.validate.colorizeErrors = this.opts.colorizeErrors;\n\n return this.load()\n .then(async schema => {\n if (!utils.isPostman(schema)) {\n return schema;\n }\n\n return OASNormalize.convertPostmanToOpenAPI(schema);\n })\n .then(async schema => {\n if (!utils.isSwagger(schema) && !utils.isOpenAPI(schema)) {\n return Promise.reject(new Error('The supplied API definition is unsupported.'));\n } else if (utils.isSwagger(schema)) {\n const baseVersion = parseInt(schema.swagger, 10);\n if (baseVersion === 1) {\n return Promise.reject(new Error('Swagger v1.2 is unsupported.'));\n }\n }\n\n /**\n * `openapiParser.validate()` dereferences schemas at the same time as validation and does\n * not give us an option to disable this. Since all we already have a dereferencing method\n * on this library and our `validate()` method here just needs to tell us if the definition\n * is valid or not we need to clone it before passing it over to `openapi-parser` so as to\n * not run into pass-by-reference problems.\n */\n // eslint-disable-next-line try-catch-failsafe/json-parse\n const clonedSchema = JSON.parse(JSON.stringify(schema));\n\n return openapiParser\n .validate(clonedSchema, parserOptions)\n .then(() => {\n if (!convertToLatest || utils.isOpenAPI(schema)) {\n return schema;\n }\n\n return converter\n .convertObj(schema, { anchors: true })\n .then((options: { openapi: OpenAPI.Document }) => options.openapi);\n })\n .catch(err => Promise.reject(err));\n });\n }\n\n /**\n * Retrieve OpenAPI, Swagger, or Postman version information about the supplied API definition.\n *\n */\n async version(): Promise<{ specification: 'openapi' | 'postman' | 'swagger'; version: string | 'unknown' }> {\n return this.load().then(schema => {\n switch (utils.getAPIDefinitionType(schema)) {\n case 'openapi':\n return {\n specification: 'openapi',\n version: (schema as unknown as OpenAPIV3.Document).openapi,\n };\n\n case 'postman':\n let version = 'unknown';\n if ((schema?.info as Record<string, string>)?.schema) {\n // Though `info.schema` is required by the Postman spec there's no strictness to its\n // contents so we'll do our best to extract a version out of this schema URL that they\n // seem to usually match. If not we'll fallback to treating it as an `unknown` version.\n const match = (schema?.info as Record<string, string>).schema.match(\n /http(s?):\\/\\/schema.getpostman.com\\/json\\/collection\\/v([0-9.]+)\\//,\n );\n\n if (match) {\n version = match[2];\n }\n }\n\n return {\n specification: 'postman',\n version,\n };\n\n case 'swagger':\n return {\n specification: 'swagger',\n version: (schema as unknown as OpenAPIV2.Document).swagger,\n };\n\n default:\n throw new Error('Unknown file detected.');\n }\n });\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/lib/types.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"sources":["/Users/kanadg/Code/readmeio/oas/packages/oas-normalize/dist/lib/types.cjs"],"names":[],"mappings":"AAAA","file":"/Users/kanadg/Code/readmeio/oas/packages/oas-normalize/dist/lib/types.cjs"}
|
package/dist/lib/utils.cjs
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
var
|
|
11
|
+
var _chunkK75HC34Mcjs = require('../chunk-K75HC34M.cjs');
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
|
|
@@ -19,5 +19,5 @@ var _chunkDBH3UAUFcjs = require('../chunk-DBH3UAUF.cjs');
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
exports.getAPIDefinitionType =
|
|
22
|
+
exports.getAPIDefinitionType = _chunkK75HC34Mcjs.getAPIDefinitionType; exports.getType = _chunkK75HC34Mcjs.getType; exports.isAPIDefinition = _chunkK75HC34Mcjs.isAPIDefinition; exports.isBuffer = _chunkK75HC34Mcjs.isBuffer; exports.isOpenAPI = _chunkK75HC34Mcjs.isOpenAPI; exports.isPostman = _chunkK75HC34Mcjs.isPostman; exports.isSwagger = _chunkK75HC34Mcjs.isSwagger; exports.normalizeURL = _chunkK75HC34Mcjs.normalizeURL; exports.stringToJSON = _chunkK75HC34Mcjs.stringToJSON;
|
|
23
23
|
//# sourceMappingURL=utils.cjs.map
|
package/dist/lib/utils.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"sources":["/Users/kanadg/Code/readmeio/oas/packages/oas-normalize/dist/lib/utils.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,geAAC","file":"/Users/kanadg/Code/readmeio/oas/packages/oas-normalize/dist/lib/utils.cjs"}
|
package/dist/lib/utils.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oas-normalize",
|
|
3
|
-
"version": "11.1.
|
|
3
|
+
"version": "11.1.3",
|
|
4
4
|
"description": "Tooling for converting, validating, and parsing OpenAPI, Swagger, and Postman API definitions",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"lint:types": "tsc --noEmit",
|
|
60
60
|
"prebuild": "rm -rf dist/",
|
|
61
61
|
"prepack": "npm run build",
|
|
62
|
-
"test": "
|
|
62
|
+
"test": "echo 'Please run tests from the root!' && exit 1"
|
|
63
63
|
},
|
|
64
64
|
"license": "MIT",
|
|
65
65
|
"dependencies": {
|
|
@@ -73,13 +73,12 @@
|
|
|
73
73
|
"@readme/oas-examples": "^5.12.0",
|
|
74
74
|
"@types/js-yaml": "^4.0.9",
|
|
75
75
|
"@types/swagger2openapi": "^7.0.4",
|
|
76
|
-
"@vitest/coverage-v8": "^1.4.0",
|
|
77
76
|
"eslint": "^8.57.0",
|
|
78
|
-
"
|
|
77
|
+
"nock": "^14.0.0-beta.12",
|
|
79
78
|
"tsup": "^8.0.2",
|
|
80
79
|
"typescript": "^5.1.6",
|
|
81
|
-
"vitest": "^1.
|
|
80
|
+
"vitest": "^2.1.3"
|
|
82
81
|
},
|
|
83
82
|
"prettier": "@readme/eslint-config/prettier",
|
|
84
|
-
"gitHead": "
|
|
83
|
+
"gitHead": "f93cd1cb438a034420311a6451b194fa3ae6de4b"
|
|
85
84
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/utils.ts"],"names":[],"mappings":";AAAA,OAAO,QAAQ,mBAAmB;AAM3B,SAAS,SAAS,KAAU;AACjC,SACE,OAAO,QACP,IAAI,eAAe,QACnB,OAAO,IAAI,YAAY,aAAa,cACpC,CAAC,CAAC,IAAI,YAAY,SAAS,GAAG;AAElC;AAKO,SAAS,aAAa,KAAa;AACxC,MAAI,IAAI,WAAW,qBAAqB,KAAK,IAAI,SAAS,QAAQ,GAAG;AACnE,WAAO,IAAI,QAAQ,cAAc,2BAA2B,EAAE,QAAQ,UAAU,GAAG;AAAA,EACrF;AACA,SAAO;AACT;AAMO,SAAS,QAAQ,KAAU;AAChC,MAAI,SAAS,GAAG,GAAG;AACjB,WAAO;AAAA,EACT,WAAW,OAAO,QAAQ,UAAU;AAClC,WAAO;AAAA,EACT,WAAW,OAAO,QAAQ,UAAU;AAClC,QAAI,IAAI,MAAM,MAAM,GAAG;AACrB,aAAO;AAAA,IACT,WAAW,IAAI,MAAM,IAAI,GAAG;AAE1B,aAAO;AAAA,IACT,WAAW,IAAI,UAAU,GAAG,CAAC,MAAM,QAAQ;AACzC,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAMO,SAAS,UAAU,QAAiC;AACzD,SAAO,CAAC,CAAC,OAAO;AAClB;AAaO,SAAS,UAAU,QAA0C;AAClE,SAAO,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,OAAO;AACnC;AAMO,SAAS,UAAU,QAAiC;AACzD,SAAO,CAAC,CAAC,OAAO;AAClB;AAMO,SAAS,aAAa,QAAmE;AAC9F,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO;AAAA,EACT,WAAW,OAAO,MAAM,OAAO,GAAG;AAChC,WAAO,KAAK,MAAM,MAAM;AAAA,EAC1B;AAEA,SAAO,KAAK,KAAK,QAAQ,EAAE,QAAQ,YAAY,CAAC;AAClD;AAMO,SAAS,gBAAgB,QAAiC;AAC/D,SAAO,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM;AACnE;AAMO,SAAS,qBAAqB,QAAiC;AACpE,MAAI,UAAU,MAAM,GAAG;AACrB,WAAO;AAAA,EACT,WAAW,UAAU,MAAM,GAAG;AAC5B,WAAO;AAAA,EACT,WAAW,UAAU,MAAM,GAAG;AAC5B,WAAO;AAAA,EACT;AAEA,SAAO;AACT","sourcesContent":["import YAML, { JSON_SCHEMA } from 'js-yaml';\n\n/**\n * Determine if a given variable is a `Buffer`.\n *\n */\nexport function isBuffer(obj: any) {\n return (\n obj != null &&\n obj.constructor != null &&\n typeof obj.constructor.isBuffer === 'function' &&\n !!obj.constructor.isBuffer(obj)\n );\n}\n\n/**\n * Converts GitHub blob URLs to raw URLs\n */\nexport function normalizeURL(url: string) {\n if (url.startsWith('https://github.com/') && url.includes('/blob/')) {\n return url.replace('github.com', 'raw.githubusercontent.com').replace('/blob/', '/');\n }\n return url;\n}\n\n/**\n * Determine the type of a given variable. Returns `false` if unrecognized.\n *\n */\nexport function getType(obj: any) {\n if (isBuffer(obj)) {\n return 'buffer';\n } else if (typeof obj === 'object') {\n return 'json';\n } else if (typeof obj === 'string') {\n if (obj.match(/\\s*{/)) {\n return 'string-json';\n } else if (obj.match(/\\n/)) {\n // Not sure about this...\n return 'string-yaml';\n } else if (obj.substring(0, 4) === 'http') {\n return 'url';\n }\n\n return 'path';\n }\n\n return false;\n}\n\n/**\n * Determine if a given schema if an OpenAPI definition.\n *\n */\nexport function isOpenAPI(schema: Record<string, unknown>) {\n return !!schema.openapi;\n}\n\n/**\n * Determine if a given schema is a Postman collection.\n *\n * Unfortunately the Postman schema spec doesn't have anything like `openapi` or `swagger` for us\n * to look at but it does require that `info` and `item` be present and as `item` doesn't exist in\n * OpenAPI or Swagger we can use the combination of those two properties to determine if what we\n * have is a Postman collection.\n *\n * @see {@link https://schema.postman.com/json/collection/v2.0.0/collection.json}\n * @see {@link https://schema.postman.com/json/collection/v2.1.0/collection.json}\n */\nexport function isPostman(schema: Record<string, unknown>): boolean {\n return !!schema.info && !!schema.item;\n}\n\n/**\n * Determine if a given schema if an Swagger definition.\n *\n */\nexport function isSwagger(schema: Record<string, unknown>) {\n return !!schema.swagger;\n}\n\n/**\n * Convert a YAML blob or stringified JSON object into a JSON object.\n *\n */\nexport function stringToJSON(string: Record<string, unknown> | string): Record<string, unknown> {\n if (typeof string === 'object') {\n return string;\n } else if (string.match(/^\\s*{/)) {\n return JSON.parse(string);\n }\n\n return YAML.load(string, { schema: JSON_SCHEMA }) as Record<string, unknown>;\n}\n\n/**\n * Determine if a given schema is an API definition that we can support.\n *\n */\nexport function isAPIDefinition(schema: Record<string, unknown>) {\n return isOpenAPI(schema) || isPostman(schema) || isSwagger(schema);\n}\n\n/**\n * Retrieve the type of API definition that a given schema is.\n *\n */\nexport function getAPIDefinitionType(schema: Record<string, unknown>) {\n if (isOpenAPI(schema)) {\n return 'openapi';\n } else if (isPostman(schema)) {\n return 'postman';\n } else if (isSwagger(schema)) {\n return 'swagger';\n }\n\n return 'unknown';\n}\n"]}
|