@apideck/portman
Version:
Port OpenAPI Spec to Postman Collection, with contract & variation tests included
127 lines • 4.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.sanitizeKeyForVar = exports.renderBracketPath = exports.renderSafeFullPath = exports.detectUnsafeCharacters = exports.renderChainPath = void 0;
var tslib_1 = require("tslib");
var renderChainPath = function (path, legacyMode) {
if (legacyMode === void 0) { legacyMode = false; }
var m = process.version.match(/(\d+)\.(\d+)\.(\d+)/) || ['10.0.0', '10'];
var _a = tslib_1.__read(m.slice(1).map(function (_) { return parseInt(_); }), 1), major = _a[0];
if (major < 14 || legacyMode) {
return (0, exports.renderSafeFullPath)(path);
}
var safePath = (0, exports.renderBracketPath)(path);
return safePath
.replace(/\./g, '?.')
.replace(/\[+/g, '?.[')
.replace(/\?\.\?\.+/g, '?.');
};
exports.renderChainPath = renderChainPath;
var detectUnsafeCharacters = function (path) {
var e_1, _a;
var specialChars = ['`', '@', '^', '-', '?', '*', ')', '/', '>', 'ル'];
var hasSpecialChars = function (str, chars) {
return chars.some(function (char) { return str.includes(char); });
};
var getStringBetweenBrackets = function (str) {
var start = str.indexOf('[');
var end = str.indexOf(']');
return str.slice(start + 1, end);
};
var regexCharacterInBrackets = /\[.*?\]/g;
var matches = path.match(regexCharacterInBrackets);
if (matches) {
try {
for (var matches_1 = tslib_1.__values(matches), matches_1_1 = matches_1.next(); !matches_1_1.done; matches_1_1 = matches_1.next()) {
var match = matches_1_1.value;
var str = getStringBetweenBrackets(match);
if (hasSpecialChars(str, specialChars)) {
if ((str.startsWith("'") && str.endsWith("'")) ||
(str.startsWith('"') && str.endsWith('"'))) {
return false;
}
return true;
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (matches_1_1 && !matches_1_1.done && (_a = matches_1.return)) _a.call(matches_1);
}
finally { if (e_1) throw e_1.error; }
}
}
if (hasSpecialChars(path, specialChars)) {
if (path.includes("'") || path.includes("\"")) {
return false;
}
return true;
}
return false;
};
exports.detectUnsafeCharacters = detectUnsafeCharacters;
var renderSafeFullPath = function (path) {
var safePath = (0, exports.renderBracketPath)(path);
var s = safePath.split('.');
if (s.length === 1) {
if ((0, exports.detectUnsafeCharacters)(safePath)) {
return "['".concat(safePath, "']");
}
return safePath;
}
var newPath = "";
for (var index = 0; index < s.length; index++) {
var nextPath = s.slice(0, index + 1);
newPath += "".concat(nextPath.join('.'), " && ");
}
return "".concat(newPath.slice(0, -4));
};
exports.renderSafeFullPath = renderSafeFullPath;
var renderBracketPath = function (path) {
var s = path.split('.');
if (s.length === 1) {
if ((0, exports.detectUnsafeCharacters)(path)) {
return "[\"".concat(path, "\"]");
}
return path;
}
var newPath = "";
for (var index = 0; index < s.length; index++) {
var nextPath = s[index];
var p = nextPath.split('[');
if (p.length === 1) {
if ((0, exports.detectUnsafeCharacters)(nextPath)) {
newPath += "[\"".concat(nextPath, "\"].");
}
else if (nextPath.includes(']')) {
newPath += "[".concat(nextPath, ".");
}
else {
newPath += "".concat(nextPath, ".");
}
}
var newPart = "";
for (var partIndex = 0; partIndex < p.length; partIndex++) {
var nextPart = p[partIndex];
if ((0, exports.detectUnsafeCharacters)(nextPart)) {
newPart += "[\"".concat(nextPart, "\"]");
}
else if (nextPart.includes(']')) {
newPart += "[".concat(nextPart);
}
else {
newPart += "".concat(nextPart);
}
}
if (p.length > 1) {
newPath += "".concat(newPart, ".");
}
}
return newPath.slice(0, -1).replace(/\.$/, '');
};
exports.renderBracketPath = renderBracketPath;
var sanitizeKeyForVar = function (key) {
return key.replace(/[^a-zA-Z0-9_$]/g, '_');
};
exports.sanitizeKeyForVar = sanitizeKeyForVar;
//# sourceMappingURL=renderChainPath.js.map