Merge pull request #377 from postmanlabs/feature/folder-fix

Fix for path issue while using the module on the browser.
This commit is contained in:
Umesh Pathak
2021-06-25 16:26:35 +05:30
committed by GitHub
5 changed files with 68 additions and 51 deletions

View File

@@ -2,9 +2,11 @@ var yaml = require('js-yaml'),
fs = require('fs'),
_ = require('lodash'),
// use path based on platform it's running on (web or node)
path = typeof process === 'object' ? require('path') : require('path-browserify'),
path = require('path'),
pathBrowserify = require('path-browserify'),
resolver = require('oas-resolver-browser'),
yamlParse = require('yaml');
const BROWSER = 'browser';
module.exports = {
@@ -125,17 +127,22 @@ module.exports = {
/** Given an array of files returns the root OAS file if present
*
* @param {Array} filesPathArray Array of file paths
* @param {Array} input input object that contains files array
* @param {Object} files Files map
* @return {String} rootFile
*/
getRootFiles: function (filesPathArray, files = {}) {
let rootFilesArray = [];
getRootFiles: function (input, files = {}) {
let rootFilesArray = [],
filesPathArray = input.data,
origin = input.origin || '';
filesPathArray.forEach((filePath) => {
let obj,
file,
oasObject;
try {
if (origin === BROWSER) {
path = pathBrowserify;
}
// Use files map if present to read files.
if (!_.isEmpty(files)) {
file = files[path.resolve(filePath.fileName)];
@@ -180,7 +187,8 @@ module.exports = {
externalRefs: {},
rewriteRefs: true,
openapi: openapi,
files: files
files: files,
browser: options.browser || ''
});
},
@@ -197,6 +205,12 @@ module.exports = {
// Use files map if present instead of reading files.
if (!_.isEmpty(files)) {
// Use pathBrowserify if the origin of input is browser.
if (options.browser) {
path = pathBrowserify;
}
let content = files[path.resolve(source)],
unresolved;
try {

View File

@@ -2,6 +2,7 @@
// This is the default collection name if one can't be inferred from the OpenAPI spec
const COLLECTION_NAME = 'Imported from OpenAPI 3.0',
BROWSER = 'browser',
Ajv = require('ajv'),
async = require('async'),
sdk = require('postman-collection'),
@@ -17,13 +18,15 @@ const COLLECTION_NAME = 'Imported from OpenAPI 3.0',
_ = require('lodash'),
fs = require('fs'),
// use path based on platform it's running on (web or node)
path = typeof process === 'object' ? require('path') : require('path-browserify'),
// options for oas-resolver
// This provides the base class for
// errors with the input OpenAPI spec
OpenApiErr = require('./error.js');
let path = require('path'),
pathBrowserify = require('path-browserify');
class SchemaPack {
constructor (input, options = {}) {
this.input = input;
@@ -167,6 +170,13 @@ class SchemaPack {
files = {},
rootFiles;
// Special handling depending on origin of the request.
// if it is coming from browser use pathBrowserify.
if (input.origin === BROWSER) {
path = pathBrowserify;
OasResolverOptions.browser = true;
}
// if content of files is available in the input.data
// Create a file content <> path map to be used to read files from paths.
if ('content' in input.data[0]) {
@@ -176,7 +186,7 @@ class SchemaPack {
}
try {
rootFiles = parse.getRootFiles(input.data, files);
rootFiles = parse.getRootFiles(input, files);
}
catch (e) {
return cb(null, {

77
package-lock.json generated
View File

@@ -1,6 +1,6 @@
{
"name": "openapi-to-postmanv2",
"version": "2.6.0",
"version": "2.7.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -381,7 +381,7 @@
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
"requires": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -476,7 +476,7 @@
"async": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
"integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw=="
"integrity": "sha1-s6JoXF67ZB094C0WEALGD8n4VyA="
},
"balanced-match": {
"version": "1.0.0",
@@ -570,7 +570,7 @@
"chai": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz",
"integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==",
"integrity": "sha1-tV5lWzHh6scJm+TAjCGWT84ubEk=",
"dev": true,
"requires": {
"assertion-error": "^1.1.0",
@@ -713,7 +713,7 @@
"commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
"integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM="
},
"comment-parser": {
"version": "0.4.2",
@@ -927,7 +927,7 @@
"editorconfig": {
"version": "0.15.3",
"resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz",
"integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==",
"integrity": "sha1-vvhMTnX7jcsM5c7o79UcFZmb78U=",
"dev": true,
"requires": {
"commander": "^2.19.0",
@@ -1092,7 +1092,7 @@
"eslint-plugin-jsdoc": {
"version": "3.8.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-3.8.0.tgz",
"integrity": "sha512-Fp5BwwQGCA6w/00+rp+6Dr/l2f8i1d8XsorT9qZZn+9UJQHqywPCxJ7nb5ZY50FqhDz8nY5gl/jPJ5j0elD1XQ==",
"integrity": "sha1-bF9mGLME+/4o7GiYr/j96zllrvg=",
"dev": true,
"requires": {
"comment-parser": "^0.4.2",
@@ -1103,7 +1103,7 @@
"eslint-plugin-mocha": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-5.3.0.tgz",
"integrity": "sha512-3uwlJVLijjEmBeNyH60nzqgA1gacUWLUmcKV8PIGNvj1kwP/CTgAWQHn2ayyJVwziX+KETkr9opNwT1qD/RZ5A==",
"integrity": "sha1-zz6xiuDkTkM673FZY3CVp8sZsVs=",
"dev": true,
"requires": {
"ramda": "^0.26.1"
@@ -1112,7 +1112,7 @@
"eslint-plugin-security": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz",
"integrity": "sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==",
"integrity": "sha1-1PMUSEqAsbYTuMiIboT1Lv4VJsI=",
"dev": true,
"requires": {
"safe-regex": "^1.1.0"
@@ -1230,7 +1230,7 @@
"fast-safe-stringify": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz",
"integrity": "sha1-EkqohYmSYfaK7bQqfAgN6dpgh0M="
"integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA=="
},
"figures": {
"version": "3.0.0",
@@ -1557,7 +1557,7 @@
"http2-client": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/http2-client/-/http2-client-1.3.3.tgz",
"integrity": "sha1-kPwV1kbMqGlWsVbQfIOUfVfWWak="
"integrity": "sha512-nUxLymWQ9pzkzTmir24p2RtsgruLmhje7lH3hLX1IpwvyTg77fW+1brenPPP3USAR+rQ36p5sTA/x7sjCJVkAA=="
},
"iconv-lite": {
"version": "0.4.24",
@@ -1950,7 +1950,7 @@
"js-yaml": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"integrity": "sha1-2ugS/bOCX6MGYJqHFzg8UMNqBTc=",
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
@@ -1979,7 +1979,7 @@
"json-schema-merge-allof": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz",
"integrity": "sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w==",
"integrity": "sha1-7SgozdlYYW/3T5MoMKJikXieqvI=",
"requires": {
"compute-lcm": "^1.1.2",
"json-schema-compare": "^0.2.2",
@@ -2168,7 +2168,7 @@
"mocha": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz",
"integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==",
"integrity": "sha1-AcwiewDYdase7QOnUQZonP7VpgQ=",
"dev": true,
"requires": {
"ansi-colors": "3.2.3",
@@ -2211,7 +2211,7 @@
"debug": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
"dev": true,
"requires": {
"ms": "^2.1.1"
@@ -2226,7 +2226,7 @@
"find-up": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
"dev": true,
"requires": {
"locate-path": "^3.0.0"
@@ -2235,7 +2235,7 @@
"glob": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
"integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
"integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
@@ -2281,7 +2281,7 @@
"mkdirp": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
"integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=",
"dev": true,
"requires": {
"minimist": "^1.2.5"
@@ -2290,7 +2290,7 @@
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
"integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
"dev": true
},
"p-locate": {
@@ -2331,7 +2331,7 @@
"supports-color": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz",
"integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==",
"integrity": "sha1-ds/nQs8fQbubHCmtAwaMBbTA5Ao=",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
@@ -2369,7 +2369,7 @@
"yargs-parser": {
"version": "13.1.2",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
"integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
"integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=",
"dev": true,
"requires": {
"camelcase": "^5.0.0",
@@ -2423,7 +2423,7 @@
"node-fetch-h2": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz",
"integrity": "sha1-xhiDJfm9PYNAIL8PLW3BfO0iQaw=",
"integrity": "sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==",
"requires": {
"http2-client": "^1.2.5"
}
@@ -2457,7 +2457,7 @@
"nyc": {
"version": "15.1.0",
"resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz",
"integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==",
"integrity": "sha1-EzXa4S3ch7biSdWhmUykva6nXwI=",
"dev": true,
"requires": {
"@istanbuljs/load-nyc-config": "^1.0.0",
@@ -2492,7 +2492,7 @@
"glob": {
"version": "7.1.7",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
"integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
"integrity": "sha1-Oxk+kjPwHULQs/eClLvutBj5SpA=",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
@@ -2506,13 +2506,13 @@
"resolve-from": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"integrity": "sha1-w1IlhD3493bfIcV1V7wIfp39/Gk=",
"dev": true
},
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"integrity": "sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=",
"dev": true,
"requires": {
"glob": "^7.1.3"
@@ -2523,15 +2523,15 @@
"oas-kit-common": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/oas-kit-common/-/oas-kit-common-1.0.8.tgz",
"integrity": "sha1-bYys9ukJeWekx+qLy8vXcBjh9TU=",
"integrity": "sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==",
"requires": {
"fast-safe-stringify": "^2.0.7"
}
},
"oas-resolver-browser": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/oas-resolver-browser/-/oas-resolver-browser-2.5.1.tgz",
"integrity": "sha1-jxXZIAveed0g1oGtNwsRilTM6OA=",
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/oas-resolver-browser/-/oas-resolver-browser-2.5.2.tgz",
"integrity": "sha512-L3ugWyBHOpKLT+lb+pFXCOpk3byh6usis5T9u9mfu92jH5bR6YK8MA2bebUTIjY7I4415PzDeZcmcc+i7X05MA==",
"requires": {
"node-fetch-h2": "^2.3.0",
"oas-kit-common": "^1.0.8",
@@ -2539,13 +2539,6 @@
"reftools": "^1.1.6",
"yaml": "^1.10.0",
"yargs": "^15.3.1"
},
"dependencies": {
"yaml": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz",
"integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg=="
}
}
},
"object-inspect": {
@@ -2675,7 +2668,7 @@
"parse-gitignore": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-0.5.1.tgz",
"integrity": "sha512-Ls8RQQrYC0HqaIugZ0lwKl+dcIeuaV+8iQwrsQFNHCEnodTXaEAM2+RxQFFv2xDaJ1gM4C05eY4u6KzIHvNayQ==",
"integrity": "sha1-A3DQqfoJN/GCeCGeVMJcKD3VUhg=",
"dev": true,
"requires": {
"array-unique": "^0.3.2",
@@ -2685,7 +2678,7 @@
"path-browserify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
"integrity": "sha1-2YRUqcN1PVeQhg8W9ohnueRr4f0="
},
"path-exists": {
"version": "4.0.0",
@@ -2754,7 +2747,7 @@
"postman-collection": {
"version": "3.6.11",
"resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-3.6.11.tgz",
"integrity": "sha512-22oIsOXwigdEGQJuTgS44964hj0/gN20E6/aiDoO469WiqqOk5JEEVQpW8zCDjsb9vynyk384JqE9zRyvfrH5A==",
"integrity": "sha1-t5MqqY1DNAZNRgGgQrZqXrzdi1g=",
"requires": {
"escape-html": "1.0.3",
"faker": "5.5.3",
@@ -2856,7 +2849,7 @@
"reftools": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/reftools/-/reftools-1.1.8.tgz",
"integrity": "sha1-zAj9Z+uRPXef0zBlfQEMwIDH1kM="
"integrity": "sha512-Yvz9NH8uFHzD/AXX82Li1GdAP6FzDBxEZw+njerNBBQv/XHihqsWAjNfXtaq4QD2l4TEZVnp4UbktdYSegAM3g=="
},
"regexpp": {
"version": "2.0.1",
@@ -3537,7 +3530,7 @@
"yaml": {
"version": "1.10.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
"integrity": "sha1-IwHF/78StGfejaIzOkWeKeeSDks="
},
"yargs": {
"version": "15.4.1",

View File

@@ -122,7 +122,7 @@
"js-yaml": "3.14.1",
"json-schema-merge-allof": "0.8.1",
"lodash": "4.17.21",
"oas-resolver-browser": "2.5.1",
"oas-resolver-browser": "2.5.2",
"path-browserify": "1.0.1",
"postman-collection": "3.6.11",
"yaml": "1.10.2"

View File

@@ -15,7 +15,7 @@ describe('PARSE FUNCTION TESTS', function() {
{ fileName: folderPath + '/paths/foo.yaml' },
{ fileName: folderPath + '/paths/bar.yaml' }
],
result = parse.getRootFiles(array);
result = parse.getRootFiles({ data: array, type: 'folder' });
expect(result.length).to.equal(1);
expect(result[0]).to.equal(folderPath + '/index.yaml');
});